Schach Bot programmieren

Ich habe mir in letzter Zeit sehr viele Gedanken zum Thema Schach Bot gemacht.
Kleine Erklärung, mit Schach Bot meine ich den Computer Gegner, den man beim Schach spielen hat.
So einen Bot zu programmieren ist sehr schwer und man braucht viele Daten dafür – glaube ich (!).
Ich kann das Beispiel leider nicht beim Namen nennen, aber mir ist ein Schach Simulator bekannt, der bis zu 8 Millionen Schach Partien gespeichert hat und der Bot, gegen welchen man spielen kann, beruft sich auf diese Daten. Die Partien sind warscheinlich auf Servern gespeichert. Ich kann mir zumindest nicht vorstellen, dass es lokal gespeichert wird.
Ich finde das ist ein schönes Beispiel dafür, wie man einen Bot programmieren kann.
Wenn man also eine Funktion hat wie

getActualPosition(%Figur%, %Stelle%);“

Und diese in einer anderen Funktion auf eine Figur bezieht sprich:

„string finalPosition(char, int){
   for (int i = 0; i < 2; i++) {
      sb1[ i ] = getActualPosition(sb1, i);
   }
return sb1;
}“

Sodass das Ergebnis etwa so aussieht:

„sb1 [2] = { ‚A‘, 2 };“

Wer nun nicht weiß, was ich oben mit „%Stelle%“ meinte, damit habe ich der Funktion mitgeteilt, ob sie nun einen Buchstaben (sb1, 0) oder eine Zahl (sb1, 1) zurück liefern muss.

Natürlich könnte es sein, dass es auch einen anderen Algorithmus gibt, aber dieser sollte auch in etwa funktionieren

Verbesserungen, Mitleid oder Glückwünsche, einfach kommentieren.

4 Gedanken zu „Schach Bot programmieren

  1. Zu den Schach-Computern: Heutzutage sind Schach-Engines üblich, die weitaus mehr Partien als nur 40.000 bieten. Mein bevorzugter Schach-Computer – Shredder Chess – hat allein 16 Millionen Züge in seiner Eröffnungsdatenbank. Für’s Endspiel steht online eine Datenbank mit 1200 GB Daten zur Verfügung. Das sind dann auch lediglich Daten, die zusätzlich in die Berechnungen der Engine einfliessen. Und bedenkt man, in wie wenig Speicher man eine einzelne Schach-Partie packen kann, kann man sich ausmalen wie viele Datensätze heutzutage von Schach-Computern genutzt werden und wie viele Partien die bereits kennen.

    Die einfachste Darstellung einer Schach-Partie sieht so aus:
    1.d4 d5 2.c4 Nf6 3.cxd5 Nxd5 4.Qc2 c6 5.Qa4 e6 6.Qc4 Bb4+ 7.Nc3 Qd6 8.g3 b5 9.Qd3 Nd7 10.Qc2 Bxc3+ 11.bxc3 c5 12.dxc5 Nxc5 13.Rb1 a6 14.c4 bxc4 15.Qxc4 O-O 16.Qg4 Nc3 17.Rb2 f5 18.Qh4 Bd7 19.Qh5 N5a4 20.Rd2 Qc7 21.Rd3 Ne4 22.f3 Qxc1+ 23.Rd1 Qc3+ 24.Rd2 Qxd2# 0-1

    40.000 dieser Partien würden im einfachsten Fall gerade mal 10 MB Speicher benötigen. Leicht zu überprüfen mit folgendem Einzeiler für Linux: perl -e ‚print „hier die partie daten einfuegen\n“x40000;‘ > test.db && ls -lh test.db

    1. Obwohl ich mir auch gut vorstellen kann, dass der Computer dafür relativ lange braucht, oder? Schließlich ist es eine große Datenmenge die durchstöbert wird!

      1. Da das Format sehr einfach ist, ist auch die Indizierung dieser Daten ziemlich simpel. Das sorgt dafür, dass eine entsprechende Datenbank sehr schnell durchsucht werden kann. Ausserdem müssen ja nicht immer alle Datensätze durchsucht werden sondern nur jene, die für die aktuelle Spielstellung relevant sind, die also ähnliche Spielstellungen aufweisen. Die Geschwindigkeit ist daher immer noch besser als die, die ein menschlicher Spieler zu leisten vermag.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.