Showing posts with label cómo saber si existe una combinación? Delphi 7. Show all posts
Showing posts with label cómo saber si existe una combinación? Delphi 7. Show all posts

Thursday, June 18, 2026

Buscar combinaciones en ajedrez con la computadora


 Todo ajedrecista que quiera mejorar, debe hacer ejercicios de táctica. Estos ayudan a crear la visión cuando hay una posible combinación, lo cual es básicamente un reconocimiento de patrones. El ajedrez se puede estudiar precisamente porque se repiten las situaciones. En ocasiones es difícil hallar el o los motivos que hacen que una combinación sea posible, pero claramente existen configuraciones, patrones, que nos permiten descubrir las posibilidades combinativas en ciertos momentos de la partida.

 Hoy tenemos muchos libros de ejercicios de táctica. ¿Cómo es que fueron escritos? El primero que se me ocurre es el de Fred Reinfeld, “1001 combinaciones de mate”. Se hizo cuando no había computadoras y probablemente el autor recolectó, a través de los años (tampoco había Internet), cientos de posiciones. Cuando tuvo 1001 mates interesantes, los plasmó en un libro. Fue una labor de años, probablemente. Hoy, sin duda, este trabajo es mucho más fácil de hacer.

 Por ejemplo, tenemos un ejército de youtubers e influencers, que cada vez que ocurre una combinación brillante en algún torneo, la publicitan en sus respectivos canales de videos. Así, viendo los canales de algunos de estos entusiastas creadores de contenido de ajedrez, podríamos ir recolectando partidas de forma mucho más sencilla.

 Pues bien, pensando en esto, se me ocurrió discurrir sobre la posibilidad de escribir una aplicación (software), para que dado un archivo PGN (una colección de partidas), me dijera el sistema en qué momento se dio alguna combinación.

 Evidentemente el problema es definir lo que es una combinación para la computadora. Algunos criterios podrían ser:

  •  ·         Secuencia forzada con ganancia material
  • ·         Mate en N jugadas
  • ·         Sacrificio seguido de ventaja clara
  • ·         Evaluación que cambia drásticamente (ej. +0.5 → +5.0)
  •  

Para ello podemos usar un motor de ajedrez como Stockfish, Houdini, etcétera. El único requisito sería usar el protocolo UCI para comunicarse con el programa de ajedrez para que nos ayudara en esta labor.

 El flujo sería algo como esto:

 Archivo PGN → Parser → Tablero posición por posición → Motor de ajedrez → Detección de combinación → Reporte

 Un detector de combinaciones debe entonces definir las reglas de esta manera:

  •  Si la evaluación cambia más de X puntos → posible combinación
  • Si hay sacrificio + mejora → combinación
  • Si hay mate en N → combinación

 Por ejemplo, el reporte potencial que debería entrega el software es:

 Partida 12 (Kasparov vs Topalov)

  • → Jugada 24: combinación detectada
  • → Evaluación: +0.3 → +6.5

 Habría que ver, más adelante, si puede saberse qué tipo de combinación es la que ocurre, por ejemplo:

 → Tipo: sacrificio + ataque

 pero por lo pronto, nos bastaría saber si el cambio radical en la valoración del motor de ajedrez, es suficiente como para definir que existe una combinación.

 Yo estoy convencido que no es un criterio absoluto y que habrá un alto porcentaje de combinaciones detectadas únicamente usando este criterio. No obstante, podrá haber "falsos positivos", con los que habrá que lidiar.

 Por ende, me senté a escribir mi analizador de partidas de ajedrez. La conexión entre el engine de ajedrez y mi programa (en Delphi 7), fue quizás lo más complicado. Primero usé un componente de terceros, pero parece que no usa threads  (hilos e ejecución, que son una forma de ejecutar código en paralelo al flujo principal de tu programa), y entonces la interfaz gráfica se congela de manera aleatoria. Gemini me dio la solución (y hasta me ayudó con el fragmento de código), y entonces todo fluyó.

 La imagen 1 muestra mi software evaluando una partida mía, en donde hice una simpática combinación al buen amigo, el Dr. en Física, Efraín Chávez, que reconozco, siempre tuvo mala suerte conmigo cuando nos tocó jugar (y que con él lo hemos comentado en más de una ocasión). La partida está analizada aquí.

 


Imagen 1

Nótese la valoración que da Stockfish en LiChess, la cual se mantiene bastante parecida. Las diferencias son porque LiChess tiene computadoras y servidores más robustos y rápidos. Sin embargo, en mi máquina se mantiene la misma forma de la gráfica (Véase la segunda imagen).

 


Imagen 2

Puede verse que el error del negro ocurre en la jugada 16, en donde pasa de +0.2 a +4.8. El cambio es muy brusco, lo que sugiere fuertemente una combinación (que de hecho, existe).

 ¿Para qué puede servir este software? Fácil: se puede poner una colección de partidas en formato PGN y pedirle al programa que analice automáticamente cada una de estas partidas e indique si se sospecha de una combinación, al haber un cambio brusco en la valoración.

 Ahora estoy trabajando sobre la interfaz con el archivo PGN. Sin embargo, los avances hasta ahora me tienen contento. Cabe decir que hay un sitio, https://chessgrammar.com/, el cual hace algo similar, pero es de paga (aunque da oportunidad de probarlo de forma gratuita). Hace algunas otras cosas, como reconocer algunos patrones tácticos. Se ve bien pero no sé qué tan efectivo sea. En cualquier casoo, cmo ejercicio de programación me parece una buena idea.

Seguiremos informando.