Currently Online

Latest Posts

Topic: KI WAI-Dateien

Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 21:11
Posts: 182
OS: Windows 11 Home 64-bit
Version: 1.2 from Juni (06) 2023
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: 2023-07-26, 23:40

Ich habe ein paar Fragen zum WAI-Dateityp, der ja für die KI genutzt wird.
Ich konnte auf der Website hier, unter Development, Dokumentation und auch im Forum, Forum-Suche Funktion leider nichts passendes finden, was meine Fragen beantworten würde.

Ai Training Anleitung (Englisch)

Die WAI-Dateien befinden sich bei C:\Users\teayo\AppData\Local\Widelands\data\ai
Dort befinden sich standardmäßig 4 WAI-Dateien.
01. Frage, soweit ich es richtig verstanden habe, wird für jede KI, eine zufällige WAI-Datei aus diesen Ordner, beim Spielstart ausgewählt, korrekt ?
02. Frage, also sollte es auch möglich sein, mehr als nur diese 4 Standard WAI-Dateien hinzuzufügen, wie viele maximal ?

Wenn das KI Training aktiviert ist, werden neue WAI-Dateien generiert unter C:\Users\teayo.widelands\ai
Diese soll man nach Abschluss der Trainingsrunde in den data Ordner verschieben, also natürlich nur die, die am besten ist.
03. Frage, aber wie findet man heraus, welche KI welche generierte WAI-Datei genutzt hat, um die beste WAI-Datei zu verschieben ?
04. Frage, soweit ich es richtig verstanden habe, wird für die neu generierten WAI-Dateien, die Standard WAI-Datei genutzt und deren Eigenschaften nur leicht verändert, korrekt ?
Oder wird der Inhalt komplett neu, zufällig generiert ?

Die WAI-Dateien haben folgenden Aufbau.

[magic_numbers]
0="-31"
1="97"
...
198="-10"
199="-21"
05. Frage, was genau macht der Abschnitt "magic_numbers" ?
06. Frage, warum sind es 200 magische Nummern ?
07. Frage, jede magische Nummer hat eine Ganzzahl, wird nur der Zahltyp Ganzzahl verwendet oder auch Gleitkommazahl ?
08. Frage, wie groß ist der Wertebereich der Zahl, die jede magische Nummer hat ? Ich sehe keine Zahl die größer 100 ist oder kleiner -100 ist, ist BETRAG 100 das Maximum ?
09. Frage, was bewirkt eine maximale Zahl, angenommen 100 [1.0], was bewirkt eine 0 [0.0], was bewirkt eine -100 [-1.0] ? Oder ist 100 [1.0] , 0 [0.5] und -100 [0.0] , bei einer magischen Nummer ?
10. Frage, ist die magische Zahl eine %-Prozent Angabe ? Das würde zu einen vermuteten maximum von 100 passen.

[neuron_values]
0="75"
1="33"
...
78="-29"
79="2"
11. Frage, was genau macht diese Schicht und worin genau unterscheidet sie sich von den magischen Nummern ?
12. Frage, was für Neuronen sind das genau ? Ich vermute aufgrund des Dateinamens Eingabe-Neuronen. Oder sind es auch Verarbeitung-Neuronen und Ausgabe-Neuronen ?
13. Frage, warum sind es genau 80 Neuronen ?
14. Frage, gleiche Fragen wie Frage 07 bis Frage 10 nur dieses mal jetzt auf die Neuronen bezogen.
[ Zahltyp, Wertebereich, Bewirkt, %-Prozent Angabe ]
15. Frage, wie viele Ebenen an Neuronen verwendet die KI ? Eine Ebene, zwei Ebenen, drei Ebenen ?
16. Frage, was genau steuern die Neuronen ? Alles oder doch nur Wirtschaft, oder Militär, oder Bauplatz und Wegerstellung oder was anderes ?

[neuron_functions]
0="2"
1="1"
...
78="0"
79="0"
17. Frage, warum kommen als Zahlen nur "0" , "1" und "2" vor, für 80 Neuronen ?
18. Frage, soweit ich das richtig verstehe, ist dieser Abschnitt eine Liste, deren Elemente, den Elementen in der vorherigen Liste im Abschnitt Neuronen Werte (neuron_values)
jeweils ein Element aus der Liste im kommenden Abschnitt Neuronen Funktionen (fneurons) zuweist, korrekt ?

[fneurons]
0="2563964274"
1="1776518497"
...
58="4127789117"
59="2801924272"
19. Frage, warum gibt es für 80 Neuronen, nur 60 Neuronen Funktionen ?
20. Frage, was genau ist in der 9-stelligen bis 10-stelligen Zahl kodiert ?
21. Frage, Ist das noch eine Ganzzahl oder ist das gar keine Zahl mehr, sondern eine Zeichenkette ?
22. Frage, wie groß ist der Einfluss anderer Skripte auf die KI ? Werden die Skripte vor der Neuronen Eingabe ausgeführt oder erst nach der Neuronen Ausgabe ?
23. Frage, wie viele Eingaben und wie viel Ausgaben hat die KI ?
Beispiel Eingabe_1 = Anzahl.Ware.Gesamt.Stämme , Eingabe_2 = Anzahl.Ware.Gesamt.Stein ,
Ausgabe_1 = Wenn 0 dann baue Bäckerei, wenn 1 dann baue Holzfällerhütte , Ausgabe_2 = Wenn 0 dann mache nichts, wenn 1 dann greife an

Ich stelle die Fragen, damit ich den grundlegenden Aufbau der KI besser verstehen kann.
Nachtrag, weil es mir in Zusammenhang mit ChatGPT eingefallen ist, arbeitet auch die Widelands KI mit Aufmerksamkeitsfiltern ?


Das Imperium schlägt zurück ! TY

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 22:16
Posts: 2708
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2023-07-27, 15:12

Teayo wrote:

  1. Frage, soweit ich es richtig verstanden habe, wird für jede KI, eine zufällige WAI-Datei aus diesen Ordner, beim Spielstart ausgewählt, korrekt ?

Es werden 2 ausgewählt eine Hauptdatei und eine Ergänzung. Von der Ergänzung werden wenige einzelne zufäälig ausgewählte Werte der Hauptdatei überschrieben. Das macht derzeit aber keinen Unterschied, da momentan alle WAI Dateien geich sein sollten.

  1. Frage, also sollte es auch möglich sein, mehr als nur diese 4 Standard WAI-Dateien hinzuzufügen, wie viele maximal ?

Nein, der KI Code erwartet genau 4.

  1. Frage, aber wie findet man heraus, welche KI welche generierte WAI-Datei genutzt hat, um die beste WAI-Datei zu verschieben ?

Sppielernummer = Filenummer

  1. Frage, soweit ich es richtig verstanden habe, wird für die neu generierten WAI-Dateien, die Standard WAI-Datei genutzt und deren Eigenschaften nur leicht verändert, korrekt ?

im normalen Spiel wird die resultierende Datei leicht mutiert, beim KI Training wird aggressiver mutiert.

  1. Frage, was genau macht der Abschnitt "magic_numbers" ?

Diese werden in einzelnen Entscheidungsfunktionen als Gewichte von Spielinformationen verwendet: Sehr vereinfacht gesagt "if Value x of player economy > value y * (MagicNo z / w) then"

  1. Frage, warum sind es 200 magische Nummern ?

