eine XiangQi-Engine (Chinesisches Schach) für XQWizard mit starker KI
Chinesisches Schachspielprogramm ElephantEye (Elephant Eye) Version: 3.15
Xiangqi Encyclopedia Network* März 2008
(* E-Mail: [email protected])
1. Einführung
ElephantEye ist ein kostenloses chinesisches Schachprogramm. Unter der Voraussetzung, dass es der GNU Lesser General Public License folgt, können Schachbegeisterte und Programmierer ElephantEye und sein Quellprogramm frei nutzen.
Der chinesische Name von ElephantEye ist „Elephant Eye“, was zusammen mit den „Pferdebeinen“ und dem „Kanonenrahmen“ die „dritte Dimension auf dem Schachbrett“ des chinesischen Schachs darstellt. ElephantEye wird normalerweise in Verbindung mit ElephantBoard verwendet, einer Software zur Bearbeitung von Schachaufzeichnungen, was bedeutet, dass man einen klaren Plan hat (Board bedeutet auf Englisch „Brett“). (Hinweis: ElephantBoard wurde jetzt in „Chess Wizard“ umbenannt.)
2. Motorvereinbarung
ElephantEye unterstützt UCCI 3.0. Benutzer von Light Red Xiangqi können die ElephantEye-Engine über den UCCI-Engine-Adapter (UCCI2QH) aufrufen.
(1) Die unterstützten UCCI-Befehle sind:
ucci
setoption...
position {fen <fen_str> |. startpos} [moves <move_list>]
banmoves <move_list>
gehen [überlegen |. zeichnen] ...
nachdenkenhit [zeichnen] |. stopp
probe {fen <fen_str> |. startpos} [moves <move_list>]
aufhören
(2) Die UCCI-Informationen, die zurückgegeben werden können, sind:
id {name <engine_name> |. copyright <copyright_info> |.
Option...
ucciok
Info...
{nobestmove |. bestmove <best_move> [nachdenken <ponder_move>] [zurücktreten]}
pophash [bestmove <best_move>] [untere Grenze <Wert> Tiefe <Tiefe>] [obere Grenze <Wert> Tiefe <Tiefe>]
Tschüss
3. Parametereinstellungen
Als UCCI-Engine verfügt ElephantEye über mehrere einstellbare Parameter (kann direkt im <Schachassistenten> eingestellt werden).
(1) Startbibliothek:
Die Standard-Eröffnungsbibliothek ist BOOK.DAT im aktuellen Verzeichnis des ElephantEye-Programms (ELEEYE.EXE), die 10.000 symmetrische Positionen enthält.
(2) Bedenkzeit:
Die Denktiefe einzuschränken ist normalerweise keine gute Wahl. Es wird empfohlen, ein Zeitlimit festzulegen und das Programm die Zeit automatisch zuweisen zu lassen. Beim Lösen eines Killerspiels oder beim Analysieren einer Situation kann das Programm unbegrenzt denken und jederzeit mit dem Denken aufhören.
(3) Ersatztischgröße:
Obwohl die Größe der Ersatztabelle kaum Einfluss auf die Laufgeschwindigkeit des Programms hat und die Standardeinstellung von 16 MB ausreichend ist, bietet ElephantEye dennoch die Funktion zum Festlegen der Größe der Ersatztabelle. Wenn der Speicher es zulässt, können Sie die Auswechslungstabelle bei langsamem Schach entsprechend vergrößern. Es wird jedoch empfohlen, die Hälfte des physischen Speichers nicht zu überschreiten.
(3) Maßschneiderung:
Um die Programmabläufe zu beschleunigen, verwendet ElephantEye standardmäßig leere Ausschnitte und die Möglichkeit negativer Auswirkungen ist minimal. Nur die niedrigste Stufe deaktiviert das Zuschneiden von Leerzeichen.
(4) Wissensstand:
Der Wissensumfang hängt von der Genauigkeit der Situationsbewertung ab. Nur die unterste Ebene verwendet die Situationsbewertungsfunktion nicht (nur der Wert der Unterleistung wird nicht berücksichtigt). auf dem Wissen der Überprüfung, um die Position zu analysieren usw. In dieser Situation können Sie diese Einstellung ausprobieren.
(5) Zufälligkeit:
ElephantEye bietet 4 Zufallsstufen. Je größer die Zufälligkeit, desto wahrscheinlicher ist es, dass das Programm einen Zug ausfindig macht, der seiner Meinung nach nicht der beste Zug ist, aber „nicht der beste Zug“ ist nicht ohne Vorteile, insbesondere wenn die Eröffnungsbibliothek nicht aktiviert ist, wodurch der Zug entsprechend erhöht wird Durch Zufälligkeit kann vermieden werden, dass das Programm in derselben Situation denselben Zug ausführt.
4. Regeln
Ab Version 2.0 unterstützt ElephantEye nicht nur die Regel der „einseitigen langfristigen Entscheidung zum Verlieren“, sondern unterstützt auch die „langfristige Entscheidung zum Verlieren“. Aufgrund der begrenzten Programmkomplexität werden nur die folgenden drei Situationen als „Fang“ erkannt:
A. Pferde und Streitwagen oder Artilleristen (Bauern) mit Wurzeln;
B. Karren und berittene Artilleristen (Bauern) mit Wurzeln;
C. Cannon erobert Streitwagen oder festgefahrene Kavallerie (Bauern).
Obwohl ElephantEye in komplexen Situationen möglicherweise nicht in der Lage ist, lange Bewegungen richtig zu identifizieren, da es den UCCI-Befehl banmoves... unterstützt, kann der Benutzer, sobald er denkt, dass die Engine „lange Bewegungen“ gesperrt hat, die Funktion „set ban“ von verwenden <Schach-Assistent> Lassen Sie die Engine kräftig wechseln.
5. Spielalgorithmus
ElephantEye ist ein Brute-Force-Schachprogramm, das strenge und effektive Spielalgorithmen verwendet:
(1) Generator mithilfe von Bitzeilen und Bitspalten verschieben:
Bitreihen (BitRanks) und Bitspalten (BitFiles) sind förderlich für die Generierung von Bewegungen gleitender Schachfiguren (Autos und Kanonen) (insbesondere Bitreihen und Bitspalten können Nachschlagetabellen anstelle von Schleifen auf Strahlen verwenden). In ElephantEye kommt die Technologie der Bitreihen und Bitspalten nicht nur im Zuggenerator zum Einsatz, sondern auch bei der Festlegung des Pinnings.
(2) Statische Situationssuche:
Bei einer statischen Suche suchte ElephantEye nach Zügen zum Schlagen oder Entfernen von Generälen. Bei der Suche nach Zügen zum Schlagen filterte ElephantEye unwichtige Schlagzüge heraus, wie z. B. Bauern, die den Fluss nicht schlagen können, oder Soldaten, die den Läufer schlagen, der sich nicht in der Verteidigung befindet. Wartemethoden fallen nicht in den Bereich der statischen Suche.
(3) Zyklusbewegungen und Fernerkennung:
ElephantEye kann Looping-Bewegungen erkennen, welche Seite der Anführer ist, und nutzt die Regeln, die Kapitäne verbieten. Derzeit kann ElephantEye jedoch keine langen Griffe erkennen.
(4) Ersatztabelle:
ElephantEye bezieht sich auf die Designidee des chinesischen Schachprogramms „Running Horses“, verwendet tiefgreifende und immer abgedeckte Doppelschicht-Ersatztabellen und übernimmt eine Low-Out- (High-Out-) Grenzkorrektur-Ersatztabellen-Aktualisierungsstrategie.
(5) Zuschnitt mit Inspektion:
ElephantEye verwendet leeres Clipping mit R=2 und aktiviertes leeres Clipping in der Endspielphase.
(6) Iterative Vertiefung/Kinderfressbewegungen/Killerbewegungen/Inspiration für die Geschichtstabelle:
Die Bewegungssortierung von ElephantEye ist sehr einfach und klar, gefolgt von iterativen Vertiefungsbewegungen, guten Fangbewegungen, Killerbewegungen und generativen Bewegungen, sortiert nach der Verlaufstabelle.
(7) Das Allgemeine/Alleinige erstreckt sich auf:
Für selektive Erweiterungen verwendet ElephantEye allgemeine und nur allgemeine Erweiterungen.
(8) Alpha-Beta-Hauptvariantensuche:
ElephantEye verwendet die traditionelle rekursive Alpha-Beta-Primärvariantensuche.
(9) Startbibliothek:
Die Eröffnungsbibliothek von ElephantEye enthält insgesamt 10.000 symmetrische Züge, die aus 8.000 Spitzenspielen in nationalen Schacheinzelwettbewerben, Mannschaftswettbewerben, Wuyang Cup, Ligen und anderen Spielen von 1990 bis 2005 extrahiert wurden.
(10) Backstage-Denken und Zeiteinteilungsstrategien:
ElephantEye unterstützt die Hintergrund-Denkfunktion und bietet zwei Zeitzuteilungsstrategien, periodenbasiert und Überstunden, die die Zeit automatisch angemessen zuweisen.
6. Eröffnung der Bibliothek
Die Eröffnungsbibliothek von ElephantEye kann mit dem „ElephantEye Opening Library Maker“ erstellt werden. Nachdem Sie das Produktionstool ausgeführt haben, müssen Sie zunächst den Ordner auswählen, in dem sich der PGN-Spieldatensatz befindet, und ihn dann als Eröffnungsbibliotheksdatei (normalerweise BOOK.DAT) speichern. Im Allgemeinen gilt: Je mehr Schachdatensätze zum Generieren der Eröffnungsbibliothek verwendet werden, desto größer ist die generierte Eröffnungsbibliotheksdatei.
Um die erstellte Eröffnungsbibliothek für ElephantEye wirksam zu machen, müssen Sie nur BOOK.DAT im ElephantEye-Verzeichnis durch die generierte Eröffnungsbibliotheksdatei ersetzen. Sie können die Eröffnungsbibliotheksdatei auch im Dialogfeld „Engine-Einstellungen“ von <Chess angeben Assistent>.
7. Funktionsbibliothek zur Situationsbewertung
ElephantEye Ab Version 2.1 wurden der Suchteil und der Situationsbewertungsteil des Programms getrennt. Der Suchteil ist durch den Aufruf von API-Funktionen mit dem Situationsbewertungsteil gekoppelt.
Andere Schachprogrammierer können auf Basis von ElephantEye freier spielen. Gemäß der LGPL-Vereinbarung werden die beiden Teile Suche und Situationsbewertung als unabhängige Programmbibliotheken behandelt. Um einen Teil davon zu verwenden, müssen Sie lediglich das Quellprogramm dieses Teils offenlegen. Mit anderen Worten: Wenn der Situationsbewertungsteil keinen offenen Code verwendet, ist der Programmierer nicht verpflichtet, das Quellprogramm dieses Teils offenzulegen, und das Gleiche gilt für den Suchteil.
Die API-Funktionsschnittstelle zur Situationsbewertung von ElephantEye ist wie folgt definiert:
A. Name der Situationsbewertungs-Engine: const char *GetEngineName(void);
B. Schnittstelle der Positionsvorauswertungsfunktion: void PreEvaluate(PositionStruct *lppos, PreEvalStruct *lpPreEval);
C. Positionsbewertungsfunktionsschnittstelle: int Evaluate(const PositionStruct *lppos, int vlAlpha, int vlBeta);
Unter diesen müssen PositionStruct und PreEvalStruct den in position.h bzw. pregen.h definierten Strukturen entsprechen.
8. Quellprogramm
Das Quellprogramm von ElephantEye umfasst 9 Module, der Inhalt ist ungefähr wie folgt:
(1) ucci.h/ucci.cpp
UCCI-Befehlsinterpretationsmodul, einschließlich Programmen zum Empfangen von Zeileneingaben unter Windows und Unix;
(2) pregen.h/pregen.cpp
Modul zum Generieren von Zobrist-Arrays und zum Verschieben voreingestellter Tabellen. Die voreingestellte Tabelle von ElephantEye ist in zwei Teile unterteilt: Die voreingestellte Tabelle für die Schiebeschachfiguren (einschließlich keiner Figuren, Türme, Kanonen und aller anderen Figuren). Der zweite Teil ist die voreingestellte Tabelle der Züge andere Schachfiguren, wodurch umständliche Grenzbeurteilungen beim Generieren von Zügen vermieden werden.
(3) position.h/position.cpp
Beschreibt hauptsächlich die Datenstruktur und Funktionen von Bewegungen und Situationen. Die Verarbeitung der Situation steht im Mittelpunkt dieses Moduls. Zu den Verarbeitungsinhalten gehören Situationsinitialisierung, FEN-String-Import, Schachfigurenbewegung, Rationalitätsbeurteilung des Killerzuges, allgemeine Beurteilung, Anführer- und Zykluserkennung, Anpassung des Figurenwerts, usw. Es enthält auch eine Tabelle mit 5 Unterkraft-Positionswerten.
(4)genmoves.cpp
Der Zuggenerator umfasst zwei Typen, die Züge erzeugen, die Figuren schlagen, und Züge, die keine Figuren schlagen, aber nicht nur Züge generieren können, die Generäle entfernen. Bei der Generierung der kindfressenden Bewegungen wird jeder Bewegung ein entsprechender MVV-Wert (LVA) (oder Quasi-SEE-Wert) zugewiesen. Dieses Modul verfügt auch über eine Funktion, die speziell bestimmt, ob die Schachfiguren geschützt sind, um den MVV-Wert (LVA) zu berechnen. Für geschützte Schachfiguren wird der MVV-LVA-Wert berechnet (nicht gezählt, wenn er kleiner als Null ist). , berechnen Sie nur den MVV-Wert. Daher ist in diesem Modul auch das Programm zur Feststellung, ob eine Schachfigur eine Wurzel hat, enthalten.
(5) hash.h/hash.cpp
Das Modul zur Verwaltung von Substitutionstabellen, Verlaufstabellen und Umzugslisten umfasst die Zuordnung und den Zugriff auf Substitutionstabellen, die Erfassung wichtiger Variationen und andere Vorgänge.
(6) book.h/book.cpp
Lesemodul der Bibliothek öffnen.
(7) movesort.h/movesort.cpp
Modul zum Sortieren von Listen verschieben.
(8) search.h/search.cpp
Zusätzlich zu den drei Hauptprozessen statische Suche, vollständige Suche und Wurzelknotensuche umfasst das Suchmodul auch iterative Vertiefungskontrolle, Hintergrunddenken, Zeitzuordnung, Suchparameterstatistik und Suchinformationsausgabe. Dieses Modul ist das Kernmodul des gesamten Programms.
(9) eleeye.cpp
Hauptprogramm (d. h. Hauptfunktion).
(10) preeval.h/preeval.cpp
ElephantEye ist ein Vorgenerator für das Sub-Power-Positionsarray und passt das Sub-Power-Positionsarray basierend auf den beiden Parametern „Offensive/Verteidigung“ und „Eröffnung/Mittelspiel/Endspiel“ linear an.
(11) evaluieren.cpp
Was die Situationsbewertungsfunktion betrifft, verwendet ElephantEye einen Lazy-Evaluierungsmechanismus mit vier Ebenen. Die gröbste Ebene bewertet nur spezielle Schachmuster, eine weitere Ebene bewertet die Eindämmung, eine weitere Ebene bewertet die Flexibilität des Turms und die höchste Ebene bewertet auch das Hindernis des Ritters.
9. Programmleistung
Das Design von ElephantEye konzentriert sich auf Suchalgorithmen, es mangelt jedoch relativ an Wissen. Auf einem 2,8-GHz-Prozessor können etwa 1.000.000 Knoten pro Sekunde durchsucht werden (einschließlich regulärer Suche und statischer Suche), und etwa 11 Schichten können in einer typischen Mittelspielsituation innerhalb einer Minute durchsucht werden.
Hinsichtlich der Schachleistung liegt ElephantEye auf dem gleichen Niveau wie Programme wie „Qiyin“ und SaoLa (Chess Challenger). Aufgrund von Mängeln in der Positionsbewertungsfunktion ist ElephantEye jedoch weit von der besten kommerziellen Schachsoftware entfernt (Xie Master, Xiangqi-Familie, Xiangqi Qibing, Qi).
ElephantEye wurde auf Schachspiel-Websites wie Lianzhong und Yitian getestet. Der Rekord von Lianzhong.com liegt bei etwa 2.500 Punkten, der Rekord von Yitian im Schnellschach bei etwa 2.000 Punkten und der Rekord im Langsamschach bei etwa 1.500 Punkten.
Im September 2005 nahm ElephantEye mit Hilfe von Herrn Shi Jinshan, einem taiwanesischen Schachsoftware-Enthusiasten, am chinesischen Schachgruppenwettbewerb der 10. ICGA-Computerolympiade in Taipeh teil, mit einer Bilanz von 7 Siegen, 5 Niederlagen und 14 Niederlagen 14 Programme. Rang 11. August 2006 ElephantEye Teilnahme an der ersten nationalen Computerspielmeisterschaft in Peking mit einer Bilanz von 7 Siegen, 2 Niederlagen und 11 Niederlagen und Platz 7 unter 18 Programmen.
10. Verwandte Ressourcen
Das Quellprogramm von ElephantEye wird im XiangQi Wizard-Projekt von SourceForge veröffentlicht und seine Seite lautet:
http://sourceforge.net/projects/xqwizard/
Die Versionsverbesserung von ElephantEye wird synchron in Echtzeit auf der SourceForge SVN-Site veröffentlicht. Die Zugriffsadresse lautet:
https://xqwizard.svn.sourceforge.net/svnroot/xqwizard/
Sie können SVN-Client-Programme wie TortoiseSVN verwenden, um den neuesten Code zu erhalten (vollständig mit den Entwicklern synchronisiert). Die Einführungs- und Download-Adresse von TortoiseSVN lautet:
http://sourceforge.net/projects/tortoisesvn/
ElephantEye muss unter einem Schachprogramm ausgeführt werden, das UCCI unterstützt (z. B. <Chess Wizard>). Das Installationsprogramm <Chess Wizard> enthält die neueste Version von ElephantEye.
<Chess Wizard> kann von der folgenden Website heruntergeladen werden:
http://www.skycn.com/soft/24665.html (Sky Software Station)
http://www.onlinedown.net/soft/38287.htm (Huajun Software Park)
Das Quellprogrammpaket von ElephantEye umfasst neben dem Quellprogramm von ElephantEye selbst auch folgende Zusatzmodule:
(1) Basiscode (Basis): Bietet Montageanweisungen, Systemfunktionsaufrufe und andere Funktionen;
(2) Chinesisches Schachregelmodul (ccess): Bietet eine Schnittstelle für andere Software zur Verwendung von ElephantEye-Code;
(3) Eröffnungsbibliothek-Produktionsmodul (BOOK): der Code zum Erstellen der Eröffnungsbibliothek BOOK.DAT;
(4) UCCI Engine League Simulator (LEAGUE): Bietet eine automatische Batch-Match-Plattform für UCCI-Engine-Tests und -Wettbewerbe;
(5) UCCI Engine Search Tree Analyzer (TREE): ein Suchrouten-Analysetool für die UCCI-Engine (unterstützt UCCI 2.2+);
(6) XQF-Schachaufzeichnungstools (XQFTOOLS): Bietet Tools zum Konvertieren von XQF und anderen Schachaufzeichnungen in PGN;
(7) Light Red Chess Adapter (UCCI2QH): Bietet eine Schnittstelle für Light Red Chess zum Aufrufen der UCCI-Engine;
(8) Die hellrote Schach-Engine unterstützt den UCCI-Adapter (QH2UCCI): Bietet eine Schnittstelle für das hellrote Schach „Dream Egg“, um am UCCI-Engine-Test teilzunehmen.
(9) BBS-Schach (BBSCHESS): Ein mit Visual Basic erstelltes Tool zum Festlegen von Schachpositionen, mit dem farbige Schachpositionen in die BBS verschiedener Universitäten eingefügt werden können.
(10) Schachbrett-Bildgenerator (FEN2BMP): ein praktisches Tool, das FEN-Dateien von Schach und chinesischem Schach in BMP-Dateien konvertieren kann;
(11) Codierungskonvertierung (Codec), einschließlich vereinfachter und traditioneller Transcodierung, UNIX-Texttranscodierung, Base64-Transcodierung usw.;
(12) Andere Tools (MISC): einschließlich einfacher Netzwerkkommunikation, Pipeline-Tests und anderer Tools;
(13) Dokumentationsdokument (DOC): nämlich die Reihe „Exploration of Chinese Chess Programming“;
(14) Teilnehmende Schachrekorde (CCGC): Alle Schachrekorde von ElephantEye, die an der ersten National Computer Gaming Championship (CCGC) teilgenommen haben.
Wenn Sie detailliertere Informationen über ElephantEye erhalten möchten, können Sie sich auf der Website der Xiangqi Encyclopedia anmelden:
http://www.xqbase.com/