Kalah Turnier

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Kalah Turnier
Ich hab mal die pdf auf studOn und das .git repository für’s framework geupdated (README beachten!). Mir ist eingefallen dass eine unbeschränkte init-Funktion es erlauben würde, direkt am Anfang den gesamten game tree zu berechnen, weshalb ich jetzt einen time-constraint eingeführt habe: init-Funktionen haben 10 sekunden, die move-Funktionen jeweils 5 sekunden. Andernfalls sitzt man ne halbe stunde da und wartet bis das spiel losgeht… :smiley:


Kann man sich auf eine bestimmte Spielfeldgröße oder eine grobe Vorgabe und eine bestimmte Anzahl an Spielsteinen verlassen?


Ziemlich bewusst nein; ich würde wohl mal mit (3,3) anfangen und dann hochgehen… (20,20) oder so würd ich nicht ausschließen wollen, und sei’s nur als tie-breaker :wink:


Oke. Und ist Multithreading erlaubt?


Weder Multithreading, noch multiprocessing ist erlaubt. Prinzipiell würde es vielleicht „gleich fair“ bleiben, wenn multithreading für jeden erlaubt wäre, weil man ja abwechselnd zieht, aber der Fokus soll ja auf den Algorithmen/Heuristiken/Zügen/etc. liegen und nicht darauf ein möglichst gut paralellisiertes Programm zu schreiben. :smiley:


Multithreading würde ich vermutlich auch nicht viel bringen, ich hab nur 4 kerne :smiley:


Man könnte zumindest während des gegnerischen Zuges selber weiter überlegen. Das macht der Mensch bei einem Brettspiel auch.
Andererseits könnte man auch versuchen zu schummeln, indem z. B. mit hoher CPU- und I/O-Last der Gegner über das Zeitlimit gebracht wird.

Apropos Schummeln, ist die Verwendung von Runtime Reflection erlaubt? <_<


Ich sehe nicht warum nicht, aber auch nicht warum dir das helfen sollte…?


Er meint das nicht so… (Pff mathematiker… Dennis du weißt wies gemeint ist, als „Rache“ für neulich :P) Runtime Reflection ist natürlich je nach anwendungsgebiet erlaubt/sinnvoll. Aber wer jetzt anfängt irgendwelche gegnerische Züge vorauszuberechnen (indem man die gegnerische funktion aufruft…) geht den falschen Weg! Bitte seht es als „echten“ Wettbewerb innerhalb der KI-Vorlesung und bitte macht nur das was eindeutig nichts ausnutzt, was man in einem echten wettbewerb nicht auch hat… Wir sind ja hier nicht im Hacker-Praktikum! :smiley:


ich sähe gar nicht wie das möglich wäre - selbst mit runtime reflection sollte der gegnerische agent gar nicht accessible sein… :smiley:


Ob das in Java auch geht weiß ich nicht, ich weiß nur, dass in C++ das mit etwas Aufwand durchaus geht. :smiley: Vielleicht will man auch einfach nur die play-Methode für den Gegner mit einem vorbestimmten Zug aufrufen, man weiß nicht. Lieber einmal zu viel sagen, dass es um den Spaß geht und um den Algorithmus an sich als zu wenig.
Nichts desto trotz solange jeder auf seiner Seite des Spielbretts bleibt, ist alles gut. :smiley:

Wertebereiche
Servus zusammen,

vorsichtige Frage: können wir davon ausgehen, dass es kein größerers Spiel als (127,127) gibt? Und wenn nicht, welche obere Grenze gilt dann? :wink:

Danke!


xD ich glaub die annahme ist fair, ja ^^


Sorry falls das in einem der 1000 anderen Threads gesagt wurde, aber diese Woche finden - bis auf das Turnier am Donnerstag - keine Uebungen statt, oder?


Richtig; und Donnerstag ist auch weniger Übung als auswertung :smiley:

Ihr könnt aber natürlich fragen zu blatt 7 stellen o.ä.


Findet dann das gesamte Turnier während der Übung statt? Dann wären ja größere Spiele rein zeitlich kaum möglich…


Ich glaube nach den Tests heute sind wir uns einig, dass das ganze Turnier durchspielen wenig Sinn macht am Donnerstag. Ich denke wir werden das ähnlich wie heute machen:

Ein paar „total abgefahrene“ Bretter bespielen (z.B. Kalaha(30,5) o.ä.), zwei ausgesuchte Agenten gegeneinander antreten lassen und ähnliches.
Wenn ich das richtig verstanden habe wollte Dennis sogar ein paar Ergebnisse vor Donnerstag sammeln (ala wer ist im Moment der beste etc.). Aber da soll er am besten selbst was zu sagen. :smiley:

Jedenfalls wenn noch deutlich mehr als 2 Agenten hinzukommen, wird das 6,6 Turnier wohl nicht innerhalb einer Übung fertig.


Jo, meine momentane Überlegung geht in die Richtung morgens mit (6,6) und (8,8) Felder anzufangen, Agenten ausscheiden zu lassen und es auf die top 3 zu reduzieren - dann können wir die topplatzierten in der Übung gegeneinander antreten lassen. Abhängig davon wie deutlich sich die Agenten jeweils von den “schlechteren” absetzen halt…


Wir würden uns über einen Liveticker von Zeit zu Zeit freuen :smiley:

2 „Gefällt mir“