un moteur XiangQi (échecs chinois) pour XQWizard avec une IA forte
Programme de jeu d'échecs chinois ElephantEye (Elephant Eye) version : 3.15
Réseau d'encyclopédies Xiangqi* mars 2008
(* E-mail : [email protected])
1. Introduction
ElephantEye est un programme d'échecs chinois gratuit Dans le cadre du respect de la licence publique générale limitée GNU, les passionnés d'échecs et les programmeurs peuvent utiliser librement ElephantEye et son programme source.
Le nom chinois d'ElephantEye est "Elephant Eye", qui, avec les "jambes de cheval" et la "cadre de canon", constituent la "troisième dimension sur l'échiquier" des échecs chinois. ElephantEye est généralement utilisé en conjonction avec ElephantBoard, un logiciel d'édition de records d'échecs, ce qui signifie avoir un plan clair (Board en anglais signifie « board »). (Remarque : ElephantBoard a désormais été renommé "Chess Wizard".)
2. Accord moteur
ElephantEye prend en charge UCCI 3.0. Les utilisateurs de Light Red Xiangqi peuvent appeler le moteur ElephantEye via l'adaptateur de moteur UCCI (UCCI2QH).
(1) Les commandes UCCI prises en charge sont :
Uccy
définir l'option...
position {fen <fen_str> | startpos} [déplace <move_list>]
banmoves <move_list>
allez [réfléchir | dessiner] ...
réfléchir à frapper [dessiner] arrêter |
sonde {fen <fen_str> | startpos} [déplace <move_list>]
quitter
(2) Les informations UCCI pouvant être restituées sont :
id {nom <nom_moteur> | version <nom_version> | copyright <copyright_info> auteur <nom_auteur> utilisateur <nom_utilisateur>}
option...
ucciok
des infos...
{nobestmove | bestmove <best_move> [réfléchir <ponder_move>] [dessiner | démissionner]}
pophash [bestmove <best_move>] [limite inférieure <valeur> profondeur <profondeur>] [limite supérieure <valeur> profondeur <profondeur>]
au revoir
3. Paramètres des paramètres
En tant que moteur UCCI, ElephantEye possède plusieurs paramètres qui peuvent être définis (peuvent être définis directement dans <Chess Wizard>).
(1) Bibliothèque de départ :
La bibliothèque d'ouverture par défaut est BOOK.DAT dans le répertoire courant du programme ElephantEye (ELEEYE.EXE), qui contient 10 000 positions symétriques.
(2) Temps de réflexion :
Limiter la profondeur de la réflexion n'est généralement pas un bon choix. Il est recommandé de fixer une limite de temps et de laisser le programme allouer automatiquement du temps. Lors de la résolution d'un jeu de mise à mort ou de l'analyse d'une situation, le programme peut penser sans limite et arrêter de penser à tout moment.
(3) Taille de la table de remplacement :
Bien que la taille de la table de remplacement ait peu d'impact sur la vitesse d'exécution du programme et que le paramètre par défaut de 16 Mo soit suffisant, ElephantEye fournit toujours la fonction de définition de la taille de la table de remplacement. Si la mémoire le permet, vous pouvez augmenter de manière appropriée la taille de la table de substitution lorsque vous jouez aux échecs lents, mais il est recommandé de ne pas dépasser la moitié de la mémoire physique.
(3) Degré de couture :
Pour accélérer les opérations du programme, ElephantEye utilise par défaut un découpage vide et la possibilité d'effets négatifs est minime. Seul le niveau le plus bas désactive le recadrage des blancs.
(4) Quantité de connaissances :
La quantité de connaissances est liée à la précision de l'évaluation de la situation. Parmi les niveaux de connaissances d'ElephantEye, seul le niveau le plus bas n'utilise pas la fonction d'évaluation de la situation (seule la valeur du sous-pouvoir est prise en compte). sur la connaissance de la revue pour analyser la position, etc. Dans cette situation, vous pouvez essayer ce réglage.
(5) Caractère aléatoire :
ElephantEye propose 4 niveaux de caractère aléatoire. Plus le caractère aléatoire est grand, plus le programme est susceptible de proposer un coup qu'il pense n'être pas le meilleur coup, mais "pas le meilleur coup" n'est pas sans avantages, en particulier lorsque la bibliothèque d'ouverture n'est pas activée, augmentant de manière appropriée le le hasard peut être évité. Le programme fait le même mouvement dans la même situation.
4. Règles
À partir de la version 2.0, ElephantEye prend non seulement en charge la règle de « décision unilatérale à long terme de perdre », mais prend également en charge la « décision à long terme de perdre ». « Hit » inclut « check » et « catch ». En raison des limites de complexité du programme, seules les trois situations suivantes sont reconnues comme « catch » :
A. Chevaux et chars ou artilleurs (pions) avec racines ;
B. Charrettes et artilleurs à cheval (pions) avec racines ;
C. Cannon capture des chars ou de la cavalerie immobilisée (pions).
Bien qu'ElephantEye ne soit pas en mesure d'identifier correctement les mouvements longs dans des situations complexes, puisqu'il prend en charge la commande UCCI banmoves..., une fois que l'utilisateur pense que le moteur a interdit les « mouvements longs », il peut utiliser la fonction « définir l'interdiction » de <Assistant d'échecs> Laissez le moteur changer avec force.
5. Algorithme de jeu
ElephantEye est un programme d'échecs en force brute qui utilise des algorithmes de jeu rigoureux et efficaces :
(1) Déplacez le générateur en utilisant des lignes de bits et des colonnes de bits :
Les lignes de bits (BitRanks) et les colonnes de bits (BitFiles) sont propices à la génération de mouvements de pièces d'échecs coulissantes (voitures et canons) (en particulier les lignes de bits et les colonnes de bits peuvent utiliser des tables de recherche au lieu de boucles sur les rayons). Dans ElephantEye, la technologie des lignes et des colonnes de bits n'est pas seulement utilisée dans le générateur de mouvements, mais également dans la détermination du verrouillage.
(2) Recherche de situation statique :
Lors d'une recherche statique, ElephantEye recherchait des mouvements pour capturer ou supprimer des généraux. Lors de la recherche de mouvements à capturer, ElephantEye filtrait les captures sans importance, telles que les pions qui ne peuvent pas capturer la rivière ou les soldats qui capturent l'évêque qui n'est pas en défense. Les méthodes d'attente ne relèvent pas de la recherche statique.
(3) Mouvements de cycle et détection à longue portée :
ElephantEye peut identifier les mouvements en boucle. Lorsque des mouvements en boucle se produisent, il peut déterminer quel camp est le leader et profitera des règles interdisant les capitaines. Cependant, ElephantEye ne peut actuellement pas identifier les prises longues.
(4) Tableau de remplacement :
ElephantEye fait référence à l'idée de conception du programme d'échecs chinois "Running Horses", utilise des tables de remplacement à double couche en profondeur et toujours couvertes, et adopte une stratégie de mise à jour de la table de remplacement de correction de limite basse (haute).
(5) Découpe à blanc avec inspection :
ElephantEye utilise un découpage vide avec R = 2 et utilise un découpage vide vérifié lors de la phase de fin de partie.
(6) Approfondissement itératif/mouvements pour manger des enfants/mouvements tueurs/inspiration de table historique :
Le tri des mouvements d'ElephantEye est très simple et clair, suivi de mouvements d'approfondissement itératifs, de bons mouvements de capture, de mouvements tueurs et de mouvements génératifs triés par la table historique.
(7) Le général/unique s’étend :
Pour les extensions sélectives, ElephantEye utilise des extensions générales et uniquement générales.
(8) Recherche de variantes principales Alpha-Beta :
ElephantEye utilise la recherche récursive traditionnelle de variantes primaires Alpha-Beta.
(9) Bibliothèque de départ :
La bibliothèque d'ouvertures d'ElephantEye contient un total de 10 000 coups symétriques, extraits de 8 000 meilleures parties de compétitions nationales d'échecs individuelles, de compétitions par équipes, de la Coupe Wuyang, de ligues et d'autres jeux de 1990 à 2005.
(10) Réflexion en coulisses et stratégies d’attribution du temps :
ElephantEye prend en charge la fonction de réflexion en arrière-plan et propose deux stratégies d'allocation du temps, basées sur des périodes et des heures supplémentaires, qui alloueront automatiquement le temps de manière raisonnable.
6. Ouverture de la bibliothèque
La bibliothèque d'ouverture d'ElephantEye peut être produite par "ElephantEye Opening Library Maker". Après avoir exécuté l'outil de production, vous devez d'abord sélectionner le dossier dans lequel se trouve l'enregistrement du jeu PGN, puis l'enregistrer en tant que fichier de bibliothèque d'ouverture (généralement BOOK.DAT). Généralement, plus le nombre d'enregistrements d'échecs utilisés pour générer la bibliothèque d'ouverture est grand, plus le fichier de bibliothèque d'ouverture généré sera volumineux.
Afin de rendre efficace la bibliothèque d'ouverture produite pour ElephantEye, il vous suffit de remplacer BOOK.DAT dans le répertoire ElephantEye par le fichier de bibliothèque d'ouverture généré. Vous pouvez également spécifier le fichier de bibliothèque d'ouverture dans la boîte de dialogue "Paramètres du moteur" de <Chess. Assistant>.
7. Bibliothèque de fonctions d'évaluation de situation
ElephantEye A partir de la version 2.1, la partie recherche et la partie évaluation de situation du programme ont été séparées. La partie recherche est couplée à la partie évaluation de situation en appelant des fonctions API.
D'autres programmeurs d'échecs peuvent jouer plus librement sur la base d'ElephantEye. Selon l'accord LGPL, les deux parties de recherche et d'évaluation de situation sont traitées comme des bibliothèques de programmes indépendantes. Pour en utiliser une partie, il vous suffit de divulguer le programme source de cette partie. Autrement dit, si la partie évaluation de la situation n'utilise aucun code ouvert, alors le programmeur n'a aucune obligation de divulguer le programme source de cette partie, et il en est de même pour la partie recherche.
L'interface de la fonction API d'évaluation de situation d'ElephantEye est définie comme suit :
A. Nom du moteur d'évaluation de situation : const char *GetEngineName(void);
B. Interface de la fonction de pré-évaluation de position : void PreEvaluate(PositionStruct *lppos, PreEvalStruct *lpPreEval) ;
C. Interface de la fonction d'évaluation de position : int Evaluate(const PositionStruct *lppos, int vlAlpha, int vlBeta) ;
Parmi eux, PositionStruct et PreEvalStruct doivent être conformes aux structures définies respectivement dans position.h et pregen.h.
8. Programme source
Le programme source d'ElephantEye comprend 9 modules, le contenu est à peu près le suivant :
(1) ucci.h/ucci.cpp
Module d'interprétation des commandes UCCI, comprenant des programmes de réception d'entrée de ligne sous Windows et Unix ;
(2) pregen.h/pregen.cpp
Module pour générer des tableaux Zobrist et déplacer des tables prédéfinies. La table prédéfinie d'ElephantEye est divisée en deux parties. L'une est la table prédéfinie pour les pièces d'échecs coulissantes (y compris les pièces, les tours, les canons et toutes les autres pièces). La seconde est la table prédéfinie des mouvements de position. d'autres pièces d'échecs, ce qui évite des jugements de limites fastidieux lors de la génération de mouvements.
(3) position.h/position.cpp
Décrit principalement la structure des données et les fonctions des mouvements et des situations. Le traitement de la situation est au centre de ce module. Le contenu du traitement comprend l'initialisation de la situation, l'importation de chaînes FEN, le mouvement des pièces d'échecs, le jugement de rationalité du mouvement du tueur, le jugement général, la détection du leader et du cycle, l'ajustement de la valeur des pièces, etc. Il comprend également 5 tableaux de valeurs de position de sous-force.
(4)genmoves.cpp
Le générateur de mouvements comprend deux types qui génèrent des mouvements qui capturent des pièces et des mouvements qui ne capturent pas de pièces, mais ne peuvent pas uniquement générer des mouvements qui suppriment des généraux. Lors de la génération des mouvements de consommation d'enfants, chaque mouvement se voit attribuer une valeur MVV (LVA) (ou quasi-SEE) correspondante. Ce module dispose également d'une fonction qui détermine spécifiquement si les pièces d'échecs sont protégées pour calculer la valeur MVV (LVA). Pour les pièces d'échecs protégées, calculez la valeur MVV-LVA (sans compter si elle est inférieure à zéro). , calculez uniquement la valeur MVV. Par conséquent, le programme permettant de déterminer si une pièce d'échecs a une racine est également inclus dans ce module.
(5) hash.h/hash.cpp
Le module de gestion des tables de substitution, des tables d'historique et des listes de mouvements comprend l'attribution et l'accès aux tables de substitution, l'acquisition de variations majeures et d'autres opérations.
(6) livre.h/livre.cpp
Ouverture du module de lecture de la bibliothèque.
(7) moveort.h/movesort.cpp
Déplacer le module de tri de liste.
(8) search.h/search.cpp
En plus des trois processus principaux de recherche statique, de recherche complète et de recherche de nœud racine, le module de recherche comprend également un contrôle itératif d'approfondissement, une réflexion de fond, une allocation de temps, des statistiques sur les paramètres de recherche et la sortie d'informations de recherche. Ce module est le module de base de l'ensemble du programme.
(9) eleeye.cpp
Programme principal (c'est-à-dire fonction principale).
(10) preeval.h/preeval.cpp
Pré-générateur de tableau de positions de sous-puissance, ElephantEye ajuste linéairement le tableau de positions de sous-puissance en fonction des deux paramètres « offensive/défense » et « ouverture/milieu de jeu/fin de partie ».
(11) évaluer.cpp
Quant à la fonction d'évaluation de la situation, ElephantEye adopte un mécanisme d'évaluation paresseuse à quatre niveaux. Le niveau le plus grossier évalue uniquement les modèles d'échecs spéciaux, un niveau supplémentaire évalue le confinement, un niveau supplémentaire évalue la flexibilité de la tour et le niveau le plus élevé évalue également l'obstruction. du chevalier.
9. Performance du programme
La conception d’ElephantEye se concentre sur les algorithmes de recherche, mais elle manque relativement de connaissances. Sur un processeur de 2,8 GHz, environ 1 000 000 de nœuds peuvent être recherchés par seconde (y compris la recherche régulière et la recherche statique), et environ 11 couches peuvent être recherchées dans une situation de jeu intermédiaire typique en 1 minute.
En termes de puissance d'échecs, ElephantEye est au même niveau que des programmes tels que "Qiyin" et SaoLa (Chess Challenger). Cependant, en raison de défauts dans la fonction d'évaluation de position, ElephantEye est loin d'être le meilleur logiciel d'échecs commercial (Xie Master,). Famille Xiangqi, Xiangqi Qibing, Qi). Il y a encore un certain écart.
ElephantEye a été testé sur des sites de jeux d'échecs tels que Lianzhong et Yitian. Mesuré par les notes, le record de Lianzhong.com est d'environ 2 500 points, le record d'échecs rapides de Yitian est d'environ 2 000 points et celui d'échecs lents est d'environ 1 500 points.
En septembre 2005, avec l'aide de M. Shi Jinshan, un passionné de logiciels d'échecs taïwanais, ElephantEye a participé à la compétition de groupe d'échecs chinois de la 10e Olympiade informatique de l'ICGA organisée à Taipei, avec un record de 7 victoires, 5 défaites et 14 défaites parmi les joueurs d'échecs chinois. 14 programmes Classé 11e ; août 2006 ElephantEye. Participation au premier championnat national de jeux informatiques organisé à Pékin, avec un record de 7 victoires, 2 défaites et 11 défaites, se classant 7e sur 18 programmes.
10. Ressources connexes
Le programme source d'ElephantEye est publié dans le projet XiangQi Wizard de SourceForge, et sa page est :
http://sourceforge.net/projects/xqwizard/
L'amélioration de la version d'ElephantEye est publiée de manière synchrone en temps réel sur le site SourceForge SVN. L'adresse d'accès est :
https://xqwizard.svn.sourceforge.net/svnroot/xqwizard/
Vous pouvez utiliser des programmes clients SVN tels que TortoiseSVN pour obtenir le dernier code (entièrement synchronisé avec les développeurs). L'adresse d'introduction et de téléchargement de TortoiseSVN est :
http://sourceforge.net/projects/tortoisesvn/
ElephantEye doit être exécuté sous un programme d'échecs prenant en charge UCCI (tel que <Chess Wizard>). Le programme d'installation <Chess Wizard> contient la dernière version d'ElephantEye.
<Chess Wizard> peut être téléchargé à partir du site Web suivant :
http://www.skycn.com/soft/24665.html (Station logicielle Sky)
http://www.onlinedown.net/soft/38287.htm (Parc logiciel Huajun)
En plus du programme source d'ElephantEye lui-même, le package du programme source d'ElephantEye comprend également les modules supplémentaires suivants :
(1) Code de base (base) : fournit des instructions d'assemblage, des appels de fonctions système et d'autres fonctions ;
(2) Module de règles d'échecs chinois (ccess) : fournit une interface permettant à d'autres logiciels d'utiliser le code ElephantEye ;
(3) Module de production de bibliothèque d'ouverture (BOOK) : le code pour créer la bibliothèque d'ouverture BOOK.DAT ;
(4) UCCI Engine League Simulator (LEAGUE) : fournit une plate-forme de correspondance automatique par lots pour les tests et la compétition des moteurs UCCI ;
(5) UCCI Engine Search Tree Analyzer (TREE) : un outil d'analyse d'itinéraire de recherche pour le moteur UCCI (prenant en charge UCCI 2.2+) ;
(6) Outils d'enregistrement d'échecs XQF (XQFTOOLS) : fournit des outils pour convertir XQF et d'autres enregistrements d'échecs en PGN ;
(7) Adaptateur Light Red Chess (UCCI2QH) : fournit une interface permettant à Light Red Chess d'appeler le moteur UCCI ;
(8) Le moteur d'échecs rouge clair prend en charge l'adaptateur UCCI (QH2UCCI) : fournit une interface pour que le jeu d'échecs rouge clair "Dream Egg" rejoigne le test du moteur UCCI ;
(9) BBS Chess (BBSCHESS) : un outil de définition de position d'échecs réalisé avec Visual Basic, qui peut coller des positions d'échecs colorées sur le BBS de diverses universités ;
(10) Générateur d'images d'échiquier (FEN2BMP) : un outil pratique qui peut convertir les fichiers FEN d'échecs et d'échecs chinois en fichiers BMP ;
(11) Conversion de codage (codec), y compris le transcodage simplifié et traditionnel, le transcodage de texte UNIX, le transcodage Base64, etc. ;
(12) Autres outils (MISC) : y compris une simple communication réseau, des tests de pipeline et d'autres outils ;
(13) Document de documentation (DOC) : à savoir la série « Exploration of Chinese Chess Programming » ;
(14) Records d'échecs participants (CCGC) : Tous les records d'échecs d'ElephantEye participant au premier championnat national de jeux sur ordinateur (CCGC).
Si vous souhaitez obtenir des informations plus détaillées sur ElephantEye, vous pouvez vous connecter au site Web de l'Encyclopédie Xiangqi :
http://www.xqbase.com/