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…
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
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.
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? <_<
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!
Ob das in Java auch geht weiß ich nicht, ich weiß nur, dass in C++ das mit etwas Aufwand durchaus geht. 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.
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?
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.
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…