La mayoría de las personas que tienen algún programa de ajedrez ignoran la complejidad de crear un programa que juegue decentemente contra los seres humanos. Por ello, encontrar que alguien decidió hacer un dispositivo de ajedrez usando un microcontrolador PIC16F628A, resulta de verdad un reto fascinante, particularmente por las limitaciones del chip en cuestión: 3.5K de memoria flash y 224 bytes de RAM.
PIC Blitz es pues un dispositivo de ultra baja potencia, que juega ajedrez rápido. Sus características principales son:
- Reconoce todas las jugadas del ajedrez, enroque, captura al paso, promoción (coronación) a dama y cualquier otra pieza menor
- Se pueden poner los relojes de forma independiente para cada jugador, con 5 minutos para cada uno por omisión
- Puede jugar blancas o negras
- Puede hacer una búsqueda a profundidad variable, dependiendo del tiempo disponible
- Tiene una búsqueda negamax, con poda alpha-beta
- Ordenamiento rudimentario de las piezas (capturas antes de las no-capturas)
- Búsqueda extendida en capturas y en líneas forzadas
- Función de evaluación de posición, incluyendo material, estructura de peones (incluye peones doblados, aislados, retrasados y pasados), derechos a enrocar, seguridad del rey y centralización de piezas
- La función de evaluación cambia sus pesos en la medida que el juego progresa
- La función de evaluación prefiere las variantes agudas para juegos más entretenidos
- Libro de apertura básico (44 líneas, 137 posiciones)
Aparte de esto, que ya tiene características interesantes, usa las siguientes técnicas a pesar de su poder de procesamiento limitado:
- Considera sus jugadas (piensa) cuando el rival tiene el turno (‘pondering’)
- Interfaz minimalista
- Intento de desconcertar al enemigo contestando instantáneamente cuando ha acertado a la jugada que el rival va a hacer. De otra forma, el sistema pensará más tiempo la respuesta
- Despliegue con gráficas relativamente elementales, pero comprensibles, las piezas y el tablero
Cabe señalar que PIC Blitz no conoce las tablas por repetición de jugadas (cuando una posición se repite tres veces) o la regla de las cincuenta jugadas, que indica que es un empate si ningún bando ha capturado alguna pieza (o peón) o movido un peón
El hardware es un microcontrolador PIC16F628A, con un reloj overclockeado, con un cristal de 20 MHz. Los botones se conectan a los bits de los puertos de entrada y el LCD se conecta directamente a los pines de salida. Los controles son cinco botones, cuatro de los cuales (up, down, left y right) se usan para mover el cursor a cualquier parte del tablero, mientras que el botón de OK confirma la jugada. Podría desde luego usarse un joystick digital con un botón de ‘fuego’, en lugar del diseño original. El autor ha puesto el circuito impreso, el cual mide unos 50 mm cuadrados. El microcontrolador requiere de 5 V mientras se programa.
El programa está ligeramente comentado, y se puede obtener el código fuente del mismo. Es de código abierto, con licencia GNU GPL 2. PIC Blitz se escribió usando un conjunto de macros de C para representar las instrucciones del microcontrolador y se parece mucho al ensamblador en línea del BASIC BBC. Esto permitió al programador una simulación flexible y de prueba en la fase de desarrollo.
Otros proyectos de ajedrez por computadoras que corrieron en microprocesadores antiguos fueron por ejemplo, la máquina Boris, que usaba un procesador de 8 bits con solamente 2.5 Kbytes de ROM y 256 bytes de RAM. Los programadores, sorpréndase, hallaron lugar para poner en el display de la maquinita comentarios al momento de jugar. El engine Micro-max, de Harm-Geert Muller, se ha portado, por ejemplo, a la arquitectura de 8 bits Atmel AVR, por Andre Adrian. El diseño apareció en la revista Elektor de noviembre del 2009 y usa un ATmega88 con 8 kbytes de memoria flash (más del doble que el PIC 16F628A) y 1 kbyte de RAM (más de cuatro veces el PIC). La razón principal para el uso de RAM parece ser que permite hacer más grande el stack a 34 bytes por ply (por movimiento). PIC Blitz usa seis bytes por ply. Para terminar, Arthur Benemann ha escrito un programa llamado picChess con salida a video. Corre en un DSPIC33 que tiene mucha memoria flash y RAM. El código total parece ser de 46 kbytes pero no está claro cuanto usa para el programa de ajedrez.
En mi opinión, este es un trabajo notable y a quien le interese el ajedrez por computadora, está claro que puede tener un modelo interesante que revisar aquí.
Referencias: