PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ki



~Hauptmann Krey~
02.12.2006, 12:04
Wie kann man eine glaubwürdige KI erzeugen? Allgemein, jetzt.
Man könnte ja alles mit tausenden Bedingungen machen, aber das ist mir zu verwurschtelt.
Gibt es auch eine einfache Möglichkeit?
Nehmen wir als Beispiel mal einen Shooter:
Da können doch die gegner nicht einfach sinnlos hin und her laufen oder nur den Helden verfolgen.
So etwas ist doch dumm!
Oder wenn die Gegenr mit Dingen Interagieren könne. usw. ...

Kelven
02.12.2006, 17:40
Eine glaubwürdige KI erhälst du durch einen guten Pathfinding-Algorithmus + eine vernünftige Prioritätenliste, nach der die Spielfigur bestimmt, welches Zielfeld sich besonders lohnt. Lachsen hat mal einen Pathfinding-Algorithmus für den Maker geschrieben, aber ich bezweifle, dass der sich für Echtzeitspiele eignet (du hast ja Shooter angesprochen). Auf jeden Fall wirst du um die tausend Abfragen nicht herumkommen. ;)

Mog
02.12.2006, 17:58
Bau dir ein neuronales Netz, die sind lustig. ^^ Ueber das bereits geschriebene wirst du zwar trotzdem nicht weg kommen, aber so herum macht das lernen viel mehr Spass.

~Hauptmann Krey~
02.12.2006, 18:41
Bau dir ein neuronales Netz, die sind lustig
???Was ist ein was-auch-immer-netz??


Eine glaubwürdige KI erhälst du durch einen guten Pathfinding-Algorithmus + eine vernünftige Prioritätenliste, nach der die Spielfigur bestimmt, welches Zielfeld sich besonders lohnt. Lachsen hat mal einen Pathfinding-Algorithmus für den Maker geschrieben, aber ich bezweifle, dass der sich für Echtzeitspiele eignet (du hast ja Shooter angesprochen). Auf jeden Fall wirst du um die tausend Abfragen nicht herumkommen.
Naja, es soll so etwas wie advandtes (irgentwie so) Wars werden. Dieses rundenbasierendes Strategie-Militärspiel.

Kelven
03.12.2006, 08:53
???Was ist ein was-auch-immer-netz??

Nichts, was dir bei dieser Frage weiterhelfen kann. XD



Naja, es soll so etwas wie advandtes (irgentwie so) Wars werden. Dieses rundenbasierendes Strategie-Militärspiel.

Advance Wars meinst du. Bei so einen Spiel müßten die gegnerischen Einheiten nicht nur das nächste Ziel finden, sondern sie müßten das Ziel suchen, bei dem sich ein Angriff am meisten lohnt; also sowohl alle sichtbaren eigenen als auch gegnerischen Figuren berücksichtigen. Ein einfacher Pathfinding-Algorithmus hilft dir da alleine wenig.

Phantom of Kami
03.12.2006, 09:38
Man müsste wahrscheinlich ziemlich viel rumprobieren um den Nutzen-Wert von verschiedenen Faktoren zu schätzen, aber letztlich sollte sich ddie Erfolgswahrscheinlichkeit einer Truppe, eine bestimmte andere Truppe von vielen möglichen Truppen anzugreifen schon irgendwie in ner mathematischen Gleichung ausdrücken lassen.

Diese Werte könnte man dann für jede Truppe vergleichen um zu bestimmen welche angegriffen wird.

Da kommen aber an Faktoren neben Distanzen einige ins Spiel (und je mehr man einbezieht desto mehr Arbeit hat man aber desto besser wird die KI wohl auch handeln):

-Eigene Truppenstärke -inkl. Truppenzusammensetzung (falls bestimmte Einheiten Vorteile gegenüber anderen Einheiten haben),
-gegnerische Truppenstärke (relativ zur eigenen und abhängig von den Truppenzusammensetzugnen),
-Munition einzelner Einheiten (das sollte man wiederum in die Truppenzusammensetzung mit reinrechnen da ein bazooka-Typ ohne Munition betächtlich an Wert verliert ^^)
-Positionen der Einheiten relativ zueinander (günstige Schusspositionen vs "Zielscheibenposition" -unter einbeziehen von LE, Muni, gegnerischer LE usw)
-...

Da der Spieler ja nicht wirklich weiß warum sich die KI entschieden hat wie sie es hat wird er es auch selten hinterfragen. Auch Menschen treffen oft suboptimale Entscheidungen...
solang die entscheidung nicht ABSOLUT dumm ist wird man ihr verzeihen. ^^
besser als verfolgen udn zufällig bewegen ist es allemal.