Weil diese bisher ausrteichend waren, wahrscheinlich werden uns mit der Seefahrt die Nummern ausgehen, und wir müssen diese Anzahl erhöhen.

  1. Frage, jede magische Nummer hat eine Ganzzahl, wird nur der Zahltyp Ganzzahl verwendet oder auch Gleitkommazahl ?

nur Integer in der wai datei

  1. Frage, wie groß ist der Wertebereich der Zahl, die jede magische Nummer hat ? Ich sehe keine Zahl die größer 100 ist oder kleiner -100 ist, ist BETRAG 100 das Maximum ?

JA

  1. Frage, was bewirkt eine maximale Zahl, angenommen 100 [1.0], was bewirkt eine 0 [0.0], was bewirkt eine -100 [-1.0] ? Oder ist 100 [1.0] , 0 [0.5] und -100 [0.0] , bei einer magischen Nummer ?

Siehe oben das ist ganz unterschiedlich, wir verwenden Magic numbers um die Gewichtung einer Fragestellung dem Training zu unterwerfen, da das beste Gewicht sonst schwer zu ermittlen ist.

  1. Frage, ist die magische Zahl eine %-Prozent Angabe ? Das würde zu einen vermuteten maximum von 100 passen.

nein keine Prozentangabe

[neuron_values]

  1. Frage, was genau macht diese Schicht und worin genau unterscheidet sie sich von den magischen Nummern ?

Neuronen werte sind die Basis für den Absolutwert an einer der 20 Stützstellen unserer 3 Neuronenfunktionen. Diese Funktionen steigen über 20 Stützstellen von 0 bis zum Neuronenwert gemäß unterschiedlichen Funktionen (Linear, exponenntiell, usw.). Der wert an einer Stützstelle wird ann auch wieder als Gewicht oder % Zahl verwendet.

  1. Frage, was für Neuronen sind das genau ? Ich vermute aufgrund des Dateinamens Eingabe-Neuronen. Oder sind es auch Verarbeitung-Neuronen und Ausgabe-Neuronen ?

Weder noch nur maximalwerte bei 100 % der Neuronen funktion.

  1. Frage, warum sind es genau 80 Neuronen ?

Siehe MAgic Numbers

  1. Frage, gleiche Fragen wie Frage 07 bis Frage 10 nur dieses mal jetzt auf die Neuronen bezogen.
    [ Zahltyp, Wertebereich, Bewirkt, %-Prozent Angabe ]

Integer Zahlen bis 100 kann % angabe sein muss aber nicht

  1. Frage, wie viele Ebenen an Neuronen verwendet die KI ? Eine Ebene, zwei Ebenen, drei Ebenen ?

Keine die Bezeichnung ist irreführend

  1. Frage, was genau steuern die Neuronen ? Alles oder doch nur Wirtschaft, oder Militär, oder Bauplatz und Wegerstellung oder was anderes ?

Die KI steuert alle Eingaben, die auch ein Spieler machen kann

  1. Frage, warum kommen als Zahlen nur "0" , "1" und "2" vor, für 80 Neuronen ?

