un motor XiangQi (ajedrez chino) para XQWizard con potente IA
Programa de juego de ajedrez chino ElephantEye (Elephant Eye) versión: 3.15
Red de Enciclopedia Xiangqi* Marzo de 2008
(* Correo electrónico: [email protected])
1. Introducción
ElephantEye es un programa de ajedrez chino gratuito. Bajo la premisa de seguir la Licencia pública general reducida de GNU, los programadores y entusiastas del ajedrez pueden utilizar libremente ElephantEye y su programa fuente.
El nombre chino de ElephantEye es "Elephant Eye", que junto con las "patas de caballo" y el "marco de cañón" constituyen la "tercera dimensión en el tablero" del ajedrez chino. ElephantEye se suele utilizar junto con ElephantBoard, un software de edición de registros de ajedrez, lo que significa tener un plan claro (Board en inglés significa "tablero"). (Nota: ElephantBoard ahora se llama "Chess Wizard".)
2. Acuerdo de motor
ElephantEye es compatible con UCCI 3.0. Los usuarios de Light Red Xiangqi pueden llamar al motor ElephantEye a través del adaptador del motor UCCI (UCCI2QH).
(1) Los comandos UCCI admitidos son:
ucci
configuración...
posición {fen <fen_str> | startpos} [movimientos <move_list>]
movimientos baneados <lista_movimientos>
ir [meditar | dibujar] ...
ponderhit [dibujar] |
sonda {fen <fen_str> | startpos} [movimientos <move_list>]
abandonar
(2) La información UCCI que se puede devolver es:
id {nombre <nombre_motor> | versión <nombre_versión> | copyright <copyright_info> autor <nombre_autor> usuario <nombre_usuario>}
opción...
ucciok
información...
{nobestmove | bestmove <best_move> [ponder <ponder_move>] [dibujar |
pophash [mejor movimiento <mejor_movimiento>] [límite inferior <valor> profundidad <profundidad>] [límite superior <valor> profundidad <profundidad>]
adiós
3. Configuración de parámetros
Como motor UCCI, ElephantEye tiene varios parámetros que se pueden configurar (se pueden configurar directamente en <Chess Wizard>).
(1) Biblioteca inicial:
La biblioteca de apertura predeterminada es BOOK.DAT en el directorio actual del programa ElephantEye (ELEEYE.EXE), que contiene 10.000 posiciones simétricas.
(2) Tiempo para pensar:
Limitar la profundidad del pensamiento no suele ser una buena opción. Se recomienda establecer un límite de tiempo y dejar que el programa asigne tiempo automáticamente. Al resolver un juego de matar o analizar una situación, el programa puede pensar sin límite y dejar de pensar en cualquier momento.
(3) Tamaño de la mesa de repuesto:
Aunque el tamaño de la tabla de reemplazo tiene poco impacto en la velocidad de ejecución del programa y la configuración predeterminada de 16 MB es suficiente, ElephantEye aún proporciona la función de configurar el tamaño de la tabla de reemplazo. Si la memoria lo permite, puedes aumentar adecuadamente el tamaño de la tabla de sustitución cuando juegues ajedrez lento, pero se recomienda no exceder la mitad de la memoria física.
(3) Grado de confección:
Para acelerar las operaciones del programa, ElephantEye utiliza recortes vacíos de forma predeterminada y la posibilidad de efectos negativos es mínima. Sólo el nivel más bajo desactiva el recorte en blanco.
(4) Cantidad de conocimiento:
La cantidad de conocimiento está relacionada con la precisión de la evaluación de la situación. Entre los niveles de conocimiento de ElephantEye, solo el nivel más bajo no utiliza la función de evaluación de la situación (solo se considera el valor del subpoder). sobre el conocimiento de la revisión para analizar la posición, etc. En esta situación, puede probar esta configuración.
(5) Aleatoriedad:
ElephantEye presenta 4 niveles de aleatoriedad. Cuanto mayor sea la aleatoriedad, es más probable que el programa realice un movimiento que crea que no es el mejor, pero "no es el mejor movimiento" no deja de tener beneficios, especialmente cuando la biblioteca de apertura no está habilitada, lo que aumenta adecuadamente la la aleatoriedad puede evitarse. El programa hace el mismo movimiento en la misma situación.
4. Reglas
A partir de la versión 2.0, ElephantEye no solo admite la regla de "decisión unilateral de perder a largo plazo", sino que también admite la "decisión de perder a largo plazo". "Hit" incluye "verificar" y "capturar". Debido a limitaciones en la complejidad del programa, sólo las tres situaciones siguientes se reconocen como "catch":
A. Caballos y carros o artilleros (peones) con raíces;
B. Carros y artilleros a caballo (peones) con raíces;
C. Cannon captura carros o caballería arraigada (peones).
Aunque ElephantEye puede no ser capaz de identificar correctamente movimientos largos en situaciones complejas, ya que soporta el comando UCCI banmoves..., una vez que el usuario piensa que el motor ha prohibido "movimientos largos", puede usar la función "establecer prohibición" de <Asistente de Ajedrez> Deja que el motor cambie con fuerza.
5. Algoritmo de juego
ElephantEye es un programa de ajedrez de fuerza bruta que utiliza algoritmos de juego rigurosos y eficaces:
(1) Mover el generador usando filas y columnas de bits:
Las filas de bits (BitRanks) y las columnas de bits (BitFiles) favorecen la generación de movimientos de piezas de ajedrez deslizantes (automóviles y cañones) (especialmente los movimientos de captura). Las filas de bits y las columnas de bits pueden utilizar tablas de búsqueda en lugar de bucles en rayos. En ElephantEye, la tecnología de filas y columnas de bits no sólo se utiliza en el generador de movimientos, sino también en la determinación de la fijación.
(2) Búsqueda de situación estática:
Al realizar una búsqueda estática, ElephantEye buscó movimientos para capturar o eliminar generales. Al buscar movimientos para capturar, ElephantEye filtró capturas sin importancia, como peones que no pueden capturar el río o soldados que capturan al alfil que no está en defensa. Los métodos de espera no están dentro del alcance de la búsqueda estática.
(3) Movimientos cíclicos y detección de largo alcance:
ElephantEye puede identificar movimientos en bucle. Cuando se producen movimientos en bucle, puede determinar qué lado es el líder y aprovechará las reglas que prohíben a los capitanes. Sin embargo, actualmente ElephantEye no puede identificar agarres largos.
(4) Mesa de reemplazo:
ElephantEye se refiere a la idea de diseño del programa de ajedrez chino "Running Horses", utiliza tablas de reemplazo de doble capa siempre cubiertas y en profundidad, y adopta una estrategia de actualización de la tabla de reemplazo de corrección de límites de salida baja (alta).
(5) Corte en blanco con inspección:
ElephantEye usa recorte vacío con R=2 y usa recorte vacío marcado en la etapa final.
(6) Profundización iterativa/movimientos para comer niños/movimientos asesinos/inspiración en la tabla histórica:
La clasificación de movimientos de ElephantEye es muy simple y clara, seguida de movimientos iterativos de profundización, buenos movimientos de captura, movimientos asesinos y movimientos generativos ordenados por la tabla de historial.
(7) La general/única ampliará:
Para extensiones selectivas, ElephantEye utiliza extensiones generales y solo generales.
(8) Búsqueda de variantes principales Alfa-Beta:
ElephantEye utiliza la búsqueda recursiva tradicional de variantes primarias Alfa-Beta.
(9) Biblioteca inicial:
La biblioteca de aperturas de ElephantEye contiene un total de 10.000 movimientos simétricos, extraídos de 8.000 partidas importantes en competiciones nacionales individuales de ajedrez, competiciones por equipos, Copa Wuyang, ligas y otros juegos de 1990 a 2005.
(10) Estrategias de pensamiento y asignación de tiempo entre bastidores:
ElephantEye admite la función de pensamiento en segundo plano y proporciona dos estrategias de asignación de tiempo, basada en períodos y horas extra, que asignarán automáticamente el tiempo de manera razonable.
6. Apertura de biblioteca
La biblioteca de aperturas de ElephantEye puede ser producida por "ElephantEye Opening Library Maker". Después de ejecutar la herramienta de producción, primero debes seleccionar la carpeta donde se encuentra el registro del juego PGN y luego guardarlo como un archivo de biblioteca de apertura (generalmente BOOK.DAT). Generalmente, cuanto mayor sea el número de registros de ajedrez utilizados para generar la biblioteca de aperturas, mayor será el archivo de la biblioteca de aperturas generada.
Para que la biblioteca de apertura producida sea efectiva para ElephantEye, solo necesita reemplazar BOOK.DAT en el directorio de ElephantEye con el archivo de biblioteca de apertura generado. También puede especificar el archivo de biblioteca de apertura en el cuadro de diálogo "Configuración del motor" de <Chess. Asistente>.
7. Biblioteca de funciones de evaluación de situaciones
ElephantEye A partir de la versión 2.1, la parte de búsqueda y la parte de evaluación de situación del programa se han separado. La parte de búsqueda se combina con la parte de evaluación de situación llamando a funciones API.
Otros programadores de ajedrez pueden jugar más libremente gracias a ElephantEye. Según el acuerdo LGPL, las dos partes de búsqueda y evaluación de situación se tratan como bibliotecas de programas independientes. Para utilizar cualquier parte, solo es necesario revelar el programa fuente de esa parte. En otras palabras, si la parte de evaluación de la situación no utiliza ningún código abierto, entonces el programador no tiene la obligación de revelar el programa fuente de esta parte, y lo mismo ocurre con la parte de búsqueda.
La interfaz de función API de evaluación de situación de ElephantEye se define de la siguiente manera:
A. Nombre del motor de evaluación de situaciones: const char *GetEngineName(void);
B. Interfaz de la función de evaluación previa de posición: void PreEvaluate(PositionStruct *lppos, PreEvalStruct *lpPreEval);
C. Interfaz de la función de evaluación de posición: int Evaluate(const PositionStruct *lppos, int vlAlpha, int vlBeta);
Entre ellos, PositionStruct y PreEvalStruct deben ajustarse a las estructuras definidas en position.h y pregen.h respectivamente.
8. Programa fuente
El programa fuente de ElephantEye incluye 9 módulos, el contenido es aproximadamente el siguiente:
(1) ucci.h/ucci.cpp
Módulo de interpretación de comandos UCCI, que incluye programas de recepción de entradas de línea en Windows y Unix;
(2) pregen.h/pregen.cpp
Módulo para generar matrices Zobrist y mover tablas preestablecidas. La tabla preestablecida de ElephantEye se divide en dos partes. Una es la tabla preestablecida para piezas de ajedrez deslizantes (sin incluir piezas, torres, cañones y cualquier otra pieza). La segunda es la tabla preestablecida de movimientos. otras piezas de ajedrez, lo que evita engorrosos juicios de límites al generar movimientos.
(3) posición.h/posición.cpp
Describe principalmente la estructura de datos y las funciones de movimientos y situaciones. El procesamiento de la situación es el foco de este módulo. El contenido del procesamiento incluye inicialización de la situación, importación de cadenas FEN, movimiento de piezas de ajedrez, juicio racional del movimiento del asesino, juicio general, detección de líder y ciclo, ajuste del valor de las piezas. etc. También incluye tabla de valores de posición de 5 subfuerzas.
(4)genmoves.cpp
El generador de movimientos incluye dos tipos que generan movimientos que capturan piezas y movimientos que no capturan piezas, pero no solo pueden generar movimientos que eliminan generales. Mientras se generan los movimientos de comer niños, a cada movimiento se le asigna un valor MVV (LVA) (o cuasi-SEE) correspondiente. Este módulo también tiene una función que determina específicamente si las piezas de ajedrez están protegidas para calcular el valor MVV (LVA). Para piezas de ajedrez protegidas, calcula el valor MVV-LVA (sin contar si es menor que cero). , solo calcule el valor MVV. Por lo tanto, en este módulo también se incluye el programa para determinar si una pieza de ajedrez tiene raíz.
(5) hash.h/hash.cpp
El módulo de gestión de tablas de sustituciones, tablas de historial y listas de movimientos incluye la asignación y el acceso a tablas de sustituciones, la adquisición de variaciones importantes y otras operaciones.
(6) libro.h/libro.cpp
Apertura del módulo de lectura de la biblioteca.
(7) moversort.h/movesort.cpp
Mover módulo de clasificación de listas.
(8) buscar.h/search.cpp
Además de los tres procesos principales de búsqueda estática, búsqueda completa y búsqueda de nodo raíz, el módulo de búsqueda también incluye control de profundización iterativo, pensamiento en segundo plano, asignación de tiempo, estadísticas de parámetros de búsqueda y salida de información de búsqueda. Este módulo es el módulo principal de todo el programa.
(9) eleeye.cpp
Programa principal (es decir, función principal).
(10) preeval.h/preeval.cpp
Pregenerador de matriz de posición de subpotencia, ElephantEye ajusta linealmente la matriz de posición de subpotencia en función de los dos parámetros de "ofensiva/defensa" y "apertura/medio juego/final del juego".
(11) evaluar.cpp
En cuanto a la función de evaluación de la situación, ElephantEye adopta un mecanismo de evaluación perezoso de cuatro niveles. El nivel más aproximado solo evalúa patrones de ajedrez especiales, un nivel adicional evalúa la contención, un nivel adicional evalúa la flexibilidad de la torre y el nivel más alto también evalúa la obstrucción. del caballero.
9. Rendimiento del programa
El diseño de ElephantEye se centra en algoritmos de búsqueda, pero carece relativamente de conocimiento. En un procesador de 2,8 GHz, se pueden buscar aproximadamente 1.000.000 de nodos por segundo (incluidas la búsqueda normal y la búsqueda estática), y se pueden buscar aproximadamente 11 capas en una situación típica de medio juego en 1 minuto.
En términos de potencia de ajedrez, ElephantEye está al mismo nivel que programas como "Qiyin" y SaoLa (Chess Challenger). Sin embargo, debido a fallas en la función de evaluación de posiciones, ElephantEye está lejos de ser el mejor software de ajedrez comercial (Xie Master, Familia Xiangqi, Xiangqi Qibing, Qi). Todavía hay una cierta brecha.
ElephantEye ha sido probado en sitios web de juegos de ajedrez como Lianzhong y Yitian. Medido por puntos de calificación, el récord de Lianzhong.com es de alrededor de 2.500 puntos, el récord de ajedrez rápido de Yitian es de alrededor de 2.000 puntos y el de ajedrez lento es de alrededor de 1.500 puntos.
En septiembre de 2005, con la ayuda del Sr. Shi Jinshan, un entusiasta del software de ajedrez taiwanés, ElephantEye participó en la competencia grupal de ajedrez chino de la décima Olimpiada de Computación ICGA celebrada en Taipei, con un récord de 7 victorias, 5 derrotas y 14 derrotas entre 14 programas Clasificado 11; agosto de 2006 ElephantEye. Participó en el primer campeonato nacional de videojuegos celebrado en Beijing, con un récord de 7 victorias, 2 derrotas y 11 derrotas, ocupando el séptimo lugar entre 18 programas.
10. Recursos relacionados
El programa fuente de ElephantEye se publica en el proyecto XiangQi Wizard de SourceForge y su página es:
http://sourceforge.net/projects/xqwizard/
La mejora de la versión de ElephantEye se publica sincrónicamente en tiempo real en el sitio SVN de SourceForge. La dirección de acceso es:
https://xqwizard.svn.sourceforge.net/svnroot/xqwizard/
Puede utilizar programas cliente SVN como TortoiseSVN para obtener el código más reciente (completamente sincronizado con los desarrolladores). La dirección de introducción y descarga de TortoiseSVN es:
http://sourceforge.net/projects/tortoisesvn/
ElephantEye debe ejecutarse bajo un programa de ajedrez que admita UCCI (como <Chess Wizard>). El programa de instalación <Chess Wizard> contiene la última versión de ElephantEye.
<Chess Wizard> se puede descargar desde el siguiente sitio web:
http://www.skycn.com/soft/24665.html (estación de software Sky)
http://www.onlinedown.net/soft/38287.htm (Parque de software Huajun)
Además del programa fuente de ElephantEye, el paquete del programa fuente de ElephantEye también incluye los siguientes módulos adicionales:
(1) Código base (base): proporciona instrucciones de ensamblaje, llamadas a funciones del sistema y otras funciones;
(2) Módulo de reglas de ajedrez chino (ccess): proporciona una interfaz para que otro software utilice el código ElephantEye;
(3) Módulo de producción de biblioteca de apertura (BOOK): el código para crear la biblioteca de apertura BOOK.DAT;
(4) UCCI Engine League Simulator (LEAGUE): proporciona una plataforma automática de partidos por lotes para pruebas y competiciones de motores UCCI;
(5) UCCI Engine Search Tree Analyzer (TREE): una herramienta de análisis de rutas de búsqueda para el motor UCCI (compatible con UCCI 2.2+);
(6) Herramientas de registros de ajedrez XQF (XQFTOOLS): proporciona herramientas para convertir XQF y otros registros de ajedrez a PGN;
(7) Adaptador Light Red Chess (UCCI2QH): proporciona una interfaz para que Light Red Chess llame al motor UCCI;
(8) El motor de ajedrez rojo claro admite el adaptador UCCI (QH2UCCI): proporciona una interfaz para que el ajedrez rojo claro "Dream Egg" se una a la prueba del motor UCCI;
(9) BBS Chess (BBSCHESS): una herramienta de configuración de posiciones de ajedrez hecha con Visual Basic, que puede pegar posiciones de ajedrez de colores en el BBS de varias universidades;
(10) Generador de imágenes de tablero de ajedrez (FEN2BMP): una herramienta práctica que puede convertir archivos FEN de ajedrez y ajedrez chino en archivos BMP;
(11) Conversión de codificación (códec), incluida la transcodificación simplificada y tradicional, la transcodificación de texto UNIX, la transcodificación Base64, etc.;
(12) Otras herramientas (MISC): incluida la comunicación de red simple, pruebas de tuberías y otras herramientas;
(13) Documento de documentación (DOC): a saber, la serie "Exploración de la programación del ajedrez chino";
(14) Récords de ajedrez participantes (CCGC): todos los récords de ajedrez de ElephantEye que participan en el primer Campeonato Nacional de Juegos por Computadora (CCGC).
Si desea obtener información más detallada sobre ElephantEye, puede iniciar sesión en el sitio web de la Enciclopedia Xiangqi:
http://www.xqbase.com/