P.S. am rmxp kämst du um die Bedingungen rum wenn du die Gleichungen via Ruby aufstellst... Stell ich mir angenehmer vor als mit Conditional Branches zu arbeiten ;)

.blaze
03.12.2006, 13:12
das ist eine seeeeehr schwere Sache, und wenn du die gesamte KI als System baust, wird es noch schwerer. Schwer im Sinne von es dauert 2000 Jahre auf dem Maker.

Ich würde dir da empfelen die Gegner zu scripten, dh. Alle Aktionen für jeden einzelnen NPC vorzubestimmen... Das steigert das Spiel gefühl da es "realistischer" aussieht und ist einfahcer, jedoch können die NPCs dann nicht so gut auf Situationen reagieren, und ein Kinderspiel ist es auch nicht...
Mal ein Beispiel:
Ein paar Gegner laufen da hinten herum. Dann kommt der Held in die (vordefinierte) Sichtweite der Gegner. Die Gegner gehen jetzt in den Kampfmodus --> Bei einem globalen KI-System werden sie sich wie jeder andere Gegner verhalten, schiessen beispielsweise ein paar Mal, laufen dann zurück suchen deckung etc... Und das wird irgendwann lanweilig weil es immer gleich ist.

Wenn du das Verhalten der Gegner genau vorgibst. Wie zB:
Gegner sehen Held --> Granate Werfen --> Gegner schmeisst Schrank um und baut sich so seine Deckung --> Gegner nutzt seine Umgebung um sich Vorteile zu verschaffen -->Da die Partie des Helden sowieso größer ist als die Gegnermasse fliehen diese kurz danach.

Bei einem globalen System müsstest du ein System schreiben das die Überleben- und Erfolgschancen des Gegners erkennt, das Heldenpartie und Gegneranzahl, deren Ausrüstung, die Überlebenschancen des Helden und 100 weiterte Faktoren, etc berechnet, damit der Gegner dann weis das er fliehen sollte...
Deswegen steck nicht zu viel Aufwand in ein solches System, mit dem maker lässt sich das nicht wirklich durchsetzten... Und es ist beim Maker sogar nicht mal unbedingt die bessere Variante...

Metro
03.12.2006, 13:58
Das ist schwer ... sehr schwer ! Die KI in Siara war damals auch etwas komplex aber ich kann dir raten wie du es am Anfang machen soltest,
bau den Gegner erstmal die Grundfunktionen z.b. (Held = Feind, bei nem jeweiligen Item = Das Verhalten wird verändert) und so kannste es dann immer weiter aufbauen aber so eine richtige KI ala Armed Assault oder Crysis bekommt man mit dem Maker nicht hin :rolleyes:

Caine Luveno
04.12.2006, 19:17
*hrhr* ich bastel grad an einer AKS KI. Z.B. das die Gegner, wenn sie angreifen können auch erst angreifen wenn der Held in Reichweite ist, bzw. wenn sie Ausweichen können gelegentlich auch das tun.

Da ein Shooter dem AKS recht ähnlich ist, bzw eigentlich ein AKS darstellt, halt bloß mit Schusswaffen, lässt sich das relativ gut übertragen.

Bei mir sieht es z.B. so aus das ich Abfragen für gewisse Aktionen des Gegners erstellt habe die unter gegeben Umständen eintreten. Beispiel: Held greift Gegner an und wird treffen. In diesem Fall müsste der Gegner ausweichen. Ob er das kann bestimmt ein Aktionszähler welcher ähnlich wie eine ATB-Leiste funktioniert. Wenn der Gegner genug Punkte angesammelt hat und für eine Ausweichaktion genug da sind weicht er aus und die Punkte werden abgezogen.

So lässt sich das System beinahe endlos, und mit vielen Faktoren auch recht einfach erweitern. Wie viele Punkte der Gegner "gesammelt" haben muss bestimmt damit die Priorität.

Bei einem Shooter könnte man es so machen das wenn der Held den Gegner in Sichtlinie hat, der Gegner versucht sich hinter einer Kiste etc. zu verstecken. Einer solchen Aktion würde ich wenige Punkte zuweisen da es sich mehr um eine Standardreaktion handelt.

Pilo
04.12.2006, 20:19
Bei nem Strategiespiel ist es nochmal anders gelagert.

Ich versuch mal, mir ein Grundsystem zu Advance Wars aus meinem wirren Hirn zu saugen, kann sein, dass es Schwachsinn ist.

