¿Alguna vez te has preguntado cómo funciona la computadora? LocalChess decide que jugar? No es mágico y no está conectado a un servidor: todo el oponente se ejecuta en la pestaña de su navegador, en su propio procesador, en aproximadamente 43 KB de JavaScript.
La mayoría de los artículos sobre "cómo funcionan los motores de ajedrez" describen Stockfish, un programa con redes neuronales y una evaluación de mil líneas. Este describe un pequeño motor sobre el que puedes razonar de principio a fin, con los números reales que utiliza. Todo lo que aparece a continuación es lo que hace el código enviado, no una simplificación.
Las cuatro etapas de una mudanza
Cada vez que le toca el turno a la computadora, el motor ejecuta el mismo proceso:
- generar cada movimiento legal en el puesto.
- Buscar adelante a través de las posiciones resultantes, alternando lados.
- evaluar las posiciones tranquilas que alcanza, anotándolas en centipeones.
- elegir el movimiento que conduce a la mejor puntuación que puede garantizar.
Las partes interesantes son cómo mantiene las etapas 2 y 3 lo suficientemente rápidas como para ejecutar entre movimientos sin congelar la página.
Etapa 1: Generar movimientos legales
Antes de elegir, el motor necesita sus opciones: cada empujón de peón, salto de caballo, captura, promoción, al paso y enroque mover las reglas lo permiten. Esta es la misma lógica de reglas que detiene tu hacer un movimiento ilegal, por lo que el motor nunca puede hacer trampa: juega exactamente con las limitaciones que usted tiene.
Una posición típica de medio juego tiene entre 30 y 40 movimientos legales. Ese número es el motivo por el que buscar con anticipación se vuelve costoso tan rápidamente: mirar cuatro movimientos en profundidad en 35 opciones cada uno equivale aproximadamente a 1,5 millones de posiciones si se marcan todas. Las siguientes dos secciones tratan sobre no hacer eso.
Etapa 2: Evaluación: convertir una posición en un número
El motor gana posiciones en centipones, donde 100 = un peón. La base es material:
Pawn = 100 Rook = 500
Knight = 320 Queen = 900
Bishop = 330 King = not counted
Dos detalles dignos de mención. El obispo vale 330 a 320 del caballo — una ventaja deliberada de 10 centipones que refleja el mayor alcance del alfil en posiciones abiertas. Es lo suficientemente pequeño como para que el motor siga cambiando un alfil por un caballo cuando la posición lo requiera, pero sin nada más que separe dos opciones, prefiere quedarse con el alfil. Y el rey no tiene valor material alguno, porque nunca es capturado: perderlo se trata por separado como jaque mate, puntuado en 1.000.000, un número elegido para eclipsar cualquier total material, de modo que ninguna cantidad de material supere nunca al mate.
Sin embargo, el material por sí solo produciría un motor muy estúpido. Felizmente dejaría los caballos en el aro y su rey en el centro, porque eso no cuesta nada materialmente. Entonces, además del material, el motor agrega un mesa cuadrada — una cuadrícula por pieza de 64 pequeñas bonificaciones y penalizaciones que codifica el sentido común posicional:
- Caballeros anotar −50 en las esquinas y +20 en los cuatro cuadrados centrales: 70 puntos
swing, la mayor parte de un peón. Un caballo en el aro alcanza cuatro casillas; uno en el centro llega a ocho, y el precio de la mesa es exactamente eso.
- peones se vuelven más valiosos a medida que avanzan: +25 por ocupar d4 o e4, subiendo a +50
en toda la séptima clasificación donde el ascenso está a un paso de distancia. Los cuadrados d2 y e2 llevan un −20 pena, que es la forma en que se le dice a la máquina que juegue con sus peones centrales en lugar de dejarlos en casa.
- torres obtener +10 en la séptima fila, codificando el antiguo principio de que una torre en la
El séptimo vale más de lo que sugiere el material que contiene.
- el rey obtiene +30 en b1 y g1: las casillas en las que aterriza después
enroque – y sanciones de hasta -50 por deambular en el tablero. Esta es la razón por la que el motor se enroca antes de tiempo sin que se lo indiquemos.
Hay una honesta limitación en esa última tabla. El motor utiliza la misma mesa de reyes en el final que en el medio juego, sin detección de fase. Pero en un final el consejo se invierte: con las damas fuera, el rey es una pieza combatiente y debe marchar hacia el centro, que es precisamente lo que desalienta una penalización de -50 en d5. De modo que el motor mantiene a su rey escondido mucho después de haberlo activado. Si quieres vencer a Hard, Actividad del rey en el final. es el lugar más confiable para encontrar un borde que no puede ver.
El resultado es un único número, positivo si el lado a mover es mejor. Ese número es exactamente lo que impulsa el barra de evaluación al lado del tablero.
El jaque mate, el estancamiento, la repetición triple y las posiciones empatadas tienen un caso especial antes de cualquiera de estas ejecuciones: el mate devuelve la puntuación extrema y cada tipo de empate devuelve exactamente 0.
Etapa 3: Mirando hacia el futuro con negamax y alfa-beta
Evaluar sólo la posición actual es miope: tomaría un peón libre y daría mate en el siguiente movimiento. Entonces el motor mira hacia adelante usando negamax, una forma compacta de minimax que explota una clara simetría: una posición que obtiene +3 para mí, obtiene -3 para ti. Entonces, en lugar de escribir una lógica de "maximizar" y "minimizar" por separado, escribe una función y gira el signo en cada nivel.
Por sí solo, eso todavía significa visitar todas las sucursales. El motor evita la mayoría de ellos con poda alfa-beta, que rastrea la mejor puntuación que cada lado puede forzar. En el momento en que una rama resulta peor que algo ya garantizado, el resto de esa rama es irrelevante (el oponente nunca lo permitiría), por lo que se abandona sin buscarla. En la práctica, esto corta enormemente el árbol sin cambiar el movimiento elegido: la respuesta es idéntica a buscarlo todo, sólo que mucho más rápido.
Quiescencia: no detenerse a mitad del negocio
Aquí hay una trampa clásica llamada efecto horizonte. Si la búsqueda se detiene exactamente en cuatro movimientos y el cuarto movimiento resulta ser tu reina captura un peón defendido, el motor ve "peón +1" y declara que la posición es buena, sin darse cuenta de que en la jugada cinco se recupera la reina.
La solución es búsqueda de quietud. Cuando la búsqueda principal se queda sin profundidad, no se detiene en seco; sigue adelante pero mira captura solo, hasta llegar a una posición tranquila donde no quede nada colgando. Es por eso que el motor no cuelga piezas en el borde de su ventana de búsqueda, y es la única característica que más separa a un bot que se siente competente de uno que se siente aleatorio.
Profundización iterativa y presupuesto de tiempo.
El motor no salta directamente a su máxima profundidad. Busca la profundidad 1, luego la profundidad 2, luego la 3, manteniendo el mejor movimiento encontrado hasta el momento. Esto suena un desperdicio (se rehace el trabajo en cada pasada), pero las pasadas poco profundas son mucho más baratas que las profundas, por lo que los gastos generales son pequeños y se compra algo valioso: El motor siempre tiene listo un movimiento legal y sensato..
Eso es importante porque cada movimiento también conlleva una fecha límite. Si una búsqueda explota (la causa habitual es una posición táctica con largas cadenas de captura), se activa la fecha límite, se descarta la búsqueda parcial y el motor realiza el mejor movimiento desde la última profundidad que finalizó. La página nunca se congela esperando al bot, que es la única razón por la que existe la fecha límite.
¿Qué cambia realmente entre Fácil, Medio y Difícil?
Aquí es donde la mayoría de los sitios son vagos. La configuración exacta:
| Nivel | Profundidad de búsqueda | Presupuesto de tiempo por movimiento | Posibilidad de movimiento aleatorio | | --- | --- | --- | --- | | fácil | 2 capas | 250 ms | 35% | | Medio | 3 capas | 500 ms | ninguno | | duro | 4 capas | 1100 ms | ninguno |
Una "capa" es el movimiento de un lado, por lo que la profundidad de 4 de Difícil significa que ve dos de sus propios movimientos y dos de los tuyos, además de las cadenas de captura que sigue la inactividad después de ese punto.
Vale la pena detenerse en la columna Fácil. El 35% de las veces, Easy ignora por completo su búsqueda y realiza un movimiento legal aleatorio. No se trata de una evaluación debilitada ni de un plan más superficial; es un movimiento realmente bueno aproximadamente dos tercios de las veces y el resto es un lanzamiento de moneda. Esta es una elección de diseño deliberada para principiantes: significa que Easy colgará piezas de una manera que un motor simplemente superficial nunca lo haría, dándole al nuevo jugador oportunidades reales de castigar un error.
También significa una cosa que vale la pena saber: Si Easy juega algo desconcertante, es posible que no haya ninguna idea detrás de ello. No pierdas cinco minutos buscando el plan. Contra Medio y Difícil, cada movimiento es el resultado de una búsqueda real, por lo que un movimiento de apariencia extraña generalmente tiene sentido.
¿Por qué se reproduce como lo hace?
Conocer los aspectos internos te dice cómo jugarlo, que es realmente el punto:
- No juega ningún movimiento de libro. Hay una pequeña tabla de aperturas en el código, pero existe.
solo para nombre la apertura que jugaste y etiquetar los primeros movimientos como "libro" en el análisis; el motor nunca lo consulta al elegir. Cada movimiento desde el primer movimiento se busca desde cero, por lo que juega aperturas razonables pero poco librescas y abandona la teoría casi de inmediato.
- Es mejor táctico que estratega. Cuatro capas más quietud atrapan a la mayoría de los cortos.
tácticas, pero un plan que da resultados en diez movimientos es completamente invisible para él. Las posiciones cerradas y lentas son donde es más débil.
- No caerá en trampas profundas, pero sí caerá en ataduras a largo plazo. si tu idea
Necesita tres movimientos para funcionar, lo verá. Si necesita doce, no los necesitará.
Hay un tratamiento estratégico más completo de esto en cómo jugar ajedrez contra la computadora.
El mismo motor revisa tu juego.
cuando golpeas Analizar juego después de una coincidencia, se vuelve a ejecutar el mismo código, no un analizador diferente y más potente. Para cada posición, busca dos veces: una vez para el movimiento que realmente realizaste, otra vez para el mejor movimiento que puede encontrar, ambos a la misma profundidad y ambos usando la quietud en las hojas. La diferencia entre esas dos puntuaciones es la pérdida de centipones en ese movimiento.
Debido a que ambas búsquedas se realizan con la misma profundidad real, los números son internamente consistentes: estás comparando cosas similares. No son juicios absolutos de grado Stockfish, sino para detectar donde Un juego terminado, son confiables. Si la búsqueda se interrumpe antes de la fecha límite, el resultado parcial se descarta en lugar de informarse, por lo que el análisis se degrada a una profundidad menor pero aún exacta en lugar de generar ruido silenciosamente.
Pruébalo tú mismo
Juega la misma apertura contra Fácil y luego Difícil y observa cómo se agudizan las respuestas. Entonces corre Analizar juego en ambos y compare las curvas de evaluación: el juego Fácil mostrará acantilados repentinos donde el dado de movimiento aleatorio se quedó corto, mientras que el juego Difícil muestra una línea más suave con pérdidas concentradas en momentos tácticos genuinos.
Todo se ejecuta en su dispositivo, razón por la cual también sigue funcionando sin conexión a internet.