Latest Posts

Topic: KI Training / Map Test Spielschleife

TickeHD
Avatar
Topic Opener
Joined: 2018-08-05, 21:21
Posts: 66
OS: Windows 11 64 Bit
Version: Widelands 1.1
Ranking
Likes to be here
Location: Thuringia, Germany
Posted at: 2023-07-31, 23:13

Hallo,

ich habe vor, die KI zu trainieren und Maps auf ihre Ausgewogenheit zu prüfen. Bis jetzt muss ich dafür immer das Spiel manuell starten und das können hunderte Runden sein, die ich immer wenn das Spiel durchgelaufen ist wieder neu starten muss. Ich stelle mir das so vor: Man wählt eine Karte aus, macht alle Einstellungen und kann für jeden Spieler eine andere KI-Inputdatei auswählen (Ich muss ja auch mehrere WAI Dateien gegeneinander spielen lassen können, damit ich sehe welche besser ist). Wenn das Spiel vorbei ist, soll das Ergebnis (Gewonnener Spieler und KI-WAI Outputdatei) gespeichert werden und anschließend das nächste Spiel gestartet werden, bis die Anzahl der eingestellten Spiele erreicht ist. Man soll auch die Möglichkeit bekommen, nach Abschluss dieser Schleife das ganze weiterlaufen zu lassen bzw. zwischendurch aufzuhören, wenn man meint, dass man schon genug Daten gesammelt hat. Die Allgemeinen Statistiken, welche man mit der Taste A aufgerufen werden können, sollten auch bei jedem Spiel einzeln abgespeichert werden. Eine Maximalspieldauer sollte vom Benutzer vorgegeben werden (Wenn die Zeit abgelaufen ist, wird das Spiel unentschieden und das nächste beginnt), schließlich können auch mal alle Spieler in einem Deadlog sein und das Spiel geht dann unendlich lange und die Schleife kommt nie zum Ende. Ich verwende für KI-Training und Kartentests immer den Spielmodi Landherr, wenn ich mehrere KI-Gegner gegeneinander antreten lasse.

Wofür wir das gebrauchen können: Wenn wir eine neue Map gebaut haben, können wir ohne weiteren Aufwand eine von uns gebaute oder heruntergeladene Karte auf ausgewogenheit prüfen (Wenn immer der gleiche Spieler gewinnt, ist die Karte nicht ausgewogen). Außerdem wird KI-Training deutlich einfacher, weil nicht immer das Spiel manuell neu gestartet werden muss. Wenn es keinen großen Aufwand in der Programmierung der Schleifen darstellt wäre es außerdem schön, wenn diese Funktion auch so ausgelegt werden kann, dass mehrere Spiele gleichzeitig laufen können, denn moderne CPUs werden von Widelands nicht besonders beansprucht und verkraften locker mehrere parallel laufende Spiele.

Gerne stelle ich meine starke Computerhardware für die Verbesserungen des Spiels Widelands kostenlos bereit, meldet euch bei Interesse bei mir.

Ich selbst kann nicht besonders gut programmieren bzw. habe von dem Code von Widelands nur sehr wenig ahnung. Daher bitte ich euch, diesen Beitrag jemanden weiterzuleiten, der sich gut mit dem Code von Widelands auskennt und dies implementieren kann (Es muss nicht zwingend eine Implementierung in Widelands sein, es kann auch ein externes Tool sein, welches das Spiel steuert, so ist 1. keine neue Widelands Version erforderlich und es funktioniert auch mit älteren Versionen und 2. kann dieses Tool auch jemand programmieren, der kein offizieller Widelands Developer ist). Ich möchte nochmal darauf hinweise, dass dies einige Probleme lösen wird und dem Spiel und den Spielern Widelands einen deutlichen Mehrwert bieten wird. Wenn du also so etwas programmieren kannst: Es lohnt sich!

Grüße

Edited: 2023-08-01, 01:51

Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 19:48
Posts: 2488
OS: Archlinux
Version: current master
Ranking
One Elder of Players
Location: Germany
Posted at: 2023-08-01, 07:54

Vllt kann man im ai-training switch ja einfach das Ergebnis des Spiels auf der Konsole ausgeben:

./widelands --ai_training --auto_speed --new_game_from_template=/path/to/template
......
Game has ended with following result:
Player1  nr-wai-datei lost
Player2  nr-wai-datei lost 
Player3  nr-wai-datei won 
Player4  nr-wai-datei lost 

Dann kann man die Daten von einem externem Programm auslesen und das Spiel neu starten.