Zuerst bewertet die Ki alle Gegnereinheiten (sprich die des Menschen) anhand ihrer Gefährlichkeit. In die Formel würde ich einen gegeben Wert je nach Einheit auch im Bezug auf den Ko.(Titanenpanzer schlimmer als Infanterie, Sensei Mec schlimmer als "normaler" Mec) , die Lage relativ zu einer imaginären Frontlinie und zu eigenen Basen (Infanterie auf HQ schlimmer als Titanenpanzer auf der anderen Seite der Map), ob die Einheit am nächsten Tag angreifen kann einrechnen. (gibt sicher noch genug anderes)


Dann wird für jedes Feld berechnet, ob es ein jeweiliger Typ von Feindeinheiten attackieren kann (AA, Range, Panzer).


Dann wird für jede Einheit beginnend mit der bedrohlichsten eine Rangliste der eigenen Einheiten aufgestellt, die sie angreifen kann, geordnet nach einem Wert, der Schaden am Gegner und Eigenschaden beinhaltet. (eher nicht in HP sondern Wert) (=Sinnhaftigkeitwert)

Wenn das für alle Gegner abgeschlossen ist wird zuerst mit den Einheiten, die nur einen Gegner angreifen können und einen bestimmten Sinnhaftigkeitwert nicht unterschreiten angegriffen. Können die Angriffsfelder von einer Kontereinheit angegriffen werden, gibts nen Abschlag auf den Sinnhaftigkeitwert.

Dann greift die Ki mit den Einheiten mit dem insgesamt höchstem Sinnhaftigkeitwert aller Einheiten an. Wenn der Wert dieser Einheiten eine bestimmte Schwelle unterschreitet, beginnt die Ki damit, die Feinde von gefährlich nach ungefährlich abzuarbeiten, hört aber mit den Angriffen auf, sobald der Sinnhaftigkeitwert zu gering wird. Weiter gehts mit der nächsten Einheit. Zur Aufstellung der Einheiten bei Angriff würde ich sagen, je näher zur Frontlinie, desto besser, möglichst nicht direkt an einer anderen Geg. Einheit und möglichst direkt neben einer eigenen Einheit, soweit diese schon im Warten-Modus ist.

Wenn alles so abgearbeitet ist, werden die restlichen Einheiten Richtung imaginärer Frontlinie bewegt, sehr angeschlagene Einheiten Richtung nächster Stadt zum Reparieren.

Infanterien die dann ohne Job sind, besetzen freie Basen.


Produktion würde ich an den Quotient Air/AA/Tank/Range/Inf. bei Gegner als auch bei sich selbst, die Infanterie Produktion an das Verhältnis besetzte/unbesetzte Basen.
Das ganze kombiniert mit einigen vorgegebenen Mustern könnte eine gute Produktion bringen.

Um etwas Grundstrategie reinzubringen, könnte man die Frontlinienberechnung auch an frei Basen binden, damit die Ki dann offensiver wird.

Zerklüftete Maps, Inselmaps und Landungen von Seiten der Ki könnten zu Problemen führen und für Langstreckenwaffen bräuchte man wahrscheinlich auch eine eigene Berechnung, aber es ist mal ein Anfang.

Für Transporteinheiten und deren Benutzung ebenso.

Mog
05.12.2006, 00:20
Nichts, was dir bei dieser Frage weiterhelfen kann. XD



Huh? Wenn man mit einer Scriptsprache einen Pathfind-Algo schreiben kann, reichen die Mitteln auch für ein künstliches neuronales Netz aus. ^_~ Selbst, wenn man mit Arrays Klassenattribute o.ae. ersetzen muss. So ein Ding ist in C ohne Speicherverwaltung schon schnell für so etwas ausreichend geschrieben. Da wird man das mit allen Extras doch erst recht machen können, oder?^^ Und hier scheint es ja um etwas "allgemein, jetzt" zu gehen. Da geht das erst recht. Allgemein können wir sagen, dass wir immer irgendetwas kapsel-ähnliches bauen können. Somit haben wir auch alles was wir brauchen.

Kelven
05.12.2006, 08:48
Das mag sein, aber ~Hauptmann Krey~ möchte ja keine tausend verschachtelten Abfragen schreiben, sondern sucht nach einer einfachen Möglichkeit. ;) Beides ist eigentlich nichts wofür der Maker geeignet ist, zumindest nicht der 2K und 2K3.

Phantom of Kami
05.12.2006, 10:21
Damit wirfst du eine gute Frage auf: auf welchem Maker will Hauptmann Krey seine KI eigentlich umsetzen?

Wenn die Antowrt der xp ist dann find ich die Diskussion schlagartig um einiges interessanter denn da wäre ein entsprechendes Script doch wirklich mal DER Hammer...

