Schach in Delphi. Wie ich das Rad neu erfunden habe

Das Schreiben von Spiel-KI ist sehr interessant und aufregend - ich war mehr als einmal aus eigener Erfahrung davon überzeugt. Nachdem ich kürzlich versehentlich auf den Code meines alten Schachprogrammprojekts gestoßen war, habe ich beschlossen, ihn ein wenig zu ändern und auf GitHub zu stellen . Und erzähle gleichzeitig, wie es geschaffen wurde und welche Lektionen es mir dabei beigebracht hat.





Start

Es geschah im Jahr 2009: Ich beschloss, ein einfaches Schachprogramm zu schreiben, um die Entwicklung der Spiel-KI zu üben. Ich selbst bin kein Schachspieler und ich würde nicht einmal sagen, dass ich ein Schachliebhaber bin. Aber die Aufgabe für das Training ist durchaus geeignet und interessant. Außerdem war ich beim Schachspielen auf dem Brett oder im Programm immer neugierig, warum dieser oder jener Zug stärker ist als der andere. Ich wollte den gesamten Baum der Entwicklung von Schachpositionen klar sehen können. Ich habe eine solche Funktion in anderen Programmen nicht gesehen - warum also nicht selbst schreiben? Nun, da dies Training ist, müssen Sie von Grund auf neu erfinden und schreiben, nicht andere Algorithmen lernen und ihre eigene Implementierung schreiben. Im Allgemeinen denke ich, dass Sie in drei Tagen eine funktionierende Version verwalten und erstellen können.





Erste Version

In der Regel verwenden Schachengines DFS mit Verzweigung und Grenzen, um die Suche einzugrenzen. Da dies jedoch nicht sehr klar ist, wurde entschieden: Wir werden unseren eigenen Weg gehen - lassen Sie es eine Breitensuche in einer festgelegten Tiefe sein. Dann wird es einen vollständigen Suchbaum im Speicher geben, der irgendwie visualisiert werden kann. Und finden Sie auch heraus: a) Bis zu welcher Tiefe kann ein Schachspiel im Rahmen der verfügbaren CPU- und Speicherressourcen berechnet werden, b) wie gut oder schlecht wird ein solcher Algorithmus spielen?





Ich muss sagen, dass ich zu dieser Zeit einen 2-Core-Prozessor mit 2 oder 4 GB Speicher (ich erinnere mich nicht genau), 32-Bit-Windows und einen 32-Bit-Turbo Delphi Explorer-Compiler hatte. Wenn also die Laufzeit noch irgendwie geopfert werden konnte, war der für den Prozess verfügbare Speicher auf 2 GB begrenzt. Ich wusste nichts über das PE-Flag, das den Benutzerspeicher auf 3 GB erweitert. Da jedoch sowohl das System als auch Delphi und andere Programme Speicher belegen, steht weniger als ein Gigabyte für Schach zur Verfügung, um nicht in den Austausch zu gehen.





Das Ergebnis war die erste Version des Spiels, die aus folgenden Modulen bestand:





  • Benutzeroberfläche - das Hauptfenster, in dem eine Tafel mit Formen gezeichnet wird.





  • Spielelogik - Zusammenstellung einer Liste möglicher Züge, Ausführen eines Zuges, Erkennen des Spielendes.





  • AI: Score ist die Bewertungsfunktion der Position.





  • AI: Brute Force - Breite erste Suche in einer Warteschlange.





  • UI: - , .





:





  • 3 - , - 5-15 . 4 . .





  • 3 - " ": - , "" , "". . , .





  • , , .





, : , . .





- . - - , - - . , .





:





  • :





    • : - 3, - 5 .. - 1, .





    • , , ( ). .





    • . - . ! - . - . 1-2 .





    • : . AI , .. , .





  • = (white_rate - black_rate) * (1 + 10 / (white_rate + black_rate)). , , - , .





, , . - , . - 1, - 0.4, - . .





, - .





:





  1. 3 ( ).





  2. .





  3. - .





  4. : .





  5. : . 2.





:





  • - .





  • - .





  • - .





. , : . : ?





: - . - . - -. , 64- . 264, , 232, - - - .





"" 30-45%, 80-90%, 5-10 , . !





?

, - 2- , . , , - . :





  • AI - CPU .





  • ?





  • AI . ?





  • : . , . , , . .





, "" . , .





, - . :





  • : 8-, 2- CPU, .





  • 64- : , , x64. , ! x64 , x86 5-10% . 64- Delphi , .





  • : 32- PE- . , 1 - - "" . .





  • : , . - , . - , , . . , - , . .





  • . - . , . .. .





  • . . - . , , , .





  • . - . ? , .





AI , . AI chess.com , 1800-1900. , !





Das Programmieren von Spiel-KI macht süchtig: Sie wollen es immer besser machen. Und obwohl ich noch viele Ideen für die weitere Entwicklung habe, kommt der Moment, in dem ich aufhören muss. Ich denke es ist gekommen. Wenn jemand möchte, kann er meinen Code nehmen, herumspielen, experimentieren und etwas implementieren. Glücklicherweise ist Delphi jetzt dank der kostenlosen Community Edition für alle verfügbar, ganz zu schweigen von dem kostenlosen Free Pascal und Lazarus. Der Projektcode (sowie der kompilierte exe-shnik) können hier übernommen werden (zum Kompilieren benötigen Sie auch etwas von https://github.com/Cooler2/ApusGameEngine ). Vielen Dank an alle, die es gelesen haben.








All Articles