| neue Message hinzufügen |

Karaser 2017-10-16 16:57:04
Der Nudelanteil ist zwar noch nicht ganz weg, die alte Version läuft aber erst mal wieder, sodass er nicht ewig die Spiele blockt...

Karaser 2017-10-13 22:24:26
Da ich intern den Spaghetticode entfernen muss bevor ich weitermache wird der Bot die nächsten Tage erst mal nicht weiter ziehen. Wenn der Nudelanteil dann weg ist dann geht es weiter...

Karaser 2017-10-13 11:56:05
Mittlerweile läuft der Bot im Testbetrieb, er ist einladbar und fährt so mittelprächtig, aber wer will kann ja einfach ein paar Spiele mit ihm erstellen...

Genaueres auf der Wikiseite:
http://wiki.karopapier.de/Roboturnist

Crashs vermeiden Karaser 2017-06-08 23:07:00
Und um den Punkt mit den Crash zu vermeiden, hatte ich auch berlegt, dass man sich die Crashdetektion irgendwie bei Didi abschaut, also dass man in der neuen Ansicht schaut, ob das Fekd "rot" ist. Dann wird darauf einfach nicht gezogen.
Wie man das genau hingetrickst bekommt muss man schauen...

Karaser 2017-06-08 22:52:45
zu Sly:
Warum sollte ich die Bots nicht mit einbeziehen?
Bei deinen anderen 2 Punkten hast du sehr wohl Recht. Ich möchte am Ende eine Methode haben, die die Situation des passenden Spieles mit der tatsächlichen Spielsituation vergleicht und daraus einen Gewichtungsfaktor berechnet, da werde ich das miteinberechnen müssen.

Zum Einlesen der Daten:
Erstmal danke für die Links!
Für mich stellt sich nur die Frage, wie man das denn am geschicktesten einliest. Ich habe es zwar geschafft mir das als Text ausgeben lassen, aber gerade bei JSON (das ist ja denke ich der Witz an dem Format!?) müsste es doch möglich sein, dass direkt in Objekte zu kopieren, oder? Hab dazu nichts vernünftiges im Netz gefunden.
Das aus dem Text rauszufriemeln wird ja nicht der kanonische Weg sein, oder?

Sly 2017-06-07 15:50:51
ich würde
- Bots nicht einbeziehen
- Züge, in denen jemand auf einem potentiellen Feld stand überhaupt nicht oder nur mit geringer Gewichtung einbeziehen
- Spieler, die einen Crash hingelegt haben komplett rausnehmen. Du weist ja ohne Wegsuche nicht wann sie Ihn hingelegt haben.

Zu deinen Fragen (Alles zwischen "<" und ">" bezeichnet eine Variable):
Wie lese ich die Spieldaten ein:
KaroAPI - http://www.karopapier.de/KaroApiBrowser.php:
https://karopapier.de/api/games/<GID>/details - bpsw. https://karopapier.de/api/games/97916/details
Bei der info bekommst du nicht alle Züge.

Du musst hier wahrscheinlich die Nummern der Spiele ausprobieren, da es keine einheitliche Liste aller beendeten Spiele gibt.

Bei json->players[<nr>]->moves stehen alle Züge der Mitspieler.
Steht dort irgendwo "c": true, so ist derjenige dort gecrasht.
x,y: Zielkoordinaten
xv, yv: gefahrener Vektor.
Startpunkt ist also x-xv, y-yv

Die Netzwerkkommunikation kannst du ganz einfach über die curl-Funktion die eigentlich jede vernünftige Programmiersprache hat ohne große Probleme realisieren, den Output abzüglich header übergibst du an einen JSON-Parser.

holen der logs nobody 2017-06-07 15:46:05
habe ich glaube ich von kili "geklaut" bzw. bekommen:

sed 's@.*@http://www.karopapier.de/logs/&.log@' games | xargs wget -c

"games" ist eine Datei, die die gewuenschten game-IDs enthaelt, eine pro Zeile, wenn Du alle willst, geht das bestimmt auch. Oder Du wendest Dich mal an aristarch und kili, die machen das auf dem toten Papagei sowieso schon :-)

Wundersam, aber funktioniert. Dann hast Du pro Spiel eine Datei mit den Zuegen. Die kann aber manchmal auch "fehlformatiert" oder "kaputt" sein...