Und die Idee mit den neuronalen Netzen find ich gar nicht so dumm -vorausgesetzt natürlich man arbeitet mit dem rmxp- auch wenn man erstmal bei den Grundlagen anfangen sollte bevor man Lernprozesse plant.
Wobei: wäre vielleicht hilfreich bei der Berechnung von Sinnhaftigkeits-Werten:

Immerhin könnte die KI bei Null anfangen und alle Möglichkeiten durchprobieren bis klar ist welche Faktoren zum Sieg wie viel beitragen....
müsste man seinen PC dann halt mal ein paar Tage am Stück durchspielen lassen aber Zeit sollte ja bei der Entwicklung einer KI keine Rolle spielen ^^

Das Ergebnis wären dann reliable Schätzungen und man könnte die Netze ja im Hintergrund weiterlaufen lassen um die KI an die Spielweise verschiedener Spieler anzupassen...

Mog
05.12.2006, 15:20
Das mag sein, aber ~Hauptmann Krey~ möchte ja keine tausend verschachtelten Abfragen schreiben, sondern sucht nach einer einfachen Möglichkeit. ;)

Wenn du meinst in einem NN gibt es tausende Abfragen, dann hast du noch nie so etwas gemacht. ;p Das sind eigentlich ein paar Milchmädchenrechnungen, die sich erst in Summe durch die Verknüpfungen zu komplexen Systemen zusammensetzen. Aber, das übernimmt sowieso ein Lernalgorithmus für uns. In Kombination mit Pathfindern und ähnlichem ist das sicher alles andere als unmöglich, Ich glaube, du stellst dir das schlichtweg zu kompliziert vor. ^^

\Kami
Naja, mit 0 anfangen ist nie eine gute Idee. Bei so etwas braucht man wohl doch besser eine gute Streuung, damit sich alles halbwegs brauchbar entwickelt. Ich persönlich würde erst mit rand anfangen und danach einfach schauen, was sich daraus durch backpropagation, oder was auch immer entwickelt.



Huh, ich verstecke mich lieber in einem anderen Unterforum. ^_~ GsandSDS-Bereich ... gefährlich.

Kelven
05.12.2006, 17:57
@Mog
Ja, ich kenne neuronale Netze nur vom Namen her. Beim Makercode hat man aber meistens tausend Abfragen, jedenfalls auf den alten, da es dort nur Integervariablen gibt und sonst nichts. Werden denn neuronale Netze in der Spielindustrie eingesetzt?

~Hauptmann Krey~
05.12.2006, 19:00
Aua.
Kopf tut weh.. vom lesen... kann nicht mehr denken... ua...
Ähm, nee. Also ich ahb nur angefangen einen kampfhintergrund für den 2k zu entwerfen, kann man aber sicher auch auf xp umsetzen. Bei so wenig wie ich bereits gemacht habe ist das kein Problem!
Gibts ne einfache Lösung/Script oder so etwas in form von Ruby?
Und was zum Teufel ist ein neuronales Netz?

p.s.:
Das "~Hauptmann Krey~" sieht irgentwie komisch aus. Schreibt lieber Krey. Bitte.

edit:
Wo ich grad lese UiD Boxkampf. Haben die Gegner da so etwas wie KI oder rennen die nur auf Grandy zu?

Mog
06.12.2006, 15:08
@Mog
Ja, ich kenne neuronale Netze nur vom Namen her. Beim Makercode hat man aber meistens tausend Abfragen, jedenfalls auf den alten, da es dort nur Integervariablen gibt und sonst nichts. Werden denn neuronale Netze in der Spielindustrie eingesetzt?

Einzeln als "alleskönnende überdenkende Einheit" kann man ein NN sicher nicht benützen. Das Netz soll schlichtweg auf gezielten Punkten Entscheidungen treffen, anhand den internen Werten und den außenstehenden Optionen. Und je nachdem, wie es klappt, ändern sich eben die inneren Werte. des Netzes und das Netz entwickelt sich. *Kopfkratzt* Auch bei Ganzzahl-typen. :D Diese Fähigkeit nutzt man recht oft, auch in einigen Spielen. Rechtschreibkorrekturen funktionieren auch so.

Dahinter steckt nur etwas Mathematik und Menschenverstand.

~Hauptmann Krey~
07.12.2006, 18:07
*Nur die hälfte versteh aber doch versteh^^ (?)*

Ist so etwas arg anstrengend?

Mog
07.12.2006, 19:17
Die Arbeit hält sich eigentlich in Grenzen. Ich habe damals mein erstes Netz aufgrund folgenden Folien eigentlich recht problemlos entwickeln können:

