Hausaufgabe: implementiere Spielbrett und Spieler dafür. Ein Connect-Spielbrett habe ich, siehe unten. Die Gruppe von Prof. Althöfer in Jena beschäftigt sich auch mit Connect, ein Leipziger Programm sollte also demnächst mal gegen ein Jenaer Programm spielen. Interessenten bitte bescheidgeben. Programmierung idealerweise in Haskell, muß aber nicht. Das Jenaer Programm ist es auch nicht. Mein Interface ist darauf vorbereitet, externe Programme aufzurufen.
Einige Links zum Go
Go-Programme sind derzeit viel schwächer als etwa Schach-Programme, weil zwar viel Wissen über das Spiel vorhanden ist, dieses aber bis jetzt wenig formalisiert ist.
Mit dem Spiel Atari-Go kann man das Fangen üben (aber nicht das Gebiet-Machen). Das Ziel im Atari-Go ist es, als erster einen Stein (eine Gruppe) des Gegners zu fangen.
Hausaufgabe: ein Spielbrett-Modul für Go schreiben (d. h. mitrechnen, ob jemand gefangen wird und ob ein Ko geschlagen werden darf) und ein Spieler-Modul für Atari-Go.
Spielziel: fünf Steine eigener Farbe in einer Reihe anordnen (waagerecht, senkrecht oder diagonal).
Vorsicht: auf kleinen Feldern ist das Spiel vollständig gelöst. Viktor Allis hat den kompletten Suchbaum durchmustert (mit viel Rechenkraft). Das heißt aber noch nicht, daß es ideal spielende Programme gibt (die müßten den Baum aufbewahren, aber der ist zu groß).
Ein recht gut spielendes Programm mit ganz einfachem Algorithmus hat jeder auf seinem Rechner, meist ohne daß er es weiß: emacs anschalten und dann Meta-X gomoku.
Aufgaben:
Auch hier gibt es ein sehr gut spielendes Programm, das eine simple Idee verwendet, die schon von Claude Shannon stammt: man betrachtet den Graphen als Widerstandsnetzwerk und rechnen den Knoten/Kante aus, über den der meiste Strom fließt, und setzt dort.
Aufgaben
Spielziel: zwei gegenüberliegende Seiten verbinden oder einen geschlossenen Kantenzug erreichen.
Jetzt geht das nicht mehr so einfach mit den Widerständen, denn selbst eine in drei Zügen drohende Oben-Unten-Verbindung kann durch eine Folge von Kleinen-Kreis-Drohungen zunichte gemacht werden. Es ist nicht klar, wie die beiden Gewinnmöglichkeiten bei der Suche berücksichtigt werden sollten.
Aufgaben
Wir benutzen dabei FiniteMaps. Wir sehen hier, wie das benutzt wird, um den Spielzustand zu verwalten, und hier, wie das als Instanz von Brett und Bild verkauft wird.