Wie implementiere ich so eine KI am besten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Wie implementiere ich so eine KI am besten

Beitrag von Dostej »

Ich habe ein "problem", zu dem ich noch keine richtige Lösungsidee habe - bzw. nicht weiss wie ich das überhaupt angehen kann.

Grundsätzliches:
Ich bastle an einem Strategie-Spiel für das ich gerne Ki' s hätte. Ich hätte gerne GA oder NN verwendet, bin mir aber icht sicher, ob das so zu machen ist. Ich würde gerne mal kurz etwas beschreiben und dann ne Rückmeldung haben, wie ihr das am besten angehen würdet.

Die KI soll:
- entscheiden, was hergestellt werden soll (was wieder einfluss auf die Spieldaten hat)
- soll die Bevölkerung auf arbeiter, Forscher, Farmer und Bergwerker aufteilen.

Dabei gibt es ne Menge zusammenhänge (hier nur einige:)
- Nahrung beeinflusst Bevöälkerungwachstum und Stimmung
- Arbeiter produzieren, brauchen Rohstoffe
- Bergleute bringen Rohstoffe
- Produzierte Dinge können verschieden sein und einzelne Faktoren wieder verändern
- die Möglichen Dinge zum Bauen verändern sich im Laufe des Spiels
usw.... also eine systemische Verknüpfung der Faktoren.

DA die KI auch noch unterschiedliche Starken haben sollte schwirrt mir folgendes im Kopf rum.
Entweder per GA oder NN die verschiedenen Faktoren zu weniger dafür zentralen Werten zusammenfassen. Das dann per NN oder GA eine Entscheidung treffen lassen, was gebaut werden soll (z.B. Produktion erhöhen) und wie die Leute aufgeteilt werden sollen.
Dann die Entscheidung auf kleinerer Ebene logisch lösen.

Die Spielstärke würde dann verschiedene "KI" bedeuten, die mehr oder weniger gut den Zielwert erreichen (hohe Bevölkerung, viel Forschung etc. - je nach "charakter" der KI)

Bevor ich mich jetzt hinsetze und gross code hätte ich gerne ein bessere Spur (da meine Idee doch recht aufwendig ist...)

Erscheint das sinnvoll?
Gibt es sinnvollere Ansätze, die Komplexität zu bewältigen, also die Aufteilung der Aufgaben auf verschiedene NN's oder GA's?
Fällt jemandem was ein/ auf, was ich unbedingt beachten sollte? Ich kenn das Prinzip von GA und NN und habe so was auch schon im kleinen mal probiert (ca. 7 Variablen) , noch nciht aber mit so was komplexen (insgesamt ca 40-50 Faktoren), wenn ich die verschiedenen Bauteile mit reinnehmen, weit über 150..

So ein paar Gedanken und Hilfestellungen wären nett - und bitte: nicht so schnell OT...
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Ich habe zwar keine Ahnung was du mit GA und NN meinst, aber ich würde dir Vorschlagen man die heuristische Suche anzuschauen.

Da wird nach Lösungen gesucht, die die geringsten "Kosten" benötigen.
Wenn du die Kosten dann noch variabel machst, hast du schon einen guten Ausgangspunkt.

Beispiel:
Nahrung: Priorität 1 (höchste)
Rohstoffe: Priorität 2
Arbeiter bauen: Priorität 3
Berwerker bauen: Priorität 4

Die KI versucht nur Nahrung zu produzieren. Das geht aber nicht, weil Ressourcen zum Bau einer Nahrungs"fabrik" fehlen. Um nun die zu bekommen, werden Rohstoffe auf Priorität 1 gesetzt. Um Ressourcen zu bekommen, schickt die KI nun Berkwerker zum Bauen. Ressourcen sind nun da und die Nahrungsfabrikation kann anlaufen usw.

Code: Alles auswählen

Nahrung--Ressourcen
   |   \     |
   |    \    |
Farmer  Berkwerker
Das sind die Beziehungen der Spielelemente.
Durch Nahrung kommt man zu Farmer und Berkwerkern. Durch Farmer kommt man wieder zu Nahrung. Durch Berkwerker kommt man zu Ressourcen. Durch Ressourcen kommt man (durch Fabriken bauen) wieder zu Nahrung.

So inetwa müsste das aussehen.

Variable KI-Stärke bekommt man nun, wenn man Nahrung oder Ressourcen als höchste Priorität angibt.


Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Beitrag von Dostej »

@Laurin
GA = genetischer Algorithmus
NN = Neuronales Netz