http://www.dbai.tuwien.ac.at/education/AIKonzepte/Folien/NeuronaleNetze.pdf



Mit etwas Intelligenz und mitdenken lassen sich die Formeln auch leicht anpassen. Irgendeine in den Folien ist auch falsch, ich glaube das war eine Rückrechnungsfunktion: Das ist dann einfach immer die erste Ableitung der Lernfunktion. (Im Zweifelsfall musst du die Mathematik nicht wirklich verstehen: Das löst auch ein besseres Mathematik-Programm für dich, oder der Mathematiklehrer deiner Wahl. ^_~)

Ich kenne einen 16-Jährigen, der das als erstes Cpp-Projekt geschrieben hat. Das ganze ist also auf dieser Ebene nicht so~ furchtbar kompliziert.

RPG Hacker
09.12.2006, 13:50
Igitt! Mal ganz davon abgesehen das ich erst 15 bin, ging dieser sechzehn jährige bestimmt auf Gymnasium!

Was auch immer, ich schätze ich versuche mich mal daran. Immerhin hatten wir den ganzen Nerven-kack erst vor kurzem in Biologie. Außerdem ist mein nächstes Ziel ein AKS in mein Projekt einzubauen. Da ich nicht der beste Mapper bin, muss ich das mit guter Technik wieder ausgleichen. Und nichts kommt da besser als ein gutes AKS! Aber ohne Künstliche Intelligenz ist ein AKS nunmal nicht gut, deswegen muss ich das wohl früher oder später mal probieren. Tja, der Tage musste ja mal kommen :) .

Aber ich glaube, DAS ist auch eher weniger mein Problem. Mein Problem bei AKS...en (oder wie auch immer das Plural ist), ist die Trefferabfrage. So eine billige Trefferabrfrage ist zwar kein Problem, ich will aber, das die Treffer duch die Kapfanimtion und nicht durch Heldenberührung ausgelöst werden falls ihr wisst was ich meine. Also, das das SCHWERT dem Gegner die Energie abzieht, und nicht der HELD!

~Hauptmann Krey~
09.12.2006, 14:13
Mach ein extra ereignis welches "Schwert" heißt und unsichtbar ist und dann lääst du es auf den Helden legen und ein felöd in die Richtung schießn in die der Held guckt.
Wie ein Shotter AKS halt!

Phantom of Kami
09.12.2006, 14:19
Zu den neuronalen Netzen:

Eine weitere kleine Einführung in neuronale Netzte, bilderreich aber ansonsten wieder sehr mathematisch gehalten:
Einführugn in neuronale Netze (Uni-Münster) (http://wwwmath.uni-muenster.de/SoftComputing/lehre/material/wwwnnscript/startseite.html)

Und noch ein ausformulierter Beitrag von meiner Uni, der auch für nicht-mathematiker und Leute ohne Abitur verständlich sein sollte:
Neuronale Netze Seminararbeit (Uni-Trier) (http://cip.uni-trier.de/pweber/NNIR.pdf)


Zu den AKS:

Du könntest es natürlich auch mit Battle-Animations machen, von denen du eine auf den Helden legst (je nachdem in welche Richtung er schaut).

Dann schaust du wie viele Pixel die Schwertspitze zu jedem Zeitpunkt der Animation vom Helden entfernt ist machst eine Kollisionsabfrage über Variablen: Die Koordinaten der Schwertspitze (die du relativ zum Helden bestimmst: also z.B. Held_x-8 und Held_y-2 für einen Schlag nach links) vergleichst du mit den Koordinaten des Gegners... fertig.
Genaugenommen kannst du damit, wenn du die Breite des Gegners nachschaust, auch einberechnen dass eine Kollision nur als solche gilt, wenn das schwert den Rand des Gegners berührt. (welcher rand das ist ergibt sich ja aus der face-direction des helden).

Aber das hat eigentlich nichts mehr mit KI zu tun, oder?

RPG Hacker
10.12.2006, 13:36
Nö, hast Recht! Ich habe die Frage auch einfach nur mal in den Raum geworfen ohne wirklich eine Antwort zu erwarten. Aber ich versuche mal etwas aus den Tipps zu machen. Und danke für die Seiten mit den Was-auch-immers, ich hoffe mal das es mir weiterhelfen wird. Aber ich hab da mal eine andere gute Idee: Wieso bin ich nicht einfach so gemein, und kopiere Lachsens Skript in mein Spiel rein :D ? Ach nee, geht nicht. Ich benutze 2k3 :( ...