Aber ob das dazu nützlich sein kann eine Karte auf Ausgewogenheit zu testen bin ich mir nicht sicher. Auf manchen Karten ist die ai einfach besser als auf anderen (zB wenn viele Bauplätze vorhanden sind vs wenig Bauplätze). Zudem wird die ai ja bei jedem Spiel leicht modifiziert.


Fight simulator for Widelands:
https://wide-fighter.netlify.app/

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 22:16
Posts: 2699
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2023-08-01, 10:23

Also den Zweck der Kartenevaluation sehe ich nicht, aus den Gründen die auch @kaputtnik anführt.
Bisher wurde die KI immer von @Tibor trainiert. Er hatte sich soweit ich weiss dazu ein Linux shell script geschrieben, dass genau diese Abfolge erledigt.
Wenn die KI im Trainingsmodus ist werden vom AI Code auch in regelmäßigen Abständen (10 Minuten) "Review" Daten ins log geschrieben, die den Stand der KI zum Zeitpunkt darstellen.

Edited: 2023-08-01, 10:25

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 22:16
Posts: 2699
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2023-08-01, 10:33

Es wäre aber tatsächlich cool ein Skript (vorzugsweise Python) zu haben. dass folgendes erledigt:
- ermittle die Anzahl freier Prozessorkerne
- starte pro 2 freie Kerne eine Widelandsinstanz mit den Optionen --ai_training und --auto_speed mit der Siegbedingung Landherr.
- Am Ende des Spiels Parse die Logdatei (oder die Standardausgabe) bezüglich der Review Messages und vergleiche den Score.
- Wenn der Score um Faktor 10% höher ist als der bisherige top Score speichere die WAI output datei in ein spezielles Verzeichnis zusammen mit dem Score.


Top Quote
TickeHD
Avatar
Topic Opener
Joined: 2018-08-05, 21:21
Posts: 66
OS: Windows 11 64 Bit
Version: Widelands 1.1
Ranking
Likes to be here
Location: Thuringia, Germany
Posted at: 2023-08-01, 12:26

Erstmal danke für die Beiträge. Die bisher etablierte Möglichkeit die KI zu trainieren funktioniert nur zu einem gewissen Grad. Wenn ich immer die KI weiterführe die gewonnen hat, wird sie sich irgendwann wieder verschlechtern, weil es auch sein kann, dass nicht diese KI besser geworden ist, sondern alle anderen einfach viel schlechter mutiert worden. Wenn die KI über diese Grenze weiter trainiert werden soll, müssen wir mutierte KI Dateien mit nicht mutierten vorgängerdateien vergleichen. Und sind wir uns mal ehrlich, die aktuelle KI ist eher langweilig, was nicht daran liegt, dass der Code schlecht ist, sondern wie sie trainiert wurde.

Zum Thema Karten testen: Natürlich ist mir bewusst, dass diese Methode fehleranfällig ist, aber es ist aktuell die beste Möglichkeit eine Karte auf Ausgewogenheit zu testen, viele Runden KI Gegner gegeneinander spielen zu lassen. Ich teste Karten schon Jahre lang auf diese Art. Man sieht mit dieser Möglichkeit deutlich, wenn eine Karte nicht ausgewogen ist, und die Mutationen kann man für den Kartentest ja auch einfach ausschalten, es wird aber zu einem ähnlichen Ergebnis führen. Das Script wäre also durchaus Hilfreich, weil ich es ja im Prinzip nur das gleiche macht wie ich von Hand.


Top Quote
Teayo
Avatar
Joined: 2015-03-09, 21:11
Posts: 171
OS: Windows 11 Home 64-bit
Version: 1.2 from Juni (06) 2023
Ranking
At home in WL-forums
Location: Deutschland
Posted at: 2023-08-01, 14:45

hessenfarmer schrieb:
Es wäre aber tatsächlich cool ein Skript (vorzugsweise Python) zu haben.

Ja dem würde ich auch zustimmen. Am besten wäre es wenn diese Funktion im Spielmenü eingebaut würde.
Dann könnten sehr viele mit sehr geringen Aufwand die KI trainieren, womöglich sogar Ihre eigene KI und diese dann mit anderen teilen, KI sharing.
Und die grobe Infrastruktur mit den Erweiterungen / Addons steht ja schonmal.

Schneller umzusetzen wäre jedoch ein externe Erweiterung, die wenn sie ausgeführt wird, Widelands mit allen eingestellten Eigenschaften startet und die KI automatisch trainiert,
automatisch neue Runden startet, also alles das was oben in den vorherigen Posts beschrieben wurde. Wenn Tibor bisher die KI trainiert hat, dann sollten wir uns mit Ihm in Kontakt setzen.
Weiß jemand ob Tibor noch aktiv ist, oder wenigstens ob Tibor überhaupt noch Kontaktpunkte mit Widelands hat und erreichbar ist ?

