| 1. Frage: |
Frage:
Willkommen bei der ersten künstlichen Kopfnuss der Entwickler-Ecke!
Dabei bezieht sich "künstlich" nicht nur auf die Nuss, sondern auch auf den Kopf. Denn dieses Mal geht es darum, eine KI zu schreiben, die in einem Spiel gegen andere KIs antritt. Eure KI ist dabei in einen Client eingebettet, welcher über einen Server mit anderen Clients im Wettbewerb steht.
Das ganze funktioniert in zwei Phasen:
Phase 1 - Übungsphase
In dieser Phase schreibt Ihr Eure KI und testet sie, indem Ihr sie gegen die KIs anderer Benutzer antreten lasst. Dazu wird der EE-Server benutzt. Um Euch den Start zu vereinfachen und damit Ihr Euch auf das Schreiben der KI konzentrieren könnt, haben Kha und Martok zwei Clients (einer für C#, einer für Delphi) bereitgestellt, in die ihr nur noch Eure KI einbetten müsst.
Wichtig: Damit Euer Client mitspielen kann, muss er einmalig beim Team der EE registriert werden. Dazu schreibt Ihr eine PN an Christian S. und erhaltet von ihm einen Namen und einen geheimen Schlüssel für Euren Client. Das dient dazu, damit keine zwei Clients denselben Namen verwenden.
Phase 2 - Turnierphase
Am Ende des Gewinnspiels sendet Ihr Euren Client inklusive Quellcode an nusski@entwickler-ecke.de. Dann treten die Clients in einem Turnier auf einem lokalen Server bei einem Teammitglied gegeneinander an. Jeden Tag findet eine Runde statt. Am Ende der Runde werden Sieger (die also eine Runde weiter sind) und Verlierer bekannt gegeben, außerdem die Replays der Spiele veröffentlicht.
Die von Euch eingesendeten Clients müssen, wie die Standardclients es tun, dabei folgende Voraussetzungen erfüllen:
- Es dürfen keine vorausberechneten Daten mitgeliefert werden, auch nicht in Form klar autogenerierten Codes.
- Die URL des Servers muss leicht konfigurierbar sein (d.h. einfach im Quelltext, einer Konfigurationsdatei oder GUI auffindbar)
- Ein Timeout für die KI (also wie lange die nachdenkt) muss ebenso leicht konfigurierbar sein. In der Übungsphase solltet Ihr ein Timeout von 10 Sekunden benutzen, das Timeout für die Turnierphase wird kurz vor Ende der Übungsphase bekannt gegeben. Ob ein Client sich ans Timeout gehalten hat, wird übrigens nur im Turnier und dort erst nach Ende eines Spiels geprüft. Das Spiel wird also durchgespielt und hinterher geguckt, ob sich alle an die Regeln gehalten haben.
- Der Client muss Spiele entweder automatisch initiieren oder das Initiieren von Spielen muss einfach möglich sein.
Folgende Präzisierung wurde am 17.04.2011 veröffentlicht:
- Die KI darf maximal zwei Threads benutzen. Für GUI, Kommunikation mit dem Server oder Timing sind drei weitere Threads erlaubt.
- Vorberechnete Strukturen sind erlaubt, sofern sie keine Strategieinformationen enthalten.
- Wenn die KI vor dem Zeitlimit fertig ist, darf sie gerne noch weiterrechnen. Der Client darf nich weiter rechnen, wenn er nicht mehr dran ist!
- Ihr müsst Euch mit 500MiB Arbeitsspeicher begnügen.
- Ihr habt keine Schreibrechte auf die Festplatte
- Ihr dürft keine Thread- oder Prozessprioritäten verändern.
- Ihr dürft nicht in fremde Prozesse eindringen.
- Der Quelltext muss lesbar und kommentiert sein. Von den drei Bestplatzierten wird der Quelltext veröffentlicht.
Die Regeln für das Spiel lauten wie folgt (Zitat aus dem Server-Protokoll, s.u.):
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Das Spiel wird auf einem Spielfeld mit 9x9 quadratischen Feldern gespielt, welche wie beim Schach mit Buchstabe und Zahl ("c9") identifiziert werden. Einige Felder des Spielfleds sind nicht begehbar, diese werden bei Beginn des Spiels bekannt gegeben.
Es gibt zwei Spieler, Weiß und Schwarz. Jeder Spieler hat zu Beginn zwei Steine in diagonal gegenüber liegenden Ecken des Spielfeldes: Weiß bei a1 und i9, Schwarz a9 und i1.
Schwarz beginnt das Spiel. Jeder Spieler kann pro Runde einen Stein ziehen. Ein Stein kann ein oder zwei Felder weit gezogen werden, diagonale und horizontale/vertikale Züge gelten als gleich weit. Es ist nicht möglich, Kombinationen aus diagonal/geraden Zügen (vgl. Pferd beim Schach) zu machen.
Wird ein Stein ein Feld weit gezogen, wird er damit "kopiert", dass heißt auf das Zielfeld wird ein neuer Stein gelegt, der Alte bleibt auf seinem Feld. Bei einem Zug um zwei Felder wird der Stein verschoben.
Nach dem Zug werden alle feindlichen Steine, die auf an das Zielfeld grenzenden Feldern liegen, zur Farbe des Spielers konvertiert.
Das Spiel endet, wenn alle Felder belegt sind. Gewonnen hat der Spieler, der die meisten Felder belegt hat. Das Spiel endet auch, wenn einer der Spieler keine Steine mehr hat; dann gewinnt automatisch derjenige, der noch Steine hat. |
Um loszulegen, braucht Ihr nun nur noch folgende Infos:
Ach ja, da war noch was:
Der Server unterstützt auch Replays von alten Spielen. Es ist nicht Teil der Paranuss, aber Ihr könnt ja mal schauen, wer den schönsten Replay-Client schreiben kann. Dazu braucht man übrigens keine Registrierung beim Team, sodass auch jemand einen Replay-Client schreiben kann, der am Rest der Nuss nicht interessiert ist
Und nun: Auf geht's!
Antworten:
- Ja, ich habe meinen Quelltext abgeschickt!
|