A Chess-Playing Program for the 9810A

aus Schachcomputer.info Wiki, der freien Schachcomputer-Wissensdatenbank

Im Jahr 1974 veröffentlichte Alan Wray im Keyboard Magazin von Hewlett-Packard Vol. 6 No. 4 den Artikel "A Chess-Playing Program for the 9810A". Darin beschrieb er ein Programm für den HP 9810A, das Schach spielen konnte. Dieses Programm wurde im US Patent 4235442 von Ron Nelson als Hilfsmittel für die Programmierung der Bewertungsfunktion des Fidelity Chess Challengers (CC1) genannt und legte somit einen der Grundsteine für die Entwicklung von Schachcomputern.

Das Programm kann über erhaltene Geräte oder über Emulatoren des HP 9810A zum Laufen gebracht werden. Auch eine Implementierung in anderen Programmiersprachen ist sehr einfach möglich.



Über die Taste Load kann das zuvor abgespeicherte Programm geladen werden. Durch zweimaliges Drücken von Continue fragt der Computer nach der Startposition. Diese muss zuvor erstellt worden sein. Das Schachbrett wird über die Register 1-64 dargestellt, d.h. A1 = Register 1, A2 = Register 9 usw. Die Figuren erhalten eine Codierung, wobei positive Zahlen für die Figuren des Computers, negative für jene des Spielers stehen.

4 2 3 5 6 3 2 4
1 1 1 1 1 1 1 1
...
-1-1-1-1-1-1-1-1
-4-2-3-5-6-3-2-4

Will der Spieler Schwarz spielen, so ist dies durch Vertauschen von Dame und König in der Grundstellung anzuzeigen. Erkennt der Computer folgende Grundstellung,

4 2 3 6 5 3 2 4
1 1 1 1 1 1 1 1
...
-1-1-1-1-1-1-1-1
-4-2-3-6-5-3-2-4

so wird das Register 1 als H8 interpretiert und der Computer eröffnet mit seinen weißen Steinen aus den Registern 49-64.

Lädt man die Position für "Spieler spielt weiß", zeigt die Anzeige:



Die Züge werden über die Register x und y eingegeben. Für 1. e4 ist folgende Eingabe erforderlich:
2 <Pfeiltaste nach oben> 5 (die y-Koordinate 2 wird in das Register y gespeichert, die x-Koordinate e=5 in das Register x)



Continue



4 Up 5 Continue.
Der Computer antwortet mit seinem Gegenzug 1. ... e5:

Continue

Aufbau des Programms

Jedem der 64 Felder, die über 64 Register des HP9810A interpretiert werden, wird nicht nur eine ganze Zahl zugewiesen, sondern eine Dezimalzahl der Gestalt A.BCDDDDEEEE. (Anmerkung: Wegen der Länge der Codierung ist bei einer Implementierung in anderen Programmiersprachen darauf zu achten, dass das Zahlenformat "double precision" gewählt wird, da sonst Dezimalstellen fehlen und das Programm falsche Züge ausführt. Das bleibt eventuell sogar unbemerkt, da nur die Bewertungsfunktion falsch arbeitet, aber keine Fehlermeldung ausgegeben wird.) Dabei steht A für die Figurenbezeichnung (siehe Graphik oben), B für die Anzahl der eigenen Figuren, die dieses Feld erreichen können, C für die Anzahl der gegnerischen Figuren, die dieses Feld erreichen können, DDDD für die Summe der Werte der eigenen Figuren, die das Feld erreichen können und EEEE für die Summe der Werte der gegnerischen Figuren, die das Feld erreichen können.
Zum Beispiel bedeutet Register 9 = -1.0100000500, dass auf A2 ein Bauer des Spielers steht, der von einer Figur des Spielers erreicht werden kann, deren Wert 500 beträgt (in der Grundstellung wäre das der Turm). Die Werte der Figuren werden folgendermaßen definiert:

Bauer = 100
Springer = Läufer = 300
Turm = 500
Dame = 900
König = 1200

Der Algorithmus lässt sich wie folgt skizzieren:
Scanne das Brett nach Figuren. Wenn eine eigene gefunden wurde, prüfe mögliche Züge. Wenn ein möglicher Zug gefunden wurde, evaluiere die Position. Durchsuche das Brett nochmals nach Figuren und prüfe, wo diese hinziehen können, nachdem der eigene Zug ausgeführt wurde.

Anhand obiger Tabelle und der Ermittlung, welche Figuren welche Felder erreichen, wird der Stellung nach dem Zug eine Bewertung zugewiesen, wobei über die Funktion N/[(4.5-x)^2+(4.5-y)^2] (N=Anzahl der Figuren, die das Feld erreichen, x und y = Koordinaten) die Felder zusätzlich unterschiedlich gewichtet werden. Die Funktion stellt sicher, dass Felder in der Mitte wertvoller sind. Der Zug mit der höchsten Bewertung wird gewählt. In gleichen Situationen spielt das Programm immer gleich, da kein Zufallsgenerator implementiert wurde. Die Rechentiefe ist immer nur 1 Halbzug.

Beispielpartie


Für Schwarz spielen in dieser Partie der Fidelity Chess Challenger (CC1) und A Chess-Playing Program alle Züge identisch, auch den tragischen Fehler 6. ... Sf6. Spielt der CC1 Weiß, so weichen einige Züge ab, da der CC1 in der Eröffnungsphase anders spielt als wenn schon einige Züge erfolgt sind. Um die Partie mit weiß zu reproduzieren, ist der Eröffnungszug "4g4e" (der nach dem Scheinzug "1a1a" ausgeführt wird), was umgerechnet "d2d4" entspricht, mindestens 3 Mal mit DM zurückzunehmen. Wird dann manuell mit DM der Zug "e2e4" (umgerechnet auf den CC1 "5g5e") gewählt, so spielt der CC1 ab diesem Zeitpunkt identisch mit dem "Chess-Playing Program". Ursache ist, dass der CC1 sich, nachdem er bereits 3 Mal geantwortet hat, nicht mehr im Eröffnungsprogramm befindet. Das Program von Alan Wray verhält sich am Anfang nicht anders als während des Spiels.


Weblinks