Allerdings, die Methode, nur die KI zu übernehmen die 10% besser war als die vorherige, oder nur einen einzigen Wert, Score für jede KI als Ihre Note für Ihr Runden Ergebnis zu nutzen,
halte ich für problematisch. Widelands hat viele Aspekte, nicht nur den militärischen. Eine KI sollte auch dann übernommen werden, wenn sie eine effiziente Wirtschaft aufbaut oder
oder effizienter mit Bauplatz umgeht, Straßen effizienter verknüpft, Expeditionen effizienter erkunden, taktisch und strategisch Ihr Militär und Ihre Diplomatie nutzt.
Oder gar wenn Sie mit sehr widrigen Startbedingungen umgehen kann ohne sich selbst zu erdrosseln, dann sollte die KI auch übernommen werden.
hessenfarmer's Link zu Review : https://github.com/widelands/widelands/blob/5a1111cff25f10fe58b71afae80e208037614628/src/ai/ai_help_structs.cc#L546
Auszug der Funktion :
void ManagementData::review
(
const Time& gametime,
Widelands::PlayerNumber pn,
const uint32_t land,
const uint32_t max_e_land,
const uint32_t old_land,
const uint16_t attackers,
const int16_t trained_soldiers,
const uint16_t strength,
const uint32_t existing_ps,
const Time& first_iron_mine_time,
const uint16_t ships_count,
const uint16_t finished_mine_types
)

Was ich zumindest jetzt schon für falsch halte ist das es nur 4 Standard WAI Dateien geben darf. Die obendrein noch alle fast gleich sind.
Im Prinzip kommt die KI zwar mit jeder Wirtschaft, eines jeden Stammes klar, aber ich bezweifle schon jetzt, ob wir eine gute KI erhalten,
wenn wir eine KI für alle Stämme trainieren. Ich kann das noch nicht abschließend beurteilen, da mir noch nicht alle Rahmenbedingungen bekannt sind.
Nur 4 WAI Dateien für 4 Charaktere / Spielertypen oder besser Spielstil. Das ist unzureichend. Die Begrenzung sollte aufgehoben oder erhöht werden.
Wenn ich oder auch Ihr die KI besser verstehen wollt, soll auch klar sein, welche zwei Dateien genau kombiniert wurden und wie viele Mutationen,
wo an welcher Stelle, mit welche Intensität, wie stark die Änderung war, die KI verbesserte. In den Report sollte mit aufgenommen werden,
welche Eigenschaften der WAI Datei im Vergleich zur Ausgangsdatei um wie viel geändert wurden. Dann könnte man mit der Zeit nachvollziehen,
welche Mutations-Änderungen an welchen Eigenschaften genau, die KI in welchen Bereich genau verbesserten.

Aber mir ist halt momentan noch zu wenig über die KI bekannt, als das ich hier sinnvolle Vorschläge unterbreiten kann.
Mein Instinkt sagt mir jedoch, das Stammesspezifische Training, parallel zum Allrounder KI Training potenzial für eine bessere KI hat.
In diesen Zusammenhang, eine Verbesserung der Allgemeinen Statistiken Anzeige wäre auch sinnvoll.


Attachment:
Widelands_verbesserte_Statistiken_Vorschau.png

Das Imperium schlägt zurück ! TY

Top Quote
TickeHD
Avatar
Topic Opener
Joined: 2018-08-05, 21:21
Posts: 66
OS: Windows 11 64 Bit
Version: Widelands 1.1
Ranking
Likes to be here
Location: Thuringia, Germany
Posted at: 2023-08-01, 15:39