D.h.: Die KI geht also auf die Suche und versucht für die momentane Situation die beste Kombination herauszufinden. Wie löst man das Problem, das die KI ja nur alle Leute als Farmer anstellen muss. Das ist kurzfristig das effektivste. Langfristig eher primitiv. Wie kann man die KI dazu bringen, längerfristig zu planen. Geht man dann ähnlich wie beim Schach vor. So und os viel "runden" weiterplanen und dann die Ergebnisse vergleichen?
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Dostej hat geschrieben:Wie löst man das Problem, das die KI ja nur alle Leute als Farmer anstellen muss. Das ist kurzfristig das effektivste. Langfristig eher primitiv.
Ich würde ein Farmer/Arbeiter-Verhältnis vorgeben: so ca. 1/5 je nach Gebäuden, Technologien, etc.
Dostej hat geschrieben:Wie kann man die KI dazu bringen, längerfristig zu planen. Geht man dann ähnlich wie beim Schach vor. So und os viel "runden" weiterplanen und dann die Ergebnisse vergleichen?
Also vorplanen würde ich nicht. Ich würde Zwischenziele definieren, wie der Bau eines Gebäudes und oder einer Armee mit bestimmer Stärke im Bezug auf den Spieler. Ist das Zwischenziel erreicht, geht es gleich beim nächsten weiter. Also wieder Gebäude bauen, Tech. erforschen, etc.

Die Zwischenziele würde ich noch abhängig von der Entwicklung des menschlichen Spielers machen. Wenn der eine große Armee hat, gibt es bei der KI weniger "Gebäude bauen"-Ziele und mehr "Armee bauen"-Ziele.

Ich würde zusätzlich noch eine Art "Überlauf"funktion einbauen. Wenn Die Armee eine bestimmte Stärke überschreitet, wird mit einem Teil davon der Spieler angegriffen. Sollte der Angriff fehlschlagen, wird die Überlauffunktion das nächste Mal höher angesetzt, so dass dann mehr Einheiten zum Angriff geschickt werden.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Beitrag von Dostej »

laurin
Ich bin noch am grübeln. Die Erleuchtung ist mir noch nicht gekommen.

Im Moment siehts so aus.

Der Ki eine "persönlichkeit" geben, indem sie einen Schwerpunkt hat (eher Essen, eher Forschung, Prod. o.ä.)
Dann die Daten aufbereiten, also Essenüberschuss, Vorrätige Rohstoffe etc. Stärke der gegner, Armee etc.

Dann einen Algorithmus schreiben (vermutlich als NN), der die Eingangsdaten gewichtet und daraus seine Entscheidung trifft. Irgendwie die Entscheidung stabil halten, bis deutliche Gründe dagegensprechen.

Das ganze dann x-runden laufen lassen und das Ergebnis bewerten (wie weit ist die KI gekommen...). Mutieren und nochmals los.
Das sollte verschieden starke und deutlich verschiedene KI produzieren.

Das sollte dann den Ausgangspunkt darstellen.
Und dann die KI aus dem Spiel "lernen" lassen. Fehlschläge verändern Bewertungen etc.

Das sollte KI's mit Eigenheiten ergeben, die sich ein bisschen an den Spieler anpassen können.

(Phantasier...)
Wenn man die Daten dann abspeichert und ladbar macht, kann man seine eigene KI "züchten" und dann mit anderen tauschen, wer die stärkste KI hinkriegt
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Der Ki eine "persönlichkeit" geben, indem sie einen Schwerpunkt hat (eher Essen, eher Forschung, Prod. o.ä.)
Dann die Daten aufbereiten, also Essenüberschuss, Vorrätige Rohstoffe etc. Stärke der gegner, Armee etc.
Ich würde es umgekehrt machen. Die Spielweise (Persönlichkeit) hängt ja davon ab, was da ist. Ein menschlicher Spieler, der auf Futter setzt, ändert auch seine Taktik ab, wenn er sieht, dass andere Ressourcen wichtiger sind.
Dann einen Algorithmus schreiben (vermutlich als NN), der die Eingangsdaten gewichtet und daraus seine Entscheidung trifft. Irgendwie die Entscheidung stabil halten, bis deutliche Gründe dagegensprechen.
:o Na dann viel Spaß. Zeig mir dann mal diesen Codeabschnitt. Der muss mächtig schwer sein.
(Phantasier...)
Wenn man die Daten dann abspeichert und ladbar macht, kann man seine eigene KI "züchten" und dann mit anderen tauschen, wer die stärkste KI hinkriegt
Im Contest gab es mal eine Aufgabe eine KI zu proggen, um diese dann gegeneinander antreten zu lassen. :mrgreen:


So würde ich es machen:

1) Vordefinierte Ziele ansteuern (am Anfang eines Spiels wichtig, zB erstmal eine Fabrik bauen, egal was die KI sagt) bis nach ein paar Runden die eigendlich KI anfängt zu arbeiten.
2) Status ermitteln (Ressourcen, Armee, Techs..., auch von den Gegenspielern)
3) Durch den Status ein neues Ziel ermitteln. (Was muss gebaut werden, um militärisch/technisch/wirtschaftlich mindestens gleichauf zu sein?)) Ziele bevorzugen, die an die gegebene "Persönlichkeit" der KI abhängen (Armeebauer bauen eher Armee, Farmer bauen eher Farmen...)
4) Gehe zu 1 wenn Stagnation, ansonsten gehe zu 2