Weil wir für jede Kombi aus Wert und Funktion nur 3 Funbktionen haben siehe oben (Linear exponenntiell und die dritte habe ich vergessen. ist abe im KI Code dokumentiert.

  1. Frage, soweit ich das richtig verstehe, ist dieser Abschnitt eine Liste, deren Elemente, den Elementen in der vorherigen Liste im Abschnitt Neuronen Werte (neuron_values)
    jeweils ein Element aus der Liste im kommenden Abschnitt Neuronen Funktionen (fneurons) zuweist, korrekt ?

Falsch Fneurons werden anders benutzt.

[fneurons]
19. Frage, warum gibt es für 80 Neuronen, nur 60 Neuronen Funktionen ?

Weil diese nichts miteinader zu tun haben

  1. Frage, was genau ist in der 9-stelligen bis 10-stelligen Zahl kodiert ?

Eine serie von Nullen und Einsen als eine Serie von False / True decisions.

  1. Frage, Ist das noch eine Ganzzahl oder ist das gar keine Zahl mehr, sondern eine Zeichenkette ?

Es ist eine Zahl die in Ihrer Binären Darstellumg verwendet wird.

  1. Frage, wie groß ist der Einfluss anderer Skripte auf die KI ? Werden die Skripte vor der Neuronen Eingabe ausgeführt oder erst nach der Neuronen Ausgabe ?

Skripte verändern das Spiel. haben aber keinen direkten Einfluß auf die KI

  1. Frage, wie viele Eingaben und wie viel Ausgaben hat die KI ?

Das kann man in dieser Form nicht beantworten.
Die KI hat ungefähr so um die 10 bis 15 Tasks in denen verschiedene Fragestellungen beabtwortet werden. (z.B. welches Gebäude wird am dringendsten Gebraucht, an welcher Stell ist der beste Platz für das dringendste Gebäude, Lohnt es sich ein Gebäude anzugreifen, usw.) letztlich werden dadurch alle möglichen Playercommands abgedeckt.
Zur beantwortung dieser fragen werden alle aktuellen Spielwerte abgefragt, die auch ein Spieler zu so einer Bewertung heranziehen würde, und diese werden dann mit Hilfe der Werte in den WAI Dateien gewichtet.

Nachtrag, weil es mir in Zusammenhang mit ChatGPT eingefallen ist, arbeitet auch die Widelands KI mit Aufmerksamkeitsfiltern ?

Nein, was ist das?

Edited: 2023-07-27, 15:13

Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 21:11
Posts: 182
OS: Windows 11 Home 64-bit
Version: 1.2 from Juni (06) 2023
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: 2023-07-28, 19:14

Da sowohl mein vorheriger Post, als auch hessenfarmer's Post lang und unübersichtlich sind, fasse ich nochmal in diesen Post zusammen.

Die Standard WAI-Dateien auf die Widelands beim Start eines Spiels zugreift, um diese als Basis für die KI zu verwenden, befinden sich unter dem Pfad : C:\Users\teayo\AppData\Local\Widelands\data\ai .
Der KI-Code erwartet dort genau 4 WAI-Dateien, nicht mehr und nicht weniger. Beim Spielstart wird eine temporäre nur für das Spiel verwendete WAI-Datei pro KI Computer Gegner generiert.
Um diese temporäre WAI-Datei für das Spiel zu generieren, werden zufällig zwei der vier WAI-Dateien aus dem Ordner ausgewählt.
Eine Datei als Hauptdatei, die leicht verändert wird und eine weitere Datei als Ergänzungsdatei, bei der selektiv einzelne Teile der Ergänzungsdatei in die Hauptdatei übernommen werden.
Es werden wenige zufällige einzelne Element Positionen ausgewählt. Die ausgewählten Elemente Positionen sind aber bei beiden Dateien, der Hauptdatei und der Ergänzungsdatei gleich.
Die Werte der ausgewählten Elemente in der Ergänzungsdatei werden kopiert und bei den Werten der ausgewählten Elemente in der Hauptdatei eingefügt.
Dabei findet aber keine weitere zufällige Durchmischung statt, so das der Wert von Element_1 dem Wert von Element_1 entspricht. Genauso auch für Element_2 und alle folgenden.
Wenn die Eingabeaufforderung unter Windows aufgerufen wird und dort die folgenden beiden Befehle eingegeben werden, cd AppData\Local\Widelands und dann widelands --ai_training --auto_speed ,
öffnet sich Widelands im KI-Trainingsmodus. Wenn jetzt ein neues Spiel gestartet wird, vorzugsweise im Mehrspieler LAN, aufgrund des aktivierten Schalters --auto_speed ,
dann werden neue WAI-Dateien generiert unter dem Pfad : C:\Users\teayo.widelands\ai . Diese Dateien werden auf die gleiche Weise wie die temporären WAI-Dateien generiert,
jedoch sind diese Dateien nun nicht temporär, sondern werden gespeichert und es wird aggressiver mutiert, also es werden mehr zufällige einzelne Element Positionen ausgewählt und
möglicherweise werden sogar die Werte der ausgewählten Elemente leicht zufällig geändert, bevor diese in die Hauptdatei überschrieben werden.
Die beim KI Training generierten WAI-Dateien können anhand Ihres Dateinamens jedem Computer Gegner zugeordnet werden, um so die WAI-Datei auszuwählen,
deren verwendete KI Computer Gegner im Spiel am besten war. So verwendete Computer Gegner 6 die WAI-Datei 2023-07-28T17.33.00_ai_player_6 .
Möchte man seine eigenen generierten WAI-Dateien als Standard Basis für die KI verwenden, so muss die Datei umbenannt werden in ai_input_1 , wobei statt der 1 auch die Zahlen 2 , 3 und 4 möglich sind.
Anschließend muss die umbenannte WAI-Datei in den Standard Ordner der KI WAI-Dateien kopiert werden. (Kopieren und dort bestehende Datei überschreiben)
Möchte man auf Nummer sicher gehen, sollte man sich eine Sicherung der dort vier vorhandenen WAI-Dateien anlegen.
Um eine starke KI zu trainieren muss die WAI-Datei, die am besten war in jeden Fall auf die oben beschriebene Weise umbenannt und kopiert werden.
Anschließend muss ein neues Spiel gestartet werden. Der Vorgang wird beliebig oft manuell wiederholt, da es keine Möglichkeit gibt
die Dateien automatisch umzubenennen, zu selektieren und zu kopieren, sowie ein neues Spiel zu starten.

Nun zum Aufbau der WAI-Dateien. Jede WAI-Datei besteht aus vier Abschnitten. Den magischen Nummern, den Neuronen Werten, den Neuronen Funktionen und Funktionen Neuronen.
Der Abschnitt magische Nummern beinhaltet 200 Elemente. Irgendeiner hat mal in der Vergangenheit festgelegt das 200 Elemente ausreichen, auch wenn (nicht) immer alle Elemente gebraucht werden.
Nach hessenfarmers Ansicht werden durch die neue Widelands Version 1.2 und der damit neu hinzugefügten Möglichkeit des Seekrieges, sowie auch der Landung,
weitere Eingaben hinzukommen, so das 200 Elemente wohl in Zukunft nicht mehr ausreichen werden und der Abschnitt um weitere Elemente erweitert werden muss.
Der Wert eines jeden magische Nummern Elementes ist immer eine Ganzzahl, als Datentyp der Vorzeichen behaftete 8-Bit-Integer, wobei jedoch nicht der komplette Wertebereich genutzt wird,
sondern nur der Wertebereich von einschließlich -100 bis einschließlich 100. Die Werte der magische Nummern Elemente sind jedoch keine Prozentangabe, trotz eines Maximums von 100.
Die magischen Nummern gewichten Eingabe-Informationen für Entscheidungsfragen der KI. Als Beispiel, die KI muss die Entscheidung treffen ob ein Bauernhof gebaut werden soll.
Die magischen Nummern gewichten nun die Eingabe-Informationen die für die Entscheidung der Beispielfrage relevant sind, Weizen im Lager, aktueller Weizenverbrauch, aktuelle Weizenproduktion,
vorhandener Bauplatz, Entfernung zu Verbrauchern, Baumaterialien im Lager, aktueller Baumaterialien Verbrauch, aktuelle Baumaterialien Produktion, Bauarbeiter im Lager und weitere Informationen.
Als Formel ausgedrückt : Wenn Wert von Variable A multipliziert mit dem Wert von Element B von Liste magische Nummern kleiner ist als der Wert von Variable C dann ...

Der Abschnitt Neuronen Werte beinhaltet 80 Elemente. Es ist nicht bekannt in welchen genauen Zusammenhang die Anzahl von 80 Neuronen Werten stehen.
Möglicherweise werden nur 80 Neuronen Werte gebraucht oder mehr als 80 Neuronen Werte würden einen zu starken negativen Einfluss auf die Spiel Leistung haben.
Der Wert eines Elementes in der Neuronen Werte Liste ist die Basis für den Absolutwert an einer der 20 Stützstellen unserer Neuronen Funktionen.
Soll heißen, erstelle eine Liste A die 20 Elemente enthält. Element 1 aus Liste A hat immer den Wert 0, Element 20 aus der Liste A hat immer den Wert von Wert von Element B von Liste Neuronen.
Als Beispiel Element B von Liste Neuronen Werte hat den Wert 50.
Wenn Element B von Liste Neuronen Funktionen 0 ist, was für konstant steht, dann würde Liste A so aussehen [ 0, 50, 50, 50, 50, | 50, 50, 50, 50, 50, | 50, 50, 50, 50, 50, | 50, 50, 50, 50, 50 ]
Wenn Element B von Liste Neuronen Funktionen 1 ist, was für linear steht, dann würde Liste A so aussehen [ 0, 2.5, 5, 7.5, 10, | 12.5, 15, 17.5, 20, 22.5, | 25, 27.5, 30, 32.5, 35, | 37.5, 40, 42.5, 45, 50 ]
Wenn Element B von Liste Neuronen Funktionen 2 ist, was für exponentiell steht, dann würde Liste A so aussehen [ 0, 0.0-, 0.0-, 0.0-, 0.0-, | 0.0-, 0.0-, 0.0-, 0.0-, 0.0- | 0.0-, 0.1-, 0.3-, 0.7-, 1.5-, | 3.1-, 6.2-, 12.5, 25, 50 ]
Für exponentiell habe ich einen Exponenten von ^2 angenommen, für das Beispiel, es ist jedoch nicht klar welcher Exponent, oder welche Exponenten genutzt werden.
Es ist nicht bekannt ob eine konstante Funktion verwendet wird, da hessenfarmer im Gegensatz zu der linearen und exponentiellen nicht erwähnt hatte.
Es ist nicht bekannt ob 0 für konstant, 1 für linear und 2 für exponentiell steht, sicher ist nur das die Nummer einer mathematischen Funktion zugeordnet ist.
Übersicht der Arten von mathematischen Funktionen
Die Werte der Elemente in der Neuronen Werte Liste haben die gleichen Eigenschaften wie die Werte der Elemente in der Liste der magischen Nummern.
Also ebenfalls Ganzzahl Vorzeichen behaftete 8-Bit-Integer, wobei jedoch nicht der komplette Wertebereich genutzt wird, sondern nur der Wertebereich von einschließlich -100 bis einschließlich 100.
Die Werte von den Elementen aus Liste A werden genau wie die Werte der Elemente in der Liste der magischen Nummern als Gewichtung für (Eingabe ?)-Informationen verwendet.

Der Abschnitt Neuronen Funktionen beinhaltet 60 Elemente.
Es ist weiterhin nicht ersichtlich warum eine Diskrepanz von 20 besteht, zwischen 80 Neuronen Werte Elementen und nur 60 Neuronen Funktionen Elementen.
20 Neuronen ist keine mathematische Funktion zur Gewichtung Ihrer Eingaben zugeordnet.
Warum werden 20 Neuronen anders verknüpft und wie ? Worin unterscheiden sich diese 20 Neuronen von den restlichen 60 Neuronen ?

Der Abschnitt Funktionen Neuronen beinhaltet 60 Elemente. Der Wert eines jeden Elementes dieser Liste ist ebenfalls immer eine Ganzzahl und immer positiv.
Die Ganzzahl ist 9-stellig bis 10-stellig und ist womöglich vom Datentyp her der nicht Vorzeichen behaftete 32-Bit-Integer.
So steht als Beispiel die Zahl 58="4127789117" für 1111.0110.0000.1001 . 0001.0000.0011.1101
Zahlen konverter , Dabei steht 1 für wahr und 0 für falsch. So ergeben 32-Bits mal 60 Elemente = 1.920 aus lesbare Bits für Entscheidungen.
Die Funktionen Neuronen werden für Entscheidungen verwendet, allerdings fehlt weiterer Kontext, so das sich mir nicht erschließt wie genau diese Bits auf eine Entscheidung sich auswirken.

hessenfarmer schrieb:
Die KI hat ungefähr so um die 10 bis 15 Tasks (Aufgaben) in denen verschiedene Fragestellungen beantwortet werden.
Zum Beispiel welches Gebäude wird am dringendsten Gebraucht, an welcher Stell ist der beste Platz für das dringendste Gebäude, Lohnt es sich ein Gebäude anzugreifen, und so weiter.
Letztlich werden dadurch alle möglichen menschlichen Spielereingaben abgedeckt.
Zur Beantwortung dieser Fragen werden alle aktuellen Spielwerte abgefragt, die auch ein Spieler zu so einer Bewertung heranziehen würde
und diese werden dann mit Hilfe der Werte in den WAI Dateien gewichtet.

Ist diese Zusammenfassung so korrekt ?
Lässt sich was ergänzen, was ich in der Zusammenfassung bei einigen Punkten nur angenommen habe ?
Beziehungsweise die noch offenen Fragen klären ?
Ich habe trotz dieser Zusammenfassung die im Spiel sichtbare Dummheit der KI weiterhin nicht verstanden und kann diese auch weiterhin nicht nachvollziehen.
Also ich finde die KI zumindest dumm. Manche Ihrer Entscheidungen sind mir einfach schleierhaft.
Und bevor ich mit KI-Training Anfange, stelle ich mir die Frage ob sich das KI Training überhaupt lohnt oder
ob das Training die KI so gar nicht verbessern kann, weil das System der KI es nicht wirklich zu lässt.

Auszug aus dem privaten Nachrichtenverlauf auf Discord :

TickeHD schrieb:
Ich würde sagen, dass die KI vom Code her gut ist, nur sie ist schlecht trainiert.
Du kannst sie im Prinzip auf verschiedene Spezialgebiete trainieren, beispielsweise auf eine bestimmte Map oder einen bestimmten Stamm.

Teayo schrieb:
Das kann ich jetzt so noch gar nicht nachvollziehen. Ich muss erstmal einen Grundlegenden Überblick über die KI bekommen.
Und nach meinen aktuellen Informationen gibt es nur 4 WAI-Dateien.
Da stelle ich mir gleich die Frage, wie soll das dann für 5 Stämme (Babaren, Imperium, Atlanter, Friesen und Amazonen) klappen
und wie soll das überhaupt Kartenspezifisch gehen. Dann bräuchte man doch für jede Karte, für jeden Stamm eine eigene WAI-Datei.
Aber vermutlich habe ich noch kein klares Bild und mir fehlt noch wissen über die KI, weshalb meine obrige Annahme falsch sein kann.

Edited: 2023-07-28, 19:16

Das Imperium schlägt zurück ! TY

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 22:16
Posts: 2708
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2023-07-31, 08:53

Teayo wrote:

Da sowohl mein vorheriger Post, als auch hessenfarmer's Post lang und unübersichtlich sind, fasse ich nochmal in diesen Post zusammen.

Die Standard WAI-Dateien auf die Widelands beim Start eines Spiels zugreift, um diese als Basis für die KI zu verwenden, befinden sich unter dem Pfad : C:\Users\teayo\AppData\Local\Widelands\data\ai .
Der KI-Code erwartet dort genau 4 WAI-Dateien, nicht mehr und nicht weniger. Beim Spielstart wird eine temporäre nur für das Spiel verwendete WAI-Datei pro KI Computer Gegner generiert.
Um diese temporäre WAI-Datei für das Spiel zu generieren, werden zufällig zwei der vier WAI-Dateien aus dem Ordner ausgewählt.
Eine Datei als Hauptdatei, die leicht verändert wird und eine weitere Datei als Ergänzungsdatei, bei der selektiv einzelne Teile der Ergänzungsdatei in die Hauptdatei übernommen werden.

Fast richtig erst wird kombiniert, dann mutiert.

Es werden wenige zufällige einzelne Element Positionen ausgewählt. Die ausgewählten Elemente Positionen sind aber bei beiden Dateien, der Hauptdatei und der Ergänzungsdatei gleich.

Die Werte der ausgewählten Elemente in der Ergänzungsdatei werden kopiert und bei den Werten der ausgewählten Elemente in der Hauptdatei eingefügt.
Dabei findet aber keine weitere zufällige Durchmischung statt, so das der Wert von Element_1 dem Wert von Element_1 entspricht. Genauso auch für Element_2 und alle folgenden.
Wenn die Eingabeaufforderung unter Windows aufgerufen wird und dort die folgenden beiden Befehle eingegeben werden, cd AppData\Local\Widelands und dann widelands --ai_training --auto_speed ,
öffnet sich Widelands im KI-Trainingsmodus. Wenn jetzt ein neues Spiel gestartet wird, vorzugsweise im Mehrspieler LAN, aufgrund des aktivierten Schalters --auto_speed ,
dann werden neue WAI-Dateien generiert unter dem Pfad : C:\Users\teayo.widelands\ai . Diese Dateien werden auf die gleiche Weise wie die temporären WAI-Dateien generiert,
jedoch sind diese Dateien nun nicht temporär, sondern werden gespeichert und es wird aggressiver mutiert, also es werden mehr zufällige einzelne Element Positionen ausgewählt und
möglicherweise werden sogar die Werte der ausgewählten Elemente leicht zufällig geändert, bevor diese in die Hauptdatei überschrieben werden.

Die zufällige Veränderung einzelner Werte kann auch in jedem normalen Spiel erfolgen aber im KI Training Modus passiert es halt deutlich häufiger.

Die beim KI Training generierten WAI-Dateien können anhand Ihres Dateinamens jedem Computer Gegner zugeordnet werden, um so die WAI-Datei auszuwählen,
deren verwendete KI Computer Gegner im Spiel am besten war. So verwendete Computer Gegner 6 die WAI-Datei 2023-07-28T17.33.00_ai_player_6 .
Möchte man seine eigenen generierten WAI-Dateien als Standard Basis für die KI verwenden, so muss die Datei umbenannt werden in ai_input_1 , wobei statt der 1 auch die Zahlen 2 , 3 und 4 möglich sind.

aufgrund des oben beschriebenen Mechanismus der Kombination aus 2 WAI dateien muss man für die nächste runde des Trainings idealerweise alle ai_input_x.wai im oben angebeben Ordner mit einer Kopie der besten KI ersetzen.

Anschließend muss die umbenannte WAI-Datei in den Standard Ordner der KI WAI-Dateien kopiert werden. (Kopieren und dort bestehende Datei überschreiben)
Möchte man auf Nummer sicher gehen, sollte man sich eine Sicherung der dort vier vorhandenen WAI-Dateien anlegen.
Um eine starke KI zu trainieren muss die WAI-Datei, die am besten war in jeden Fall auf die oben beschriebene Weise umbenannt und kopiert werden.
Anschließend muss ein neues Spiel gestartet werden. Der Vorgang wird beliebig oft manuell wiederholt, da es keine Möglichkeit gibt

Für ein effektives Training reicht es nicht ein Spiel zu machen und dann die beste KI rauszunehmen sondern man braucht so 20 bis hundert Spiele auf unterschiedlichen Karten mit unterschiedlichen Stämmen und dann versucht man die beste raus zu filtern, anhand bestimmter Werte die vom KI Trainingcode ausgewertet werden.

die Dateien automatisch umzubenennen, zu selektieren und zu kopieren, sowie ein neues Spiel zu starten.

Nun zum Aufbau der WAI-Dateien. Jede WAI-Datei besteht aus vier Abschnitten. Den magischen Nummern, den Neuronen Werten, den Neuronen Funktionen und Funktionen Neuronen.
Der Abschnitt magische Nummern beinhaltet 200 Elemente. Irgendeiner hat mal in der Vergangenheit festgelegt das 200 Elemente ausreichen, auch wenn (nicht) immer alle Elemente gebraucht werden.
Nach hessenfarmers Ansicht werden durch die neue Widelands Version 1.2 und der damit neu hinzugefügten Möglichkeit des Seekrieges, sowie auch der Landung,
weitere Eingaben hinzukommen, so das 200 Elemente wohl in Zukunft nicht mehr ausreichen werden und der Abschnitt um weitere Elemente erweitert werden muss.
Der Wert eines jeden magische Nummern Elementes ist immer eine Ganzzahl, als Datentyp der Vorzeichen behaftete 8-Bit-Integer, wobei jedoch nicht der komplette Wertebereich genutzt wird,
sondern nur der Wertebereich von einschließlich -100 bis einschließlich 100. Die Werte der magische Nummern Elemente sind jedoch keine Prozentangabe, trotz eines Maximums von 100.
Die magischen Nummern gewichten Eingabe-Informationen für Entscheidungsfragen der KI. Als Beispiel, die KI muss die Entscheidung treffen ob ein Bauernhof gebaut werden soll.
Die magischen Nummern gewichten nun die Eingabe-Informationen die für die Entscheidung der Beispielfrage relevant sind, Weizen im Lager, aktueller Weizenverbrauch, aktuelle Weizenproduktion,
vorhandener Bauplatz, Entfernung zu Verbrauchern, Baumaterialien im Lager, aktueller Baumaterialien Verbrauch, aktuelle Baumaterialien Produktion, Bauarbeiter im Lager und weitere Informationen.
Als Formel ausgedrückt : Wenn Wert von Variable A multipliziert mit dem Wert von Element B von Liste magische Nummern kleiner ist als der Wert von Variable C dann ...

Der Abschnitt Neuronen Werte beinhaltet 80 Elemente. Es ist nicht bekannt in welchen genauen Zusammenhang die Anzahl von 80 Neuronen Werten stehen.
Möglicherweise werden nur 80 Neuronen Werte gebraucht oder mehr als 80 Neuronen Werte würden einen zu starken negativen Einfluss auf die Spiel Leistung haben.

Dies ist ein zufällign festgelegter Wert und bisher wurden noch nicht mehr gebraucht. Auch hier kann es ggf. in der Zukunft Bedarf zur Erhöhung geben.

Der Wert eines Elementes in der Neuronen Werte Liste ist die Basis für den Absolutwert an einer der 20 Stützstellen unserer Neuronen Funktionen.
Soll heißen, erstelle eine Liste A die 20 Elemente enthält. Element 1 aus Liste A hat immer den Wert 0, Element 20 aus der Liste A hat immer den Wert von Wert von Element B von Liste Neuronen.
Als Beispiel Element B von Liste Neuronen Werte hat den Wert 50.
Wenn Element B von Liste Neuronen Funktionen 0 ist, was für konstant steht, dann würde Liste A so aussehen [ 0, 50, 50, 50, 50, | 50, 50, 50, 50, 50, | 50, 50, 50, 50, 50, | 50, 50, 50, 50, 50 ]
Wenn Element B von Liste Neuronen Funktionen 1 ist, was für linear steht, dann würde Liste A so aussehen [ 0, 2.5, 5, 7.5, 10, | 12.5, 15, 17.5, 20, 22.5, | 25, 27.5, 30, 32.5, 35, | 37.5, 40, 42.5, 45, 50 ]
Wenn Element B von Liste Neuronen Funktionen 2 ist, was für exponentiell steht, dann würde Liste A so aussehen [ 0, 0.0-, 0.0-, 0.0-, 0.0-, | 0.0-, 0.0-, 0.0-, 0.0-, 0.0- | 0.0-, 0.1-, 0.3-, 0.7-, 1.5-, | 3.1-, 6.2-, 12.5, 25, 50 ]

Die 3 benutzten Funktonen mit den beschriebenen Vektoren finden sich hier
0 ist linear, 1 ist exponentiell und die exakte Funktion hinter 2 kenne ich nicht.

Für exponentiell habe ich einen Exponenten von ^2 angenommen, für das Beispiel, es ist jedoch nicht klar welcher Exponent, oder welche Exponenten genutzt werden.
Es ist nicht bekannt ob eine konstante Funktion verwendet wird, da hessenfarmer im Gegensatz zu der linearen und exponentiellen nicht erwähnt hatte.
Es ist nicht bekannt ob 0 für konstant, 1 für linear und 2 für exponentiell steht, sicher ist nur das die Nummer einer mathematischen Funktion zugeordnet ist.
Übersicht der Arten von mathematischen Funktionen
Die Werte der Elemente in der Neuronen Werte Liste haben die gleichen Eigenschaften wie die Werte der Elemente in der Liste der magischen Nummern.
Also ebenfalls Ganzzahl Vorzeichen behaftete 8-Bit-Integer, wobei jedoch nicht der komplette Wertebereich genutzt wird, sondern nur der Wertebereich von einschließlich -100 bis einschließlich 100.
Die Werte von den Elementen aus Liste A werden genau wie die Werte der Elemente in der Liste der magischen Nummern als Gewichtung für (Eingabe ?)-Informationen verwendet.

Der Zweck ist der Gleiche aber der mechanismus funktioniert ein wenig anders. Der Basiswert der Entscheidung wird auf 20 Normiert und dann wird der werte an der jeweiligen Stützstelle ( 0 bis 20) benutzt.

Der Abschnitt Neuronen Funktionen beinhaltet 60 Elemente.

Abschnitt mit 60 Elementen heißt fNeurons und beinhaltet keine Funktionen. Der Abschnitt neuron_functions hat 80 Elemente. im Wertebereich 0 bis 2

Es ist weiterhin nicht ersichtlich warum eine Diskrepanz von 20 besteht, zwischen 80 Neuronen Werte Elementen und nur 60 Neuronen Funktionen Elementen.
20 Neuronen ist keine mathematische Funktion zur Gewichtung Ihrer Eingaben zugeordnet.
Warum werden 20 Neuronen anders verknüpft und wie ? Worin unterscheiden sich diese 20 Neuronen von den restlichen 60 Neuronen ?

Nein, die FNeurons sind einfach nur unsigned 32 bit Integer um bitweise Wahr / Falsch Werte zu bekommen. Sie haben mit den 80 Neuronenfunktionen Vektoren die oben beschrieben sind nichts zu tun. Die 80 Funktionenvektoren werden automatisch aus Typ und Wert gebildet. Die Zuordnung des Typs zu den 80 Elementen steht im Abschnitt Neuron_functions.

Der Abschnitt Funktionen Neuronen beinhaltet 60 Elemente. Der Wert eines jeden Elementes dieser Liste ist ebenfalls immer eine Ganzzahl und immer positiv.
Die Ganzzahl ist 9-stellig bis 10-stellig und ist womöglich vom Datentyp her der nicht Vorzeichen behaftete 32-Bit-Integer.

exakt Datentyp ist uint_32

So steht als Beispiel die Zahl 58="4127789117" für 1111.0110.0000.1001 . 0001.0000.0011.1101
Zahlen konverter , Dabei steht 1 für wahr und 0 für falsch. So ergeben 32-Bits mal 60 Elemente = 1.920 aus lesbare Bits für Entscheidungen.
Die Funktionen Neuronen werden für Entscheidungen verwendet, allerdings fehlt weiterer Kontext, so das sich mir nicht erschließt wie genau diese Bits auf eine Entscheidung sich auswirken.

Eine typische verwendung ist die Ermittlung eines Scores für ein bestimmtes Speilkommando. Dazu definieren wir 32 (oder ein vielfaches von 32) Scoringwerte aufgrund unterschiedlicher Spielinformationen und Gewichtungen. Über ein fneuron steuern wir dann welche dieser Scoringwerte in den finalen Score übernommen werden. siehe dieses codebeispiel

hessenfarmer schrieb:
Die KI hat ungefähr so um die 10 bis 15 Tasks (Aufgaben) in denen verschiedene Fragestellungen beantwortet werden.
Zum Beispiel welches Gebäude wird am dringendsten Gebraucht, an welcher Stell ist der beste Platz für das dringendste Gebäude, Lohnt es sich ein Gebäude anzugreifen, und so weiter.
Letztlich werden dadurch alle möglichen menschlichen Spielereingaben abgedeckt.
Zur Beantwortung dieser Fragen werden alle aktuellen Spielwerte abgefragt, die auch ein Spieler zu so einer Bewertung heranziehen würde
und diese werden dann mit Hilfe der Werte in den WAI Dateien gewichtet.

Ist diese Zusammenfassung so korrekt ?
Lässt sich was ergänzen, was ich in der Zusammenfassung bei einigen Punkten nur angenommen habe ?
Beziehungsweise die noch offenen Fragen klären ?
Ich habe trotz dieser Zusammenfassung die im Spiel sichtbare Dummheit der KI weiterhin nicht verstanden und kann diese auch weiterhin nicht nachvollziehen.
Also ich finde die KI zumindest dumm. Manche Ihrer Entscheidungen sind mir einfach schleierhaft.

Wenn du konkrete Beispiele hast, dann prüfe ich gerne ob das ein Bug ist oder nur mangeldes Training.

Und bevor ich mit KI-Training Anfange, stelle ich mir die Frage ob sich das KI Training überhaupt lohnt oder
ob das Training die KI so gar nicht verbessern kann, weil das System der KI es nicht wirklich zu lässt.

Manche Dinge lassen sich mit training verbessern aber manche Dinge sind auch strukturelle Fehler oder Randbedingugen


Auszug aus dem privaten Nachrichtenverlauf auf Discord :

TickeHD schrieb:
Ich würde sagen, dass die KI vom Code her gut ist, nur sie ist schlecht trainiert.
Du kannst sie im Prinzip auf verschiedene Spezialgebiete trainieren, beispielsweise auf eine bestimmte Map oder einen bestimmten Stamm.

Teayo schrieb:
Das kann ich jetzt so noch gar nicht nachvollziehen. Ich muss erstmal einen Grundlegenden Überblick über die KI bekommen.
Und nach meinen aktuellen Informationen gibt es nur 4 WAI-Dateien.
Da stelle ich mir gleich die Frage, wie soll das dann für 5 Stämme (Babaren, Imperium, Atlanter, Friesen und Amazonen) klappen
und wie soll das überhaupt Kartenspezifisch gehen. Dann bräuchte man doch für jede Karte, für jeden Stamm eine eigene WAI-Datei.
Aber vermutlich habe ich noch kein klares Bild und mir fehlt noch wissen über die KI, weshalb meine obrige Annahme falsch sein kann.

Der ganze KI Code ist so geschrieben, dass er Stamm und Karten agnostisch ist. Weshalb man das Training auch mit möglichst vielen Stämmen und Karten machen sollte.
Falls wir aber genügend CPU und Auswertezeiten hätten, wäre es vorstellbar die KI für unterschiedliche Stämme zu trainieren. Dann bräuchten wir halt für jeden Stamm eine wai Datei aber das wäre schnell zu lösen.
Die Anzahl der 4 wai Dateien rührt aus der Annahme her, dass wir auch unterschiedliche Charaktere trainieren wollten, die dann einen zufälligen Charakter über den Merge mechanismus aus 2 Grundcharakteren ergeben.

man kann die KI aber nur verstehen, wenn man den Sourcecode versteht.
Ich kann das nicht alles hier erklären sondern nur simplifiziert zusammenfassen.


Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 21:11
Posts: 182
OS: Windows 11 Home 64-bit
Version: 1.2 from Juni (06) 2023
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: 2023-08-02, 01:58

hessenfarmer schrieb:
Die 3 benutzten Funktionen mit den beschriebenen Funktionsverläufen finden sich hier
0 ist linear, 1 ist exponentiell und die exakte Funktion hinter 2 kenne ich nicht.

Die Funktion hinter 2 ist eine Logarithmusfunktion und hinter 1 ist wie schon bekannt eine Expotenzialfunktion.
// This is a simplification of a curve, to avoid repeated calculation
const std::vector<std::vector<int8_t>> neuron_curves = {
{0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100},
{0, 0, 1, 2, 4, 6, 9, 12, 16, 20, 25, 30, 36, 42, 49, 56, 64, 72, 81, 90, 100},
{0, 17, 25, 32, 38, 44, 49, 53, 58, 62, 66, 70, 74, 78, 81, 84, 88, 91, 94, 97, 100},
};

Bleiben die Kurvenverläufe der Funktionen gleich ? Und variabel ist wie bekannt nur weiterhin das Maximum ?
Siehe angehängtes Bild. Wenn man das Diagramm an das Maximum anpasst, so ist Null stets in Diagramm Ecke 1 und das Maximum stets in Diagramm Ecke 3.
So bleibt der Kurvenverlauf im Diagramm stets gleich, auch wenn sich das Maximum und damit auch die Einzelwerte auf der Kurve ändern.
Würde sich der Kurvenverlauf ändern, dann wäre es außer bei linear, eine andere Kurvenform, siehe die vier Beispiel Kurvenverläufe.

hessenfarmer schrieb:
Neuronen-Werte sind die Basis für den Absolutwert an einer der 20 Stützstellen unserer 3 Neuronen-Funktionen.
Diese Funktionen steigen über 20 Stützstellen von 0 bis zum Neuronen-Wert gemäß unterschiedlichen Funktionen (linear, exponentiell, logarithmisch).
Der Wert an einer Stützstelle wird dann auch wieder als Gewicht verwendet.

Als Absolutwert an einer der 20 Stützstellen ? Ich gehe davon aus das du eigentlich meintest :
"Als Absolutwert an der letzten der 20 Stützstellen" Ich möchte aber absolute Sicherheit, daher nochmal deine Bestätigung.

hessenfarmer schrieb:
Der Zweck ist der Gleiche aber der Mechanismus funktioniert ein wenig anders.
Der Basiswert der Entscheidung wird auf 20 normiert und dann wird der Werte an der jeweiligen Stützstelle ( 0 bis 20) benutzt.

"der Werte" also ich vermute du meinst ein Wert, was in diesen Kontext logischer wäre.
Also funktioniert das so ? :
Gegeben sei Wert A von Neuronen-Werte [neuron_values] , sowie gegeben sei Wert B von Neuronen-Funktionen [neuron_functions] .
"auf 20 normiert" ? Entweder weitere externe Variable oder ein anderer Ausdruck für Zufallszahl von 0 bis 20.
Wenn A = 100 ist und B = 0 (linear) ist und C (Zufallszahl von 1 bis 20 [Im Beispiel 8] ) dann ist Wert D = 100 / 20 * 8 = 40.
Wenn Zufallszahl 1 ist dann wäre Wert D aber 0 weil, Element 1 immer Null ist und Element 20 immer Neuron-Wert.
Wenn nun Wert D 40 ist und 40 > größer Wert E 50 , Wert E ist eine externe Variable die für die Entscheidung relevant ist, benötigt für den Vergleichsoperator.
So kommt dann entweder 0 falsch oder 1 wahr heraus. Und das wird dann weiterverarbeitet für zum Beispiel den Befehl, wenn 1 dann baue eine Bäckerei oder sonstige Ausgaben.
Im Beispiel hier wäre 40 > 50 = 0 falsch, daher baue keine Bäckerei.
Also das mit der Bäckerei war jetzt nur ein Beispiel, vermutlich fließt das Ergebnis der Vergleichsoperation noch woanders ein und
zwischendurch kommen sicherlich noch andere Neuronen und Beschränkungen zum Zuge. Bevor erst ganz am Schluss der Ausgabebefehl kommt, baue an Position X|Y Gebäude Z.
Wenn aber auf 20 normiert heißt, greife den Y Wert der Funktion von jeder der 20 möglichen X Positionen ab, dann gibt es gleich 20 Werte für vergleiche. Bitte klarstellen.

hessenfarmer schrieb:
Eine typische Verwendung ist die Ermittlung eines Scores für ein bestimmtes Spielkommando.
Dazu definieren wir 32 (oder ein vielfaches von 32 [32, 64, 96, 128, ...] ) Scoringwerte aufgrund unterschiedlicher Spielinformationen und Gewichtungen.
Über ein F-Neuron steuern wir dann welche dieser Scoringwerte in den finalen Score übernommen werden. Siehe dieses Codebeispiel.

Im Codebeispiel sehe ich Abfrage des Soldatenstatus, sowie der Spielerstärke (Allgemeine Statistik Militär). Und nur Inputs bis 25.
Egal das ist Detail und nicht so wichtig. Also entscheidend ist jedenfalls das die Bit-Muster die im letzten Abschnitt [f_neurons] hinterlegt sind in den WAI-Dateien,
gewichten welche Eingabe mehr und welche weniger (nicht) einfließt in die Berechnung eines Spielkommando Scores,
beziehungsweise eines Scores, der in Verbindung mit weiteren mir unbekannten Faktoren, ein Score für ein Spielkommando ermittelt.
Also als Beispiel wenn Score 0, dann baue nichts, wenn Score 1 dann baue eine Forsthütte, wenn Score 2 dann baue eine Bäckerei, ...

Oke weiter möchte ich nicht auffächern, das wird sonst zu unübersichtlich. Das Thema ist sowieso schon komplex genug. Aber Stück für Stück erkenne ich langsam den Aufbau der KI.
Ich möchte noch dazu schreiben, als die KI von rein Skript und manuell festgelegten Gewichten umgestellt wurde auf die aktuelle genetische KI mit Mutationen,
der oder diejenigen die sich das ausgedacht haben und implementiert haben, haben sich bei der Sache sicherlich was dabei gedacht und auch vorher sich
Gedanken über Grenzfälle, sowie Möglichkeiten dieses KI-Systems, gemacht. Und man wird ja nicht ohne Grund dieses System haben, weil es besser ist als das alte.

Ich kratze an der Oberfläche des Eisbergs und habe am Anfang nur die WAI-Dateien und deren Inhalt und Aufbau gesehen.
Ich möchte gerne wissen wie groß der Eisberg ist, ich möchte aber jetzt nicht den Eisberg komplett auseinander nehmen und auch das komplette innere verstehen.

Teayo schrieb:
Ich habe trotz dieser Zusammenfassung die im Spiel sichtbare Dummheit der KI weiterhin nicht verstanden und kann diese auch weiterhin nicht nachvollziehen.
Also ich finde die KI zumindest dumm. Manche Ihrer Entscheidungen sind mir einfach schleierhaft.

hessenfarmer schrieb:
Wenn du konkrete Beispiele hast, dann prüfe ich gerne ob das ein Bug ist oder nur mangendes Training.

Gerne hier eine Auflistung von Dingen, an die ich mich beim letzten Widelands Spiel von mir erinnere.
- Die KI baut einen Hafen, baut aber dann lieber einen Bauernhof oder Hochofen, statt einer Werft,
so das die KI zwar einen Hafen hat, aber keine Schiffe, somit hat die KI automatisch verloren, sie kann nicht expandieren.
( Bedingung war, Karte "Ferne kleine Inseln" , Bauplatz 6 Hafenbauplätze, Rest nur kleine Bauplätze, in Bezug zur Küste.
KI nutzt 1/6 Hafenbauplätze richtig. Die KI muss aber wenigstens 2/6 der Hafenbauplätze richtig nutzen. )
- Die KI wechselt nicht Ihren Schwerpunkt für bestimmte Gebäude, so das sie Große Bauplätze, etwa für Bauernhöfe, für kleine Gebäude wie Forsthütte und Holzfällerhütte verschwendet.
( Gleiche Bedingung wie oben, jedoch dieses mal Große Bauplätze nahe des Hauptquartiers, Startzentrum, kleine Bauplätze weiter weg, am Insel Rand, dafür dann viele kleine Bauplätze,
Besser wäre gewesen wenn der Schwerpunkt der Holzproduktion nach außen verlagert wird, zu Bereichen wo viele kleine Bauplätze sich befinden um Platz für Große Gebäude zu machen. )
- Die KI kann keinen Weg erstellen, wenn es viele kleine Hindernisse gibt, also alle unbeweglichen Objekte, die durch Straßen und Flaggen entfernbar sind.
(Entfernung von zusätzlicher Kartendekoration, kleinen Steinen, Gräsern, ...)


Attachment:
Widelands_Funktionsverlauf_Kart.png

Das Imperium schlägt zurück ! TY

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 22:16
Posts: 2708
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2023-08-02, 09:21

Teayo wrote:

Bleiben die Kurvenverläufe der Funktionen gleich ? Und variabel ist wie bekannt nur weiterhin das Maximum ?
Siehe angehängtes Bild. Wenn man das Diagramm an das Maximum anpasst, so ist Null stets in Diagramm Ecke 1 und das Maximum stets in Diagramm Ecke 3.
So bleibt der Kurvenverlauf im Diagramm stets gleich, auch wenn sich das Maximum und damit auch die Einzelwerte auf der Kurve ändern.
Würde sich der Kurvenverlauf ändern, dann wäre es außer bei linear, eine andere Kurvenform, siehe die vier Beispiel Kurvenverläufe.

Alle 20 Stützstellen werden mit dem Faktor neuron_Value/100 multipliziert. somit ist der Kurvenverlauf bei einer Normierung auf das Maximum immer gleich, da diese Normierung ja die Inverse Operation ist.

hessenfarmer schrieb:
Neuronen-Werte sind die Basis für den Absolutwert an einer der 20 Stützstellen unserer 3 Neuronen-Funktionen.
Diese Funktionen steigen über 20 Stützstellen von 0 bis zum Neuronen-Wert gemäß unterschiedlichen Funktionen (linear, exponentiell, logarithmisch).
Der Wert an einer Stützstelle wird dann auch wieder als Gewicht verwendet.

Als Absolutwert an einer der 20 Stützstellen ? Ich gehe davon aus das du eigentlich meintest :
"Als Absolutwert an der letzten der 20 Stützstellen" Ich möchte aber absolute Sicherheit, daher nochmal deine Bestätigung.

Ich meinte, dass alle Stützstellen mit dem o.a. Faktor aus dem Neuron_value und 100 normiert werden.

Gegeben sei Wert A von Neuronen-Werte [neuron_values] , sowie gegeben sei Wert B von Neuronen-Funktionen [neuron_functions] .
"auf 20 normiert" ? Entweder weitere externe Variable oder ein anderer Ausdruck für Zufallszahl von 0 bis 20.

Nein es funktioniert so:
1. es wird der numerische Wert einer Spielgröße ermittelt (z.B. eigene Landfläche)
2. dieser Wert wird so normiert, dass das theoretische Maximum ungefähr 20 betragen sollte (z.B. eigene Fläche durch Gesamtfläche durch 5)
3. der normierte Integer Wert zwischen 0 und 20 gibt dann an an welcher Stützstelle der Neuronenfunktion der Wert für die weitere Berechnung von z.B. Scores abgelesen wird.

hessenfarmer schrieb:
Eine typische Verwendung ist die Ermittlung eines Scores für ein bestimmtes Spielkommando.
Dazu definieren wir 32 (oder ein vielfaches von 32 [32, 64, 96, 128, ...] ) Scoringwerte aufgrund unterschiedlicher Spielinformationen und Gewichtungen.
Über ein F-Neuron steuern wir dann welche dieser Scoringwerte in den finalen Score übernommen werden. Siehe dieses Codebeispiel.

Im Codebeispiel sehe ich Abfrage des Soldatenstatus, sowie der Spielerstärke (Allgemeine Statistik Militär). Und nur Inputs bis 25.
Egal das ist Detail und nicht so wichtig. Also entscheidend ist jedenfalls das die Bit-Muster die im letzten Abschnitt [f_neurons] hinterlegt sind in den WAI-Dateien,
gewichten welche Eingabe mehr und welche weniger (nicht) einfließt in die Berechnung eines Spielkommando Scores,

Exakt. ein Bit 1 im fneuron heißt diese Gewichtung wird berücksichtigt. Bit 0 heißt sie wird ignoriert.

beziehungsweise eines Scores, der in Verbindung mit weiteren mir unbekannten Faktoren, ein Score für ein Spielkommando ermittelt.
Also als Beispiel wenn Score 0, dann baue nichts, wenn Score 1 dann baue eine Forsthütte, wenn Score 2 dann baue eine Bäckerei, ...

meisst ermittlen wir den Score für mehrere Alternativen. (z.B. die Kombination von Koordinate und Bauwerk) und dann wird der beste Score als Spielkommando umgesetzt.

Oke weiter möchte ich nicht auffächern, das wird sonst zu unübersichtlich. Das Thema ist sowieso schon komplex genug. Aber Stück für Stück erkenne ich langsam den Aufbau der KI.
Ich möchte noch dazu schreiben, als die KI von rein Skript und manuell festgelegten Gewichten umgestellt wurde auf die aktuelle genetische KI mit Mutationen,
der oder diejenigen die sich das ausgedacht haben und implementiert haben, haben sich bei der Sache sicherlich was dabei gedacht und auch vorher sich
Gedanken über Grenzfälle, sowie Möglichkeiten dieses KI-Systems, gemacht. Und man wird ja nicht ohne Grund dieses System haben, weil es besser ist als das alte.

Früher waren alle diese Gewichtungen hart codiert und es wurde versucht die verschiedenen Gewichtungen per Hand / Gefühl zu "tunen". das stößt unweigerlich an Grenzen, daher hat Tibor irgendwann den genetischen Algorithmus eingeführt. Allerdings haben wir immer noch genügend vererbte harte Werte im Code.


Ich kratze an der Oberfläche des Eisbergs und habe am Anfang nur die WAI-Dateien und deren Inhalt und Aufbau gesehen.
Ich möchte gerne wissen wie groß der Eisberg ist, ich möchte aber jetzt nicht den Eisberg komplett auseinander nehmen und auch das komplette innere verstehen.

Gerne hier eine Auflistung von Dingen, an die ich mich beim letzten Widelands Spiel von mir erinnere.
- Die KI baut einen Hafen, baut aber dann lieber einen Bauernhof oder Hochofen, statt einer Werft,
so das die KI zwar einen Hafen hat, aber keine Schiffe, somit hat die KI automatisch verloren, sie kann nicht expandieren.
( Bedingung war, Karte "Ferne kleine Inseln" , Bauplatz 6 Hafenbauplätze, Rest nur kleine Bauplätze, in Bezug zur Küste.
KI nutzt 1/6 Hafenbauplätze richtig. Die KI muss aber wenigstens 2/6 der Hafenbauplätze richtig nutzen. )

Solche extremen Grenzfälle, kann die KI nicht handhaben, da sie keine Ahnung hat wieviele große oder mittlere Bauplätze es insgesamt gibt. Sie kennt noch nicht einmal die Größe all Ihrer eignen Bauplätze, da sie aus Performance Gründen immer nur einen Teil Ihrer eigenen Bauplätze evaluiert. Sie versucht zwar große und mittlere Bauplätze zu sparen, aber wenn sich in den betrachteten Feldern nur Große befinden dann nutzt sie einen davon. Damit die KI ordentlich funktioniert, braucht sie vor allem ausreichend BAuplätze aller Größe. Das ist per Design der KI so gegeben.

  • Die KI wechselt nicht Ihren Schwerpunkt für bestimmte Gebäude, so das sie Große Bauplätze, etwa für Bauernhöfe, für kleine Gebäude wie Forsthütte und Holzfällerhütte verschwendet.
    ( Gleiche Bedingung wie oben, jedoch dieses mal Große Bauplätze nahe des Hauptquartiers, Startzentrum, kleine Bauplätze weiter weg, am Insel Rand, dafür dann viele kleine Bauplätze,
    Besser wäre gewesen wenn der Schwerpunkt der Holzproduktion nach außen verlagert wird, zu Bereichen wo viele kleine Bauplätze sich befinden um Platz für Große Gebäude zu machen. )

Wie gesagt die KI hat kein Bewusstsein über die Geografie der Karte, somit kann sie solche Dinge nicht berücksichtigen

  • Die KI kann keinen Weg erstellen, wenn es viele kleine Hindernisse gibt, also alle unbeweglichen Objekte, die durch Straßen und Flaggen entfernbar sind.
    (Entfernung von zusätzlicher Kartendekoration, kleinen Steinen, Gräsern, ...)

Das könnte ein Bug sein, werde ich mir anschauen. Hast du evtl. ein Replay, bzw. eine Testkarte?


Top Quote