Nun erstelle ich meine Zusammenfassung was gemacht werden muss: - Jeder Stamm bekommt standardmäßig eine eigene KI-Datei. - Einzelnen Computerspielern können unterschiedliche KI-Inputdateien zugewiesen werden. - Eine Schleife von mehreren hintereinander oder parallel laufenden KI-Spielen soll erstellt werden können: Der Benutzer wählt eine Karte aus, trägt alle Daten ein: Anzahl der Runden Anzahl der Spieler, Stämme, evtl Teams. Maximale Rundendauer, (Danach wird beendet und das nächste Spiel gestartet, wegen Deadlog Gefahr) Nach jedem Spiel wird in einem Verzeichnis (evtl vom Benutzer festlegbar) für jede Runde ein Ordner erstellt, in dem alle KI-Dateien gespeichert werden und welcher Spieler gewonnen hat, hier soll auch eine Abbildung (Bild) aller allgemeinen Statistiken gespeichert werden. (Messungen der Wirtschaft sind entscheidend: Nicht nur eine Sache muss in die Entscheidung einfließen sondern die gesamte Wirtschaft wie Teayo schreibt:Wenn eine KI sehr effizient mit Bauplatz umgeht, dafür dann aber nur mittelmäßig beim Militär abschneidet, dann sollte man diese KI trotzdem speichern, den die perfekte KI muss in allen Bereichen gut sein, militärisch, wirtschaftlich, bauen, taktisch, strategisch, seefahrt). Das könnte dann so aussehen: In dem Verzeichnis finden sich Ordner (1, 2, 3, 4, 5 usw.) und in jedem Ordner sind die KI-Dateien des jeweiligen Spiels und eine Datei, die angibt welcher Spieler gewonnen hat (z.B 555 für Spieler 5) So kann man dann ganz einfach herausfinden, welcher Spieler wie oft gewonnen hat: Man gibt in die Suche einfach 444 ein und man sieht, wenn 3 Dateien gefunden werden, hat Spieler 4 3 mal gewonnen. Wenn ihr eine Idee habt, wie es besser umgesetzt werden kann, ergänzt bitte, dann werde ich die Zusammenfassung entsprechend anpassen, zumindest ist das die Methode die ich selbst bei mir am Recher so nutze. - Mutationen sollen komplett deaktivierbar sein, um eine KI-Datei so zu testen, wie sie wirklich ist, ohne dass sie vom Spiel nochmal verändert wird. - Es soll keine Begrenzung der Imput-KI Dateien mehr geben, jedem KI-Spieler soll eine eigene KI-Datei zugewiesen werden können. - In den Allgemeinstatistiken soll der aktuelle Wert jeden Spielers angezeigt werden, wie in der Abbildung von Teayo.

Schreibt mir gerne eure Ergänzungen und dann geben wir das einem Entwickler weiter.

Edited: 2023-08-01, 17:02

Top Quote
Teayo
Avatar
Joined: 2015-03-09, 21:11
Posts: 171
OS: Windows 11 Home 64-bit
Version: 1.2 from Juni (06) 2023
Ranking
At home in WL-forums
Location: Deutschland
Posted at: 2023-08-01, 17:04

Das mit den Allgemeinen Statistiken von mir oben mit den Bild, das ist ein separater Verbesserungsvorschlag, den ich aufgrund der thematischen Nähe hier mit eingewoben habe.
Das mit den verbessern des KI Trainings ist auch wieder ein großes Fass aber im Gegensatz zu den Verbesserungsvorschlägen mit dem Hafen (Link zu Thread)
und dem grundlegenden KI Aufbau , ist das wenigstens übersichtlicher und möglicherweise auch leichter umzusetzen. Allerdings warte ich erstmal die Antworten von
@Nordfriese und @hessenfarmer ab, da @Nordfriese und @hessenfarmer Widelands besser kennen als ich und so auch besser einschätzen können,
was möglich ist, was sinnvoll ist und was am dringendsten ist. Wobei die Verbesserung des KI Trainings Wahrscheinlich nicht dringend ist.
Ist nur gerade im Moment ein heißes Thema von zwei.


Das Imperium schlägt zurück ! TY

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 22:16
Posts: 2699
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2023-08-01, 17:34

Was ich in der oben angegebenen Aufzählung vergessen hatte, ist das manuelle Review der potenziellen Kandidaten für die nächste KI Generation. D.H. die Entscheidung zur Übernahme in eine neue Generation wurde bisher manuell per Replay überprüft. Desahlb die Vorauswahl der Kandidaten mit 10% besserem Score.
Eine weitere Mögllichkeit ist auch den Score (das ist unsere Fitnessfunktion) zu verbessern, so dass diese Auswahl automatisiert werden könnte.
Bezüglich des Stammspezifischen Trainings stimme ich zu, dass dies eine Verbesserung bringen kann, und auch relativ leicht umzusetzen wäre. Allerdings ist der Stammeseinfluss auch bereits über die Definition der AI Hints und der Preciousness von Waren gegeben, welche Stammspezifisch sind.

Allgemein würde ich aber nicht die allergrößten Erwartungen in das KI Training setzen, da
- Es immer noch auch eine Menge hardgecodeter Gewichte von Faktoren im KI Code gibt.
- Die trainierbaren Werte eben nur Gewichte in den programmierten Fragestellungen sind, und eine mangelhafte Fragestellung nicht ausgleichen können.

Das Skript sollte meiner Meinung nach extern geschrieben werden, ähnlich wie unsere Testsuite ( also Python), da es das auszuliefernde Program sonst nur aufblähen würde.


Top Quote