"Lernende" KI

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • "Lernende" KI

      Hi an die ganze Community!
      Um hier wieder mal ein neues Thema zu eröffnen, bevor diese Abteilung einstaubt, habe ich mir etwas überlegt.
      Es gibt zwar schon einen Thread auf der GMC, aber ich finde, es ist durchaus interessant, das auch hier zu besprechen.
      Um das schnell zu erläutern:
      Es geht darum eine "lernende" künstliche Intelligenz zu coden. "Lernend" deshalb, weil es wohl klar ist, dass man das nicht mit dem "Lernen" einse Menschen vergleichen kann.

      Mit Lernen ist also gemeint, dass ein Bot aus seinen Fehlern, die er im Spiel begangen hat, "lernt". Um das vernünftig zu programmieren wird man wohl am Besten eine Datenbank anlegen und seine Vorgehen darin speichern, auf die er zurückgreifen kann.

      Mit Lernen ist nicht gemeint, zb. für einen Shooter:

      GML-Quellcode

      1. if (tot_von_kopfschuss>5) ducken=1

      Das wäre nämlich einfach nur vorprogrammiert und der Spieler könnte das System leicht durchblicken.
      Lasst mich ein Beispiel aufführen:
      Nehmen wir an der menschliche Spieler taucht immer am gleichen Ort in der Karte (Topdown-Shooter) auf und besiegt den Computer-Gegner. Der Bot wird nun versuchen den Weg zu vermeiden, an dem er stirbt.

      Um nun nicht nur einfache Sachverhalte zu posten, dachte ich mir folgendes für einen Topdown-Shooter:
      die Geh-Verhalten des Bots sind im Grid, sagen wir ein grid 32*32. Jedem Kästchen wird ein Wert für die gefährlichkeit des Platzes zugeordned (0-10, standard 5). wenn der Bot also verletzt oder getötet wird, wird im folgnden Kästchen der Wert verringert. Das selbe gilt für stellen, an denen der Bot dem menschlichen Spieler Schaden zufügt oder ihn tötet. Dafür wird der Wert des Kästchens erhöht.
      Bei der Wegwahl wird der Bot dann die Kästchen mit den höheren Werten vorziehen und den Weg wählen. Sobald der Spieler das bemerkt und seine Taktik ändert, wird nun auch der Bot einen neuen Weg wählen.

      Ich werde einmal Versuchen ein ähnliches Example zu programmieren, aber - obwohl ich denke, dass ich nicht unbegabt im programmieren bin - ich werde es vorerst mit Waypointobjekten versuchen, da ich im Fall Ki-proggen nicht sehr stark bin.

      Wenn jemand eine KI hat, die sich dafür besser eignen würde, wenn jemand interessiert an dem Thema ist, oder einfach mithelfen möchte und Anregungen hat, bitte Posten.

      © 2008 by Teamgrill Productions
    • Ich will zwar nicht daran mitarbeiten, weil ich gerade an einem anderen Projekt sitze, aber ich hab eine Idee:

      Die Bots finden ihre Lieblingswaffe und finden heraus, wann welche Waffe eingesetzt werden sollte. Zum Beispiel wenn der Bot versucht mit einer Shotgun einen Gegner auf große Distanz zu treffen und verfehlt lernt er dass er die Shotgun nicht bei dieser entfernung verwenden sollte. Das kann man auch au die Umgebung übertragen. Nur so eine Idee

      © 2008 by Teamgrill Productions
    • Ja, eine gute Idee, obwohl ich mich vorerst um die Wegpunkte und Fortbewegung der Bots kümmere. Ich hätte da schon ein kleines Programm geschrieben, jedoch fehlt da noch irgendwas im Script. So kann sich mein Bot zu einem Wegpunkt bewegen und er bleibt dann 50:50 dort stehen. Zum Besseren Verständnis ist hier das Script:
      Spoiler anzeigen

      GML-Quellcode

      1. instance_deactivate_region(x-128,y-128,x+128,y+128,false,false)
      2. instance_activate_region(x-128,y-128,x+128,y+128,true)
      3. instance_activate_object(obj_spieler)
      4. instance_activate_object(obj_schuss)
      5. instance_activate_object(obj_wand)
      6. instance_activate_object(moveto)
      7. instance_activate_object(temp)
      8. nearest=instance_nearest(x,y,obj_ki_enemy_parent)
      9. if (distance_to_object(nearest)>160 || collision_line(x,y,nearest.x,nearest.y,obj_wand,false,true)){
      10. image_angle=direction}
      11. if !(collision_line(x,y,nearest.x,nearest.y,obj_wand,false,false))
      12. if (distance_to_object(nearest)<=160)
      13. {
      14. image_angle=point_direction(x,y,nearest.x,nearest.y)
      15. if (schuss=1){
      16. inst=instance_create(x+lengthdir_x(24,image_angle),y+lengthdir_y(24,image_angle),obj_schuss)
      17. inst.direction=image_angle
      18. alarm[0]=5
      19. schuss=0}
      20. }
      21. if (suche=1)
      22. {
      23. list=ds_list_create()
      24. numb=instance_number(obj_wp)
      25. for (i=0; i<numb; i+=1)
      26. {
      27. inst=instance_find(obj_wp,i)
      28. if (inst!=moveto && inst!=temp)
      29. ds_list_add(list,inst.safety)
      30. }
      31. repeat (random(20)) ds_list_shuffle(list)
      32. for (j=0; j<numb; j+=1)
      33. {
      34. val=ds_list_find_value(list,j)
      35. if (val>=safe) safe=val
      36. }
      37. ds_list_destroy(list)
      38. for (g=0; g<numb; g+=1)
      39. {
      40. ttt=instance_find(obj_wp,g)
      41. if (ttt!=moveto && ttt!=temp)
      42. if (ttt.safety=safe){
      43. suche=0; moveto=instance_find(obj_wp,g)}
      44. }
      45. }
      46. else
      47. {
      48. mp_potential_step_object(moveto.x,moveto.y,4,obj_wand)
      49. }
      50. if (collision_circle(x,y,8,moveto,false,false))
      51. {
      52. temp=moveto;
      53. suche=1;
      54. safe=0;
      55. }
      Alles anzeigen


      Erklärung: Wenn die Variable Suche 1 ist wird eine Liste der Sicherheit der möglichen Wegpunkte erstellt. Danach wird der sicherste ausgewählt, indem die Variable "safe" immer erhöht wird, wenn es einen sicheren gibt. Dann wird der Wegpunkt, auf den die Daten zutreffen gesucht und angesteuert.

      EDIT: So KI bleibt jetzt nicht mehr stehen, dafür rennt sie nur zwischen zwei Wegpunkten hin und her, falls die anderen rundherum alle eine schlechtere Sicherheit haben. Normalerweise dürfte die Ki das laut code gar nicht... naja vll kann sichs ja wer anschauen oder gleich verbessern :D

      Ausserdem freu ich mich auf Vorschläge und Diskussionen^^

      © 2008 by Teamgrill Productions

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von MasterXY ()

    • Sorry für den Doppelpost, aber ich hab hier ein Beispiel gebastelt, Code telweise oben, das jetzt einigermaßen funktioniert um das mal so ungefähr zu demonstrieren. Natürlich ist die KI sehr schwach geproggt, aber wie gesagt, da bin ich nicht so gut drin.
      Dateien

      © 2008 by Teamgrill Productions
    • Soul Reaver schrieb:

      Die Bots finden ihre Lieblingswaffe und finden heraus, wann welche Waffe eingesetzt werden sollte. Zum Beispiel wenn der Bot versucht mit einer Shotgun einen Gegner auf große Distanz zu treffen und verfehlt lernt er dass er die Shotgun nicht bei dieser entfernung verwenden sollte. Das kann man auch au die Umgebung übertragen. Nur so eine Idee
      Das ist doch paradox. Wir wissen bereits, dass Schrotflinten auf Distanz nutzlos sind und sind problemlos in der Lage das sofort festzuhalten - es hat also wenig Sinn dafür einen Lernprozess zu entwickeln. Und zu prüfen welche Waffe auf welche Distanz zu gebrauchen ist, ist nicht mehr, als eine einfache Statistik mit mehreren Quoten zu führen. Das hat in meinen Augen herzlichst wenig mit "Lernen" zu tun.

      Jetzt könnte jemand ankommen und sagen "aber mehr steckt doch nicht hinter lernender KI" - und er hätte damit teilweise Recht. Doch wirklich "lernende" muss durchaus mehr können. Sie muss quasi alle Aspekte in der Vorgehensweise beachten. Eine lernende mag in der Theorie ja nur eine Tabelle führen, aber in Wirklichkeit muss das darauf hinauslaufen, dass sie ihr gesamtes Vorgehen selbst bestimmt. Und das gibt es durchaus, auch wenn man das in nur sehr wenigen und eher experimentellen Spielen antrifft.
    • @ F4LL0UT:
      Was ich im Grunde vorgehabt habe, mit einem Grundgerüst anzufangen, an dem dann alle in der Community mitbasteln können und Vorschläge machen können. Also sehr simpel anfangen, wie zb in meinem Beispiel und immer mehr verbessern, bis wir eine "ultimative" KI haben ^^

      Nein jetzt im Ernst. Ich wollte schon einfach anfangen und das projekt immer mehr verbessern, ich könnte es natürlich auch allein probieren, aber es ist ein wirklich interessantes Thema, von dem mehrere Leute profitieren könnten.

      Mein Anfang ist natürlich alles andere als perfekt und der Code für die KI ist schon schnell zusammengeschrieben. Aber es soll einmal einen Anhaltspunkt geben, von dem wir alle ausgehen können.

      © 2008 by Teamgrill Productions
    • Ja, ich verstehe es ja schon, aber meinem Verständnis nach, muss eine lernende KI von Grund auf darauf ausgerichtet sein eben zu lernen. Konstante bzw. grundlegende Schemata, die von Anfang an vorhanden sind, müssten ja schon auf der Basis des flexiblen Systems bestehen und ebenfalls in die intelligente Dynamik einbezogen werden. Ich bin definitiv kein Experte auf dem Gebiet und werde auch nicht versuchen es vorzugaukeln, aber sollte man nicht zum Beispiel schon damit anfangen, dass die KI im Voraus eigene Waypoints entwickelt? Dass sie in der Lage ist selbst zu navigieren und dieses System dann immer besser wird? Ich frage mich einfach: Wo fängt das eigentliche Lernen an und wo hört das schematische Bearbeiten von Werten auf?

      Es soll also keines Wegs Kritik an dem Projekt sein - ich bin selbst sehr daran interessiert, wie sowas aufgebaut sein muss und überhaupt konzeptionell arbeitet, aber ich frage mich, ob wir hier nicht gleich mit dem linken Fuß zuerst aufstehen.
    • Jap, mit den Wegpunkten selbst erstellen. Coole Idee! Aber in meinem Beispiel eben nicht (für mich) realisierbar. Liegt wahrscheinlich nicht an meinen "Codingkünsten" sondern eher daran dass ich keinen Plan habe wo man anfangen sollte. Ich schlage also vor erst gar nicht auf meinem Beispiel aufbauen, am besten wäre natürlich eine KI, die eine gridbasierende Bewegung hat, da es hier mit den Waypoints nicht so genau ist und die Ki sich teilweise den Weg selbst sucht. (Ich meine natürlich keine ruckartige Bewegung von Grid zu grid, praktisch dass die grids die wegpunkte darstellen - wer zb schon mal die Zbot-waypoints bei cs analysiert hat, die haben verschiedene felder als waypoints, denen zusätzliche werte wie campen oder springen zugewiesen sind).
      zb:
      ########
      ########
      ########
      ########

      grün der weg des bots... also wenn wir einmal ein klares grundkonzept zusammenbringen, auf das wir alles aufbauen haben wir schon mal einen der schwierigen Schritte geschafft.

      © 2008 by Teamgrill Productions
    • Ich weiß ja, dass wir sowieso nicht sofort die Megahammerkiller-KI hier entwickeln können, aber (davon ausgehend, dass wir hier praktisch von einem klassischen Bot in einem Actionspiel reden):

      Das mit den Waypoints muss ja nicht in Echtzeit erfolgen. Bei einem rundenbasierten Shooter (rundenbasiert im Sinne von wie CS oder UT) könnte die KI vor einer Runde oder vor dem Match Waypoints entwickeln und dann von Runde zu Runde neu gesammelte Erfahrungen mitnehmen. Würde sie völlig in Echtzeit Punkte setzen, dann würde das ja aussehen wie ein Spieler, der ratlos zum ersten Mal auf einer ihm unbekannten Map rumläuft. Ich denke also ein flexibles System, das jedes Mal eine Art Spielplan aufstellt, dem der Bot dann immer für jeweils eine ganze Spielrunde folgt, wäre das sinnvollste (zumal ein menschlicher Spieler ja ähnlich handelt).

      Ein wichtiger Aspekt wäre in meinen Augen sicherlich folgender: Mehrere KI-Modi. Ich denke ein passiver, ein aktiver (experimentierender) und ein fester Modus wären sinnvoll (so ein ähnliches System habe ich auch schon irgendwo gesehen - da konnte man in den Optionen zwischen den letzten beiden genannten Modi umherschalten). Ich denke mal ein passiver Modus, in dem die KI einfach verfolgt, was Spieler tun, wäre angebracht. Es wäre eher Nachahmung als Lernen, doch so könnte die KI solide und eventuell sehr spezifische Grundlagen erfahrern. Dann wäre wohl ein aktiver Modus gut, in dem die KI in Echtzeit (bzw. unter berücksichtigung der letzten Ergebnisse) sowohl agiert, Daten festhält als auch lernt. Das hieße also, dass die KI hier am ehesten einem Spieler entsprechen würde, der sich einarbeitet oder versucht eine Taktik zu entwickeln (aber natürlich in gewissem Maße auch berücksichtigt, was er schon weiß!). Der Bot müsste sicherlich auch Schrott ausprobieren, doch dafür könnte er feststellen, dass dieser nichts bringt, bzw. nur das festhalten, was Erfolge verspricht. Schließlich wäre noch ein "fester" Modus sinnvoll, in dem die KI nichts mehr festhält, sonder nur noch den Daten folgt, die er in den vorigen Modi erlangt hat. Das wäre dann im Prinzip ein klassischer Bot, der wohl auch einem typischen Hardcore-Spieler entspricht, der aber eben über die Kenntnisse und Fähigkeiten verfügt, die er sich passiv oder aktiv angearbeitet hat.

      Das sind natürlich nur konzeptionelle Hinweise und Ideen, die ich aber für einigermaßen gescheit halte. Wüsste gerne was Du (oder sonst wer) davon hältst.
    • Ja, so ähnlich hatte ich mir das auch vorgestellt. Das Lernen der KI könnte ich mir so vorstellen (großteils von dir übernommen): Bot lernt zb wie bei CS beim ersten starten der map die Wege (um dann custommaps zu unterstützen) und nach jeder Runde analysiert er, was in der Runde nicht so gut war. Danach sucht er sich für die folgende Runde einen Besseren Weg. Das würde dann wahrscheinlich deiner aktiven KI entsprechen, wobei ich denke, dass es am besten ist damit anzufangen. Der Bot würde dann, wie F4LL0UT gesagt hat, erst mal alle Taktiken ausprobieren (enstpricht einem Spieler, der zum ersten mal auf einem Inetserver spielt und keine Ahnung hat wie die Leute dort spielen). Der Bot markiert sich den besten Weg, sagen wir mal es gibt 5 Wege zum Feind zu gelangen, die aber in Abshnitten kombiniert werden können. Damit der Bot nicht jedes Mal gleich läuft, kombiniert er eben.
      Ich hatte eben so eine ähnliche Ki wie die von den Zbots aus Condition Zero und CS. Die "lernen" teilweise auch dazu was ich nochmal ausprobiert habe. Habe eine Map in CS gestartet, allein, gegen ca 5 bots. Bin dann in der map assault als terrorist immer bei der hintertür raus und hab von dort aus alle besiegt. nach ca 3 runden ist kein ct mehr zur hintertür gekommen.
      Aber was ich jetzt gesagt habe stimmt größten teils mit dem von F4LL0UT überein, ich schätze sein Konzept auch sehr ;) .

      © 2008 by Teamgrill Productions
    • Ich hab mir jetz nicht alles durchgelesen aber zu ner KI muss ich vollgendes sagn:

      1.
      Ein mensch speichert seine daten in Zuordnungen wie der PC
      Sieht jmd wie einer eine granate benutz weiß er auch wie es geht vorher hatte er keine ahnung

      2.Speicherrung PC<->KI<->Mensch
      Der Mensch hat im Kopf eine gigantische Datenbank alles merkt sich das Gehirn aber im bewusstsein rufen wir nur geringe bestände unserer Erinnerungen wieder auf
      (Wer nee erklärung dazu will sollte etwas N24 gugen übers hirn unso xD)

      Dieser Mechanismus muss in der KI einbezogen werdn(Da auch wenn man dem bot nun beibringt etwas zu lernen würde irgentwann zu einem 1 shot - 1 kill objekt werdn)

      3.Gefühle
      Gefühle beeinflussen den Menschen sehr stark wie nun dem bot gefühle beibringen?

      Der körperliche Zustand ist dabei der Schlüssel
      Im kopf werdn je nach zustand //(und an was man denkt)
      verschiedene Botenstoffe ausgesant realisieren können wir sowas beim Bot
      indem wir ihm eine vorgeschichte geben:

      Bot hatte damals eine Frau die ihn betrogen hatte, daraufhin ist er
      der arme beigetreten. //event A (geistig)
      Gestern hat Bot einen kuchen gegessen. // EV B (geistig)
      Bots rechter/linker Arm ist verletzt. //EV C (körperlich und geistig)

      Am Schlachtfeld geht er diese gedanken unbewusst durch als er an EV A denkt wird er wütend und zielt ganz genau auf sein opfer(Adrenalin)
      Als er an EV B denkt bekommt er hunger und wird unkonzentriert.
      Bei EV C wird ebenfalls adrenalin freigesetzt aber auch die zielgenauigkeit um einen prozentstel runtergesetzt.

      Zum Abschluss zum 3ten noch gefühle werdn von uns ständig verarbeitet also sollte man eine liste der events im game machen und diese den bot per zufall verarbeiten lassen mit einem 2sec(oder mehr kann auch durch was er denkt beeinflusst werden) abstand zum nächsten gedanken.
      Zum 2ten Du könntest für den Bot TEMP datein anlegen die man dann auch so in nem gewissen abstand entleer natürlich per zufall
      Zum 3ten ist kein muss aba wird schon jetz oft benutzt.

      Sorry wenn ich die groß und kleinschreibung etwas ausseracht gelassn hab x'D

      Hoffe ich war hilfreich *japanisch verabschied* xD
    • Das mit den Gefühlen ist jetzt meiner meinung nach schon ein bisschen zu weit gegeangen :D , aber die Zustsände, des Bots (zb wie du gesagt hast, Arm verletzt) das gefällt mir schon ganz gut. So könnte man zb. ein Verhalten des Menschens simulieren. Wenn jemand nämlich (im Game natürlich) sagen wir nurmehr 20 Gesundheit hat, wenig Munition und noch viele Gegner leben, wird er natürlich nicht mehr so in der Map herumrennen. So könnte man dem Bot weismachen wann er sich wie verhalten soll... Obwohl das eher weniger zum Lernen zählt. aber man muss auch ein menschliches Verhalten vorprogrammieren und wenn man das ganze ein bisschen zufällig macht, sieht es dann auch so aus, als hätte der Bot seinen eigenen Willen. Das perfekte Ziel wäre es einen Bot zu schaffen bei dem man (wenn man nicht wüsste das es einer is) glaubt, es sei ein menschlicher gegner.

      © 2008 by Teamgrill Productions
    • Hm.. soweit ich das verstanden habe, suchen wir hier eine lernende KI für Mehrspielerbots, da Bots in einem Einzelspielermodus i.d.R. keine 2. Chance bekommen. In dem Fall soll der Bot nicht handeln, wie ein Mensch in der Realität, sondern wie ein menschlicher Spieler vor seinem PC.

      benny1111200 schrieb:

      Sieht jmd wie einer eine granate benutz weiß er auch wie es geht vorher hatte er keine ahnung


      Ich nehme mal an, jemand, der ein Multiplayerspiel spielt, weiß, was es für benutzbare Gegenstände in dem Spiel gibt, und wie man mit ihnen umgeht. Ansonsten schaut er sich die Dinger einmal an, und weiß das für den Rest seines Lebens. Deswegen sollte sowas nicht Bestandteil der KI sein. Außerdem bringt dieses "lernen" der KI gar nichts, wenn sie das Gelernte nicht in andere Spiele (also Runden) mitnehmen kann. In dem Fall wird die KI eben einmal in ein paar Testspielen mit dem Entwickler "kalibriert", und man hat den selben Effekt, als wenn man es ihr direkt reinprogrammiert hätte.

      benny1111200 schrieb:

      Dieser Mechanismus muss in der KI einbezogen werdn(Da auch wenn man dem bot nun beibringt etwas zu lernen würde irgentwann zu einem 1 shot - 1 kill objekt werdn)


      Und soweit ich dem Verlauf bisher gefolgt bin, bezieht sich dieses "lernen" auch mehr auf Strategien und Taktiken während des Spielverlaufs, wie Waffen- und Routenwahl. Die Fertigkeiten der KI sollten sich dabei nicht verändern; dort eine ausgewogene Verteilung vorzunehmen, die KI also auszubalancieren, dass man sie schlagen kann, also künnstliche Dummheit einzuprogrammieren (was viel schwerer sein soll, als künstliche Intelligenz) ist Bestandteil der Entwicklung, und nicht des Lernprozesses. (Mal davon abgesehen, ob das Spiel überhaupt Kills mit einem Schuss zulässt.)

      benny1111200 schrieb:

      Gefühle beeinflussen den Menschen sehr stark wie nun dem bot gefühle beibringen?


      Nochmal: Es soll hier um die Simulation eines Menschen vor dem Computer gehen, und nicht, wie sich Menschen im wirklichen Leben verhalten würden. Und während eines Computerspiels blendet man seine Gefühle i.d.R. aus, was dann noch eine Rolle spielt ist entweder die persönliche Stimmung (aber wenn einem nicht danach ist, dann spielt man auch nicht) oder Aggressionen darüber, dass man schon wieder getötet wurde. Letzteres sollte in einer KI auf keinen Fall eingebaut werden, schließlich soll sie dazulernen, um besser zu werden, und sich nicht in eine virtuelle Aggressionsspirale reinsteigern (getötet->wütend->schlechtere Spielweise->leichter getötet->noch wütender->noch schlechtere Spielweise->u.s.w. u.s.f.).
    • CAS schrieb:

      Hm.. soweit ich das verstanden habe, suchen wir hier eine lernende KI für Mehrspielerbots, da Bots in einem Einzelspielermodus i.d.R. keine 2. Chance bekommen. In dem Fall soll der Bot nicht handeln, wie ein Mensch in der Realität, sondern wie ein menschlicher Spieler vor seinem PC.


      Stimmt, einen Bot für ein Singleplayerspiel zu programmieren ist ja um einiges leichter. Da kann man ihn ja auch in die Story einbauen und vorprogrammieren, da man nur einmal gegen diesen gewissen kämpft und da der Voraussehbarkeitseffekt nicht so stark wie bei nem Multiplayerspiel hervortritt. Aber zurück zum Thema:
      Ich will hier nicht der einzige sein, der hier postet :D , trotzdem möchte ich noch einige Anmerkungen machen.
      Ich habe schon mehrmals gelesen, dass wir alle von einem rundenbasierenden Spiel reden. Das stimmt ja auch und deshalb habe ich mir auch gedacht, dass die KI zb alle 3 runden, neue wegpunkte anlegt (Beispiel) das würde zusätzlich mehr Abwechslung ins Spiel bringen, da der menschliche Spieler so nicht auf Anhieb alle vom Bot bevorzugten Camperecken, Sniperspots.. usw herausfinden kann. Aber auch wenn wir "wechselnde" Wegpunkte einbauen, müsste es dennoch eine Basis geben. Ich stelle mir das so vor, dass beim ersten start (wie schon gesagt) die Basiswegpunkte erstellt werden, die dann in eine Datei gespeichert werden (mapname+'.wp' zb). Diese Datei enthält nur die Hauptwaypoints und wie ich vorgeschlagen habe berechnet sich der Bot dann zb alle 3 oder 4 runden die "Nebenwegpunkte" (Campspots, Sniperspots) neu. Würde gern wissen was ihr davon haltet.

      © 2008 by Teamgrill Productions
    • Ich sehe keinen Grund, warum er nicht jede Runde ein neues Waypoint-Sortiment anlegen sollte, welchem er erst im Laufe des Matches zufällig (bzw. situationsabhängig) folgt. Warum soll er denn nur alle drei Runden ein neues System anlegen und dann nur in kleinem Maße verändern? Damit hätte er von Anfang an Limitierungen, die ihn bei seinem Lernprozess und vor allem dem Auführen der eigens entwickelten Pläne sehr einschränken würde.

      @Benny (auch wenn's schon über ne Woche her ist)
      In der Tat scheinst Du garnicht verstanden haben worum es hier geht. Es geht hier nicht darum einen Simsklon zu machen! Auch nicht einen Soldatensim, der auf dem Schlachtfeld plötzlich eine Pinkelecke finden, aus der Mülltonne essen oder sich an der Schulter seines Kameraden ausheulen muss, weil ihm bei einem Treffer ins Knie die Hochzeitsnacht mit seiner mittlerweile vor dreizehn Jahren verstorbenen Frau eingefallen ist... so ein Müll. Hinzu kommt, dass dein Text dermaßen verwirrend geschrieben ist, dass sich daraus keine gescheiten konkreten Vorschläge ableiten lassen... und außerdem ging es bei deinem Beispiel nun herzlichst wenig um's Lernen in einem Spiel, sondern vor allem um das Vorprogrammieren scheinbar menschlicher Eigenschaften in einen KI-gesteuerten Charakter. Bezieht sich also überhaupt nicht auf das Thema hier.

      Übrigens denke ich, dass wir eine Sache beachten müssten: Grundsätzlich gibt es zwei Aspekte, die die Qualität eines Spielers bestimmen - zum einen sind es seine Instinkte und Reaktionen, zum anderen seine taktischen Fähigkeiten. Ersteres ist etwas, was entweder als Begabung schon vorhanden sein kann, oder durch stupides wiederholen verbessert wird (oder in manchen Fällen einfach völlig ausbleibt ;P ). Die Reaktionszeit unseres lernenden Bots sollte sofort limitiert sein auf das Niveau eines professionellen Spielers. Anhand verschiedener Tests (etwa eines Schießstand-Programms) könnte man erst die Ergebnisse menschlicher Spieler messen, daraus Werte ableiten und dann einen von seinen "physischen" Fähigkeiten einigermaßen authentischen Bot definieren. Denn die Reaktionszeiten eines Bots zu steigern, hat herzlichst wenig mit Lernvorgängen hinzu. Wir sollten sein Geschick also sofort festlegen und dann nur seine taktischen Fertigkeiten offen lassen - die Grundregeln des Spiels müssen dabei natürlich auch schon vorhanden sein. Der Bot muss wissen, was es zu tun gilt, wie sich Feinde von Freunden unterscheiden und dass der Sieg des eigenen Teams Priorität hat. Selbst entwickeln sollte er nur, wie er das nun erreichen könnte.

      Btw: Ich persönlich frage mich nun überhaupt nicht nach der konkreten technischen Umsetzung - vermutlich kommt hier am Ende garnichts raus, aber trotzdem macht es mir Spaß mich mit der Theorie zu befassen.
    • Gut, wir sind also bei der Schwierigkeit des Bots angelangt. Die Idee mit dem Schießstand finde ich richtig gut. Dass könnte man zb in einem Spiel einbauen, statt der Schwierigkeitsauswahl, die ja nur begrenzte möglichkeiten liefert. (siehe CS, bot_difficulty). Wenn man im Hauptmenü dann aber zb nen Punkt macht mit: Schießstand, hat der Spieler die möglichkeit, den Bot auf seine Fähigkeiten teilweise abzustimmen und so für ein faires Gameplay zu sorgen. Allerdings sollte man da auch dann drauf achten, dass der Bot trotzdem noch Taktiken ausführen kann. D. h.dass er nicht komplett gleich handelt wie der Spieler, sondern nur die ungefähre Spielweise annimmt.

      Zur Umsetzung:
      Wie F4LL0UT schon gesagt hat: Es macht ja auch Spaß, einfach drüber zu diskutieren, wenn wir dann am Ende unsrer Ideen sind und die "Perfektion" :D erreicht haben, kann man ja schauen, wer interesse hätte, etwas derartiges umzusetzen.

      © 2008 by Teamgrill Productions
    • Dieser Schießstand an den ich gedacht habe soll ja wie gesagt nur die Reaktionszeit des Bots festlegen. Das Problem ist, dass es keine Hürden gibt einen Bot zu machen, der zum Beispiel immer perfekt zielt und den Rückstoß so ausgleicht, dass er quasi immer genau auf das Ziel drauf hält (Stichwort Aim-Bot...). Das ist natürlich nicht akzeptabel und alles andere als das, was wir wollen. Wir müssen diesen Bot also künstlich vermenschlichen (auch Humanizing genannt), indem wir eben anhand eines Testprogramms erst messen, wie gut die Reaktionen und die Treffsicherheit eines Menschen sind - es geht hier überhaupt nicht um kreative Arbeit oder überhaupt eine Form von Intelligenz. Es geht hier einzig darum den Bot in den Bereichen, wo ihm eigentlich keine Limits gesetzt sind, auf menschliches Niveau zurückzuschrauben. Der Schießstand muss überhaupt nicht eingebunden sein, der muss nichtmal demselben System unterliegen oder sonst irgendwie große Ähnlichkeit haben. Es geht einzig darum etwas zu haben, woran man ganz klar messen kann, wozu ein Mensch in der Lage ist (also wie schnell er auf plötzlich erscheinende Feinde reagiert, auf wieviele Pixel genau er zielt etc.).
    • F4LL0UT schrieb:

      Dieser Schießstand an den ich gedacht habe soll ja wie gesagt nur die Reaktionszeit des Bots festlegen. Das Problem ist, dass es keine Hürden gibt einen Bot zu machen, der zum Beispiel immer perfekt zielt und den Rückstoß so ausgleicht, dass er quasi immer genau auf das Ziel drauf hält (Stichwort Aim-Bot...). Das ist natürlich nicht akzeptabel und alles andere als das, was wir wollen.
      also du meinst die fähigkeiten des bots müssten aus statistiken herrausgehen(wie schnell reagiert ein mensch auf neue situationen, usw.) um ihn menschlicher erscheinen zu lassen?

      klingt logisch, man könnte einfach durchschnitts werte nehmen(wobei der bot dann zu gut für schlechte spieler währe und zu schlecht für gute)

      ich denke diese Statistik sollte auch während des spiels geführt werden(wenn spieler schlechten tag-> bot fähigkeit wird minimal schlechter/ wenn spieler aimbot benutzt -> bot fähigkeit wird besser)

      also ich denke es ist ein datenbank system nötig(das dann vom spiel server der auch die learn-bots/ki steuert gewartet wird)

      die sache mit dem lernen:

      also einfach währe es wenn der bot erfahrungen mit spielern sammelt(jeder spieler hat eine ID) und dann diese miteinander vergleicht.

      würden das alle bots machen währe das spiel extrem unrealistisch(stellt euch vor alle spieler von einem cs team gehen den gleichen weg, wie oft passiert das etwa in public servern? sogut wie nie!)

      ich schreib später noch mehr meiner gedankengänge auf, der bisherige geschriebene beitrag von mir ist NICHT richtig bzw. natürlich kann es richtig sein :D aber ich hab von neurologie(gehirnforschung) wenig ahnung und meine das die reaktion nicht durch aktion hervorgerufen wird(wie es dieser eine typ da sagt)

      MfG
      Genesis

      edit: so schreib jetzt weiter.
      ________________________

      ich denke eine KI setzt Persöhnlichkeit vorraus ... (ein schwieriges thema)

      die ki hat den zweck -> ein bestimmtes ziel zu erreichen.

      dieses ziel -> kann beliebig viele unterteilungen haben.

      die unterteilungen -> müssen nicht alle erreicht werden wenn das ziel nicht eben darauf besteht

      die Bedingungen das ziel erreichen zu können -> MÜSSEN GEGEBEN SEIN.

      das was und warum ist nun geklärt, nun folgt das wie.

      wie erreicht man ein Ziel, wenn man alle vorraussetzungen erfüllt und das hauptziel klar definiert ist?

      ich würde mir den ablauf strukturieren dann priorität festlegen dann den progress beobachten und gegebenenfalls die prioritäten ändern.

      einige algorithmen in strategiespielen funktionieren so

      WENN
      soldat bewegungs Befehl ehält
      DANN
      bewegt sich der soldat
      WENN
      während der Befehlsausführung der soldat auf feinde trifft
      DANN
      ist entscheident ob die Bewegung oder die Selbstverteidigung vorrang hat
      DANACH
      1#
      ist zu entscheiden ob der Befehl noch Sinn macht oder weitere höhere Prioritäten da sind.
      WENN
      der Befehl sinn macht und keine höheren Prioritäten da sind
      DANN
      führe Befehl aus
      SONST
      führe höchste Priorität aus dann springe zu 1#

      usw.

      nun in einem strategie Spiel verhalten sich alle einheiten der selben sorte gleich ..

      ich schreib euch demnächst noch was

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Genesis ()

    • Genesis schrieb:

      ich denke diese Statistik sollte auch während des spiels geführt werden(wenn spieler schlechten tag-> bot fähigkeit wird minimal schlechter/ wenn spieler aimbot benutzt -> bot fähigkeit wird besser)


      Ich denke nicht, dass das sehr gut ist. Sodenkt der Spieler selbst immer, er sei immer gut. Die BOts sollen sich ja auch nicht zu sehr an die Spielvariante des Spielers anpassen, weil es ja sonst für den Spieler zu einfach werden würde.

      © 2008 by Teamgrill Productions
    • @ Genesis: Ich denke wenn man auf einen Feind trifft sollte Selbstverteidigung genauso wichtig wie die Bewegung sein.
      Was zu entscheiden ist, ist ob der eingeschlagene Weg überhaupt noch zum Erreichen des Ziels führt.
      Ansonsten wäre es sinnlos noch weiter zu laufen.
      Außerdem sollte die KI auch wissen wann es schon zu spät ist (d.h. sie sowieso stirbt) und dann kann sie ja einfach versuchen so viel Schaden wie möglich im gegnerischen Team zu verursachen.