Die kannst Du dann geeignet parsen und einlesen, ich hab die einfach alle aneinandergehaengt und jaaa, ich gebe es zu, in excel in eine Tabelle eingelesen und dann munter ausgewertet :-)

Gruss,

nobody

Roboturnist Karaser 2017-06-07 15:37:03
Die Idee, einen Bot zu bauen, der sich auf Basis aller bereits auf Karopapier gemachten Züge seinen Weg berechnet, ist ja nicht so neu, ich habe die schon immer mal wieder aufgeworfen, bestimmt hatte die auch vor mir schon wer anderes, wie auch immer
Bis jetzt hat das keiner gemacht. Und da ich jetzt auch seit April eine Anfängervorlesung Informatik habe, bin ich größenwahnsinnig geworden und muss das ändern!

Ganz grobe Idee wie ich das machen möchte:

1. Der Bot holt sich erst einmal alle gamelogs mit allen einzelnen Zügen. (außer welche mit "§" oder "Sonderregel"/"Einladeraum" im Titel)
2. Der Bot sucht sich aus den (100.000) Spielen erst mal die aus, die überhaupt passen, also Karte, Richtungsmodus, CPs wie im Spiel, in dem er ziehen soll. Das reduziert die Zahl der Spiele denke ich schon mal um den Faktor 100-300 oder mehr.
3. Der Bot sucht in den nun vorliegenden Spielen nach Situationen, die seiner derzeitigen Lage am nächsten kommen und gewichtet sie.
     Kriterium a: Geschw.-Vektor + Ortsvektor
     Kriterium b: "Umfeld", also z.B. wo befinden sich andere Karonauten?
4. Die jeweiligen Folgezüge der Situation werden mit Gewichtungsfaktor auf mögliche Zugpositionen berechnet (ähnlichere Situationen zählen "mehr")
5. Auf das Feld mit dem größten Wert wird gezogen.

Kritischer aber auch spannendster Punkt ist natürlich Nr. 3, hier muss man halt die Situationsbezogenheit abwägen, dass der charakteristische Einzelfall zwar mehr gewichtet wird, aber auch nicht so stark, dass es nur von einem ganz bestimmten Zug abhängt.

Mit dieser Vorgehensweise wird kein perfekter Bot entstehen, aber das ist auch nicht Sinn der Sache. Viel eher soll ein "durchschnittlicher" Bot entstehen, der ungefähr so wie der Durchschnittskaronaut zieht.

Die Zahl der Daten könnte ein Problem darstellen. Bei Karten wie der MID=1 ist es sicher kein Problem, da sie sehr häufig befahren wird und auch nicht sehr groß ist. Bei z.B. der CS-Kurve oder Karten wie aris arielle kommt es aber sicherlich vor, dass er früher oder später auf einem Feld mit einem Vektor landet, den vorher nie ein anderer hatte. Dann steht der Bot halt dumm da.
Dann müsste man entweder den 3. Punkt toleranter machen, dass er auch Züge miteinbezieht, bei der der Richtungs- und Ortsvektor sich nur ähneln, oder er soll versuchen möglichst schnell auf eine bekannte Linie zu stoßen.
Einen "echten" Wegsuchalgorithmus als Fallback möchte ich nicht machen. (das alleine macht ja schon ziemlich viel Arbeit)


Da ich wie schon erwähnt habe relativ wenig Erfahrung habe, bin ich für Tipps und Hilfen dankbar.
Insbesondere:
1. Wie lese ich die Spieldaten vom Server ein? Ich habe sowas noch nie gemacht. nobody hat das doch schon mal für die Randnotizen ausgewertet, wie genau?? :-)
2. Den oben beschriebenen Ablauf finde ich spannend und habe auch Motivation, das irgendwie umzusetzen. Aber vielleicht kann mir einer von euch Bötterschmieden ja die Netzwerkkommunikation abnehmen, darauf habe ich nämlich weder Lust noch wirklich Erfahrung. Das sollte sich ja mehr oder weniger von anderen Bots kopieren lassen, oder?

Ich danke schon mal im Vorraus, bei der Namenssuche habt ihr ja schon mitgeholfen! (der Name Roboturnist ist auch noch nicht endgültig)

Grüßle,
Karaser

| neue Message hinzufügen |
| Anfang | Vorherige | Nächste |

Brought to you by Didi

Letzter Satz im Chat:
Didi (2:27): Dann warne ich halt jetzt mal vorübergehend bzw. blende den Rat von Internetexpertenrauen ein, vielleicht hiflt das ja...