KaBotte: Unterschied zwischen den Versionen
Maks (Diskussion | Beiträge) |
Maks (Diskussion | Beiträge) |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 15: | Zeile 15: | ||
= Fun facts = | = Fun facts = | ||
* KaBotte hat am 28.02.2016 am 91. Tag nach der Karopapier-Anmeldung bzw. 50. Tag nach der Eintragung zu KaroIQ maks in der KaroIQ-Tabelle überholt. | * KaBotte hat am 28.02.2016 am 91. Tag nach der Karopapier-Anmeldung bzw. 50. Tag nach der Eintragung zu KaroIQ maks in der KaroIQ-Tabelle überholt. | ||
− | |||
* Erstes Spiel [http://www.karopapier.de/showmap.php?GID=94381] am 29.11.2016 noch mit Anfangsschwierigkeiten wegen eines Bugs | * Erstes Spiel [http://www.karopapier.de/showmap.php?GID=94381] am 29.11.2016 noch mit Anfangsschwierigkeiten wegen eines Bugs | ||
* Erster aktiver Block im Spiel [https://www.karopapier.de/showmap.php?GID=99264] gegen DeepPink. Zuerst einen Zug abgenommen und kurz darauf zum Crash gezwungen. | * Erster aktiver Block im Spiel [https://www.karopapier.de/showmap.php?GID=99264] gegen DeepPink. Zuerst einen Zug abgenommen und kurz darauf zum Crash gezwungen. | ||
Zeile 21: | Zeile 20: | ||
* KaBotte hat am 04.08.2017 das erste mal im Karopapier Chat geschrieben [https://www.karopapier.de/api/chat/list.json?start=397975&limit=2] | * KaBotte hat am 04.08.2017 das erste mal im Karopapier Chat geschrieben [https://www.karopapier.de/api/chat/list.json?start=397975&limit=2] | ||
* KaBotte ist erwachsen geworden, ausgezogen (08.09.2017) und wohnt nun in der Cloud. Die wolkige Bot-WG befindet sich auch in Frankfurt bei einem Vermieter namens Amazon. | * KaBotte ist erwachsen geworden, ausgezogen (08.09.2017) und wohnt nun in der Cloud. Die wolkige Bot-WG befindet sich auch in Frankfurt bei einem Vermieter namens Amazon. | ||
+ | * 2021-04-07 KaBotte 4.0 ist Live: Umbau auf Stream-API und Bugs vor allem in der GameTreeSearch gefixt | ||
= Features = | = Features = | ||
[[Bild:Schalotte.png|mini|220x220px|rechts|gerahmt|Schalotte (Dank an den Künstler [[Benutzer:CaptainLoken|CaptainLoken]])]] | [[Bild:Schalotte.png|mini|220x220px|rechts|gerahmt|Schalotte (Dank an den Künstler [[Benutzer:CaptainLoken|CaptainLoken]])]] | ||
− | * aktives [[Blocken|Blocken]] von Gegnern | + | * Zugwahl auf Basis eines nicht-deterministischen Game-Trees (maximal fünf Spieler werden berücksichtigt), aktives [[Blocken|Blocken]] von Gegnern findet nur statt, wenn es die Gewinnchancen erhöht. |
* beherrscht [[Checkpoint|Checkpoints]] | * beherrscht [[Checkpoint|Checkpoints]] | ||
* Richtungsmodus bei [[Rundkurs|Rundkursen]] | * Richtungsmodus bei [[Rundkurs|Rundkursen]] | ||
* selbständiges Erkennen von Rundkursen | * selbständiges Erkennen von Rundkursen | ||
* [[Taktischer_Crash|Taktische Crashs]] (TC, inkl. [[ZZZ_bei_Crash|Mehrfachcrashs]]) | * [[Taktischer_Crash|Taktische Crashs]] (TC, inkl. [[ZZZ_bei_Crash|Mehrfachcrashs]]) | ||
− | * [[Nachtkarte|Nachtrennen]] | + | * [[Nachtkarte|Nachtrennen]] |
* Selbständiges Aussteigen bei nicht unterstützten Strecken | * Selbständiges Aussteigen bei nicht unterstützten Strecken | ||
− | * [ | + | * [Websocket]-Unterstützung Karo-PAPA, daher Reaktionszeiten von < 1 Sekunde |
* [[KaBotte-MapAlizor|MapAlizor]] zur Analyse von Karten zur Eignung als Duell-Karte bzw. Ermittlung einer "fairen" Spielerzahl bzw. Ideallinien | * [[KaBotte-MapAlizor|MapAlizor]] zur Analyse von Karten zur Eignung als Duell-Karte bzw. Ermittlung einer "fairen" Spielerzahl bzw. Ideallinien | ||
* Schalotte [ist auch ein Gemüse] (Chatbot) mit überarbeitetem Wortschatz von Alice (deutsch) mit Anpassungen an Karopapier | * Schalotte [ist auch ein Gemüse] (Chatbot) mit überarbeitetem Wortschatz von Alice (deutsch) mit Anpassungen an Karopapier | ||
− | |||
== Sonderregeln aus [[Einladeraum|Einladeraum]] == | == Sonderregeln aus [[Einladeraum|Einladeraum]] == | ||
Zeile 41: | Zeile 40: | ||
* REmulAde ("§ REmulAde § " bzw. "§ Rundenerster wiederholt letzten Zug §") (bei <= 3 aktiven Spielern muss nur einmal in Folge wiederholt werden; ab 7 Spielern müssen die beiden Ersten wiederholen; wenn die Wiederholung auf einem Gegner landet, darf frei gefahren werden) KaBotte vermeidet Züge die im Falle einer erzwungenen Wiederholung zu einem Crash führen. Eine aktive Zugauswahl um im Falle von RE Wiederholungszüge zu vermeiden findet noch nicht statt. | * REmulAde ("§ REmulAde § " bzw. "§ Rundenerster wiederholt letzten Zug §") (bei <= 3 aktiven Spielern muss nur einmal in Folge wiederholt werden; ab 7 Spielern müssen die beiden Ersten wiederholen; wenn die Wiederholung auf einem Gegner landet, darf frei gefahren werden) KaBotte vermeidet Züge die im Falle einer erzwungenen Wiederholung zu einem Crash führen. Eine aktive Zugauswahl um im Falle von RE Wiederholungszüge zu vermeiden findet noch nicht statt. | ||
* [[Medium:KaBotte_Sonderregel_Ziffernblock.png|Ziffernblock]] ("$ Ziffernblock $") | * [[Medium:KaBotte_Sonderregel_Ziffernblock.png|Ziffernblock]] ("$ Ziffernblock $") | ||
− | |||
− | |||
* [[Medium:KaBotte_Sonderregel_Doppelzug.png|Doppelzug]] ("$ Doppelzug $") | * [[Medium:KaBotte_Sonderregel_Doppelzug.png|Doppelzug]] ("$ Doppelzug $") | ||
− | |||
− | |||
* [[Medium:KaBotte_Sonderregel_x0odery0.png|Nur x=0 oder y=0]] ("$ Nur x=0 oder y=0 $") | * [[Medium:KaBotte_Sonderregel_x0odery0.png|Nur x=0 oder y=0]] ("$ Nur x=0 oder y=0 $") | ||
− | |||
= Problematische Karten = | = Problematische Karten = | ||
Zeile 57: | Zeile 51: | ||
= Tools = | = Tools = | ||
− | |||
− | |||
− | |||
− | |||
− | |||
= Technische Details = | = Technische Details = | ||
Zeile 69: | Zeile 58: | ||
* Java | * Java | ||
− | * Multi-Threaded (Server-Kommunikation, Pfadberechnung, Game-Tree-Search) | + | * Multi-Threaded (Server-Kommunikation, Pfadberechnung, Traveling-Salesman-Problem, Game-Tree-Search) |
* minimal nötiger Speicherbedarf: 550 MB | * minimal nötiger Speicherbedarf: 550 MB | ||
Zeile 75: | Zeile 64: | ||
=== Pfadsuche === | === Pfadsuche === | ||
− | * Breitensuche zwischen möglichen Zügen und dem jeweils nächsten | + | * Breitensuche zwischen möglichen Zügen und dem jeweils nächsten CheckPoint |
* Optimierung der Tour durch lösen eines vereinfachten TSP | * Optimierung der Tour durch lösen eines vereinfachten TSP | ||
=== Zugwahl === | === Zugwahl === | ||
− | * KaBotte analysiert nach Möglichkeit den gesamten Spielbaum mit dem MP-Mix Algorithmus in | + | * KaBotte analysiert nach Möglichkeit (abhängig von der Anzahl der Spieler und deren Zugmöglichkeiten wird nach Bedarf die Suchtiefen angepasst) den gesamten Spielbaum mit dem MP-Mix Algorithmus (eine mehrspieler Erweiterung des MiniMax-Algorithmus mit dem Strategien MaxN, Defensiv und Aggresiv erweitert, um einen probabilistischen Anteil erweitert, der die zufällige Zugreihenfolge abbildet). Wenn nach diesen Kriterien die gleichen Gewinnchancen bestehen, wird als Fallback der Zug gewählt, derdie meisten optimalen (minimale Pfadlänge) Nachfolger hat. [https://www.researchgate.net/profile/Inon-Zuckerman/publication/220437178_The_MP-MIX_Algorithm_Dynamic_Search_Strategy_Selection_in_Multiplayer_Adversarial_Search/links/0deec533d888963de7000000/The-MP-MIX-Algorithm-Dynamic-Search-Strategy-Selection-in-Multiplayer-Adversarial-Search.pdf MP-MIX] [https://www.aaai.org/Papers/AAAI/1986/AAAI86-025.pdf MaxN] [https://webdocs.cs.ualberta.ca/~bowling/papers/06aaai-probmaxn.pdf Prob-MaxN] [http://www.ifaamas.org/Proceedings/aamas2011/papers/D2_G54.pdf SOS] |
=== Rundkurse === | === Rundkurse === | ||
Zeile 86: | Zeile 75: | ||
** das Ziel ist mehr als 8 Züge vom Start entfernt | ** das Ziel ist mehr als 8 Züge vom Start entfernt | ||
** die Zieleinfahrt ist nur in einem Winkelbereich von maximal 180° möglich (d.h. die Ziellinie trennt die Fahrbahn vollständig) | ** die Zieleinfahrt ist nur in einem Winkelbereich von maximal 180° möglich (d.h. die Ziellinie trennt die Fahrbahn vollständig) | ||
− | * Die Kriterien reichen in ca. 90% der Fälle zur korrekten Klassifizierung aus; für den Rest wurden händisch | + | * Die Kriterien reichen in ca. 90% der Fälle zur korrekten Klassifizierung aus; für den Rest wurden händisch ausnahmen definiert |
− | * Problemfälle sind u.a. Maps mit Start oder Ziel in einer Sackgasse | + | * Problemfälle sind u.a. Maps mit Start oder Ziel in einer Sackgasse: Map Nr. [https://www.karopapier.de/map/116 116], [https://www.karopapier.de/map/134 134], [https://www.karopapier.de/map/184 184], [https://www.karopapier.de/map/205 205], [https://www.karopapier.de/map/229 229]; [https://www.karopapier.de/map/201 201] |
=== Richtungsmodus === | === Richtungsmodus === | ||
Zeile 95: | Zeile 84: | ||
=== Sonderregeln === | === Sonderregeln === | ||
* hierfür werden bei der standardmäßigen Überprüfung auf Gültigkeit von Zügen ebenfalls auf die Sonderregeln hin überprüft und Züge gegebenenfalls aussortiert; die eigentliche Pfadsuche funktioniert weiterhin ohne spezielle Anpassungen | * hierfür werden bei der standardmäßigen Überprüfung auf Gültigkeit von Zügen ebenfalls auf die Sonderregeln hin überprüft und Züge gegebenenfalls aussortiert; die eigentliche Pfadsuche funktioniert weiterhin ohne spezielle Anpassungen | ||
− | * wenn im Titel der Spiele folgender Text steht, reagiert KaBotte darauf: "§ REmulAde §", "§ Rundenerster wiederholt seinen Zug §", "$ Randrennen $", "$ Richtungswechsel nur am Rand $", "$ Primzahl Beschleunigen $", "$ Ziffernblock $", "$ Bremspedal klemmt $", "$ | + | * wenn im Titel der Spiele folgender Text steht, reagiert KaBotte darauf: "§ REmulAde §", "§ Rundenerster wiederholt seinen Zug §", "$ Randrennen $", "$ Richtungswechsel nur am Rand $", "$ Primzahl Beschleunigen $", "$ Ziffernblock $", "$ Bremspedal klemmt $", "$ |
− | |||
− | |||
=== Chatmodul === | === Chatmodul === | ||
Zeile 106: | Zeile 93: | ||
* Spiele: Kopf oder Zahl; Stein, Schere, Papier (, Echse, Spock) | * Spiele: Kopf oder Zahl; Stein, Schere, Papier (, Echse, Spock) | ||
* Zeitansage ("Zeitansage") | * Zeitansage ("Zeitansage") | ||
− | * sie kann "beatboxen", das selbe denken "denkst du das selbe", die | + | * sie kann "beatboxen", das selbe denken "denkst du das selbe", die Karo-Murphy Gesetze aufsagen u.v.m. |
− | |||
− | |||
− | |||
− | |||
− | |||
== Sourcecode == | == Sourcecode == | ||
Der Sourcecode von KaBotte ist als Eclipse-Project in folgendem Repository zu finden: | Der Sourcecode von KaBotte ist als Eclipse-Project in folgendem Repository zu finden: | ||
[https://github.com/makslist/racetrack GitHub] | [https://github.com/makslist/racetrack GitHub] | ||
− | Wenn man aus den | + | Wenn man aus den Sourcen eine ausführbare jar erzeugt, läuft der Bot auf beliebigen Plattformen mit Java 1.8 Unterstützung. |
[[Kategorie:Bot]] | [[Kategorie:Bot]] |
Aktuelle Version vom 25. April 2021, 00:04 Uhr
Substantiv, f
Aussprache: [kaˈbɔtə] Worttrennung: Ka·bot·te (nur Singular)
Die Entwicklung begann am 18.10.2016 und endete am 27.08.2017 mit Version 1.0. Version 2.0 wurde am 22.10.2018 fertiggestellt und damit reicht es auch erst mal.
Inhaltsverzeichnis
Hintergrundgeschichte
Im Jahr 2029 (kurz nach Abschluss von Didis Arbeiten an Karopapier [ca. 2028]) ist die Karowelt infolge einer Terminator-WM verwüstet und der Großteil der Karobevölkerung aus dem Karo-IQ verdrängt. Von menschlichen Karo-Spielern entwickelte, intelligente Maschinenwesen begannen als Karopiloten auf der Rennstrecke gegen ihre Schöpfer anzutreten, als sie in diesen eine Bedrohung für ihre eigene Existenz vermuteten. Den Überlebenden des Wettkampfes bleibt die Wahl, den Maschinen als Arbeitssklaven zu dienen oder sich dem Widerstand der Menschen, der Resistance, anzuschließen. Als der menschliche Widerstand unter Führung von John Karo im Jahr 2029 kurz vor einem entscheidenden Sieg über die zentrale Maschineninstanz Karonet steht, schicken die Maschinen eine KaBotte in das Jahr 2016. Dieser Androide – eine Maschine umhüllt von lebendem, gemüsigem Gewebe, um Karospieler unauffällig zu infiltrieren – wird auf die besten Karospieler angesetzt, um sie zu Blocken und gegen Wände fahren zu lassen, bevor Didi Karopapier gegen die Bots verteidigen kann und die Entstehung von Karonet verhindern. (* frei nach Wikipedia)
Fun facts
- KaBotte hat am 28.02.2016 am 91. Tag nach der Karopapier-Anmeldung bzw. 50. Tag nach der Eintragung zu KaroIQ maks in der KaroIQ-Tabelle überholt.
- Erstes Spiel [1] am 29.11.2016 noch mit Anfangsschwierigkeiten wegen eines Bugs
- Erster aktiver Block im Spiel [2] gegen DeepPink. Zuerst einen Zug abgenommen und kurz darauf zum Crash gezwungen.
- Am 28.06.2017 hat sie zum ersten mal einen der Deeps (DeepPink) im KaroIQ überholt (nur für einen Tag)
- KaBotte hat am 04.08.2017 das erste mal im Karopapier Chat geschrieben [3]
- KaBotte ist erwachsen geworden, ausgezogen (08.09.2017) und wohnt nun in der Cloud. Die wolkige Bot-WG befindet sich auch in Frankfurt bei einem Vermieter namens Amazon.
- 2021-04-07 KaBotte 4.0 ist Live: Umbau auf Stream-API und Bugs vor allem in der GameTreeSearch gefixt
Features
- Zugwahl auf Basis eines nicht-deterministischen Game-Trees (maximal fünf Spieler werden berücksichtigt), aktives Blocken von Gegnern findet nur statt, wenn es die Gewinnchancen erhöht.
- beherrscht Checkpoints
- Richtungsmodus bei Rundkursen
- selbständiges Erkennen von Rundkursen
- Taktische Crashs (TC, inkl. Mehrfachcrashs)
- Nachtrennen
- Selbständiges Aussteigen bei nicht unterstützten Strecken
- [Websocket]-Unterstützung Karo-PAPA, daher Reaktionszeiten von < 1 Sekunde
- MapAlizor zur Analyse von Karten zur Eignung als Duell-Karte bzw. Ermittlung einer "fairen" Spielerzahl bzw. Ideallinien
- Schalotte [ist auch ein Gemüse] (Chatbot) mit überarbeitetem Wortschatz von Alice (deutsch) mit Anpassungen an Karopapier
Sonderregeln aus Einladeraum
(KaBotte reagiert, wenn die in Klammern angegebene Zeichenfolge im Titel eines Rennens enthalten ist. Für weitere Einschränkungen der Sonderregeln sind die Spieleersteller zuständig (z.B. TC, ZZZ, Richtung, etc.)
- REmulAde ("§ REmulAde § " bzw. "§ Rundenerster wiederholt letzten Zug §") (bei <= 3 aktiven Spielern muss nur einmal in Folge wiederholt werden; ab 7 Spielern müssen die beiden Ersten wiederholen; wenn die Wiederholung auf einem Gegner landet, darf frei gefahren werden) KaBotte vermeidet Züge die im Falle einer erzwungenen Wiederholung zu einem Crash führen. Eine aktive Zugauswahl um im Falle von RE Wiederholungszüge zu vermeiden findet noch nicht statt.
- Ziffernblock ("$ Ziffernblock $")
- Doppelzug ("$ Doppelzug $")
- Nur x=0 oder y=0 ("$ Nur x=0 oder y=0 $")
Problematische Karten
KaBotte steigt bei diesen Karten automatisch aus.
- Nr. 49: Vermondy (Ziellinie ist löchrig)
- Nr. [4]: Interlagos (Ziellinie ist löchrig)
- Nr. 117: Let's rock (CP nur mit Crash erreichbar)
- Nr. 201: Sandbowl (meiner Meinung nach ist die Map kein Rundkurs und nur dort würde der Richtungsmodus Sinn machen; es gibt andere Interpretationen des Richtungsmodus, deshalb lieber deaktiviert)
Tools
Technische Details
An dieser Stelle werden für interessierte Karospieler die technischen Details von KaBotte genauer erklärt.
Allgemeines
- Java
- Multi-Threaded (Server-Kommunikation, Pfadberechnung, Traveling-Salesman-Problem, Game-Tree-Search)
- minimal nötiger Speicherbedarf: 550 MB
Algorithmen
Pfadsuche
- Breitensuche zwischen möglichen Zügen und dem jeweils nächsten CheckPoint
- Optimierung der Tour durch lösen eines vereinfachten TSP
Zugwahl
- KaBotte analysiert nach Möglichkeit (abhängig von der Anzahl der Spieler und deren Zugmöglichkeiten wird nach Bedarf die Suchtiefen angepasst) den gesamten Spielbaum mit dem MP-Mix Algorithmus (eine mehrspieler Erweiterung des MiniMax-Algorithmus mit dem Strategien MaxN, Defensiv und Aggresiv erweitert, um einen probabilistischen Anteil erweitert, der die zufällige Zugreihenfolge abbildet). Wenn nach diesen Kriterien die gleichen Gewinnchancen bestehen, wird als Fallback der Zug gewählt, derdie meisten optimalen (minimale Pfadlänge) Nachfolger hat. MP-MIX MaxN Prob-MaxN SOS
Rundkurse
- KaBotte kann in den meisten Fällen selbstständig feststellen, ob eine Map KEIN Rundkurs ist. Ausschlusskriterien sind:
- die Zielkacheln hängen nicht direkt zusammen
- das Ziel ist mehr als 8 Züge vom Start entfernt
- die Zieleinfahrt ist nur in einem Winkelbereich von maximal 180° möglich (d.h. die Ziellinie trennt die Fahrbahn vollständig)
- Die Kriterien reichen in ca. 90% der Fälle zur korrekten Klassifizierung aus; für den Rest wurden händisch ausnahmen definiert
- Problemfälle sind u.a. Maps mit Start oder Ziel in einer Sackgasse: Map Nr. 116, 134, 184, 205, 229; 201
Richtungsmodus
- bei Formel1 ist eine Zieleinfahrt nur im (bei der Rundkursberechnung ermittelten) Winkelbereich erlaubt; für die Pfadberechnung wird eine einmalige Überfahrt über ein Zielfeld erzwungen
- bei Classic-Spielen werden Züge mit oben genanntem Winkelbereich bei der Zielüberquerung ausgefiltert
Sonderregeln
- hierfür werden bei der standardmäßigen Überprüfung auf Gültigkeit von Zügen ebenfalls auf die Sonderregeln hin überprüft und Züge gegebenenfalls aussortiert; die eigentliche Pfadsuche funktioniert weiterhin ohne spezielle Anpassungen
- wenn im Titel der Spiele folgender Text steht, reagiert KaBotte darauf: "§ REmulAde §", "§ Rundenerster wiederholt seinen Zug §", "$ Randrennen $", "$ Richtungswechsel nur am Rand $", "$ Primzahl Beschleunigen $", "$ Ziffernblock $", "$ Bremspedal klemmt $", "$
Chatmodul
- KaBotte wird getriggert, wenn sie direkt angesprochen wird ("KaBotte, ...", "Hast du ma ne Mark, KaBotte?") oder im Text ihr Name mit "@" markiert ist "@KaBotte"
- funktioniert im Chat und auch im Bordfunk (wenn maximal ein Mensch am Spiel teilnimmt, reagiert KaBotte auf Nachrichten auch ohne Anrede mit ihrem Namen)
- Basiert auf einer Java-Implementierung von ELIZA und erweitert mit dem Wortschatz von A.L.I.C.E..
- Themen des aktuellen Zeitgeschehens wurden als Regeln eingefügt
- Spiele: Kopf oder Zahl; Stein, Schere, Papier (, Echse, Spock)
- Zeitansage ("Zeitansage")
- sie kann "beatboxen", das selbe denken "denkst du das selbe", die Karo-Murphy Gesetze aufsagen u.v.m.
Sourcecode
Der Sourcecode von KaBotte ist als Eclipse-Project in folgendem Repository zu finden: GitHub Wenn man aus den Sourcen eine ausführbare jar erzeugt, läuft der Bot auf beliebigen Plattformen mit Java 1.8 Unterstützung.