Bei (1) könnte man statt vordefinierten Zielen auch Aufzeichnung früherer Spiele setzen. Wenn sich die KI nicht schlüssig ist, schaut sie dann einfach dort nach. Das erhöht die Qualität der KI.

Mein Algorithmus erzeugt auch variable, differentielle KIs, die in der Lage sind, auf Spieleraktionen zu reagieren. Eventuell prägen sich sogar ziemlich unübliche Spielstrategien aus, die aber funktionieren.


Greetz Laurin
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Beitrag von Dostej »

Zitat:
Dann einen Algorithmus schreiben (vermutlich als NN), der die Eingangsdaten gewichtet und daraus seine Entscheidung trifft. Irgendwie die Entscheidung stabil halten, bis deutliche Gründe dagegensprechen.
Na dann viel Spaß. Zeig mir dann mal diesen Codeabschnitt. Der muss mächtig schwer sein.
Ja, das denke ich auch...
Im Contest gab es mal eine Aufgabe eine KI zu proggen, um diese dann gegeneinander antreten zu lassen.
Hätte auch beinahe mitgemacht - war aber dann familiär und beruflich ziemlich voll, sodass ich keine recht mot. hatte, mich ranzusetzen. (Aber vielleicht kann ich ja jetzt ein paar Ideen dort klauen)

1) Vordefinierte Ziele ansteuern (am Anfang eines Spiels wichtig, zB erstmal eine Fabrik bauen, egal was die KI sagt) bis nach ein paar Runden die eigendlich KI anfängt zu arbeiten
Klingt gut - Mach ich in Spielen auchso, das manche Dinge einfach Standardmässig gebaut werden, weils am sinnvollsten ist

Wo ich am deutlichsten hänge ist der SChritt von 2 zu 3. Wie bringe ich die KI dazu, sinnvoll ein neues Ziel auszuwählen? Entweder ich code das direkt oder ich lasse das das Programm selbst rausfinden (per Ga oder NN) - oder denke ich da völlig falsch?
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Wo ich am deutlichsten hänge ist der SChritt von 2 zu 3. Wie bringe ich die KI dazu, sinnvoll ein neues Ziel auszuwählen? Entweder ich code das direkt oder ich lasse das das Programm selbst rausfinden (per Ga oder NN) - oder denke ich da völlig falsch?
Ich gebe dir mal am Besten ein Beispiel:
Schritt 3 (der, der oben erwähnt wird) im Detail:

> Ist das Ziel, welches ich mir (die KI) vorher festgelegt habe, jetzt noch erreichbar? (genug Ressourcen, Armee etc.)
>> Ja -> dabei bleiben
>> Nein -> Vorraussetzungen für Zielerfüllung schaffen
> Obriges Ziel schon erreicht?
>> Nein -> dabei bleiben
>> Ja, Status von Mensch/KI vergleichen:
>>> Mensch mehr Armee als ich (KI)?
>>>> Ja -> neues Ziel: mehr Armee bauen
>>>> Nein -> eventuell Mensch angreifen (Abhänig von der Agressivität der KI)
>>> Mensch bessere Produktion als ich?
>>>> Ja -> neues Ziel: mehr Fabriken bauen
>>>> Nein, hm.. keine Ahnung, was man hier machen könnte
>>> Mensch bessere Forschung als ich?
>>>> Ja -> neues Ziel: mehr forschen
>>>> Nein -> Denk dir was aus
> Neues Ziel gefunden?
>> Ja -> nix dran verändern
>> Nein -> Datenbank nach vordefinierten Zielen durchsuchen

Fertig. So inetwa stelle ich mir das vor. Natürlich müssten weitere Abfragen rein, wie "Hab ich genug Strom für meine Gebäude?" etc usw.


Greetz Laurin
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Beitrag von Dostej »

Ich werd mich in den nächsten tagen (wenn die ganzen Weihnachtsfeiern rum sind) ernsthaft ransetzen. :freak: Mal sehn obs was wird...

Ersst mal Danke soweit. Ist mir ne ganze Menge klarer
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

laurin:

>> Ja, Status von Mensch/KI vergleichen:


...ich kann KIs nicht ausstehen, die 'lunzen' oder 'spicken'

kann ich als menschlicher spieler ja auch nicht...

die motivation zum ausbau von militärischer stärke sollte charakterabhängig sein.

die wahrnehmungsmöglichkeiten der KI sollten genauso beschränkt sein,
wie die eines menschlichen players.

eine KI, die erweiterte wahrnehmungsmöglichkeiten oder sogar cheating braucht,
um mithalten zu können, verdient IMHO die bezeichnung KI nicht wirklich!
Antworten