Mucha gente en Occidente tiene su primer contacto con el Go a través del reglamento japonés. Sin embargo, es un poco caótico, con varios parches, y peor aún, algunos libros parecen intentar ocultar la complejidad. El Go ya es un juego complejo de por sí, pero las reglas no necesitan serlo; la complejidad es una propiedad emergente, y por eso precisamente es un juego tan interesante. Si estás cómodo con las mates de primero de carrera y quieres conocer un conjunto de reglas bien definido, sigue leyendo. Vamos a hablar del reglamento Tromp-Taylor, que quizá sea el más elegante y breve de todos. Pero no te preocupes: Go con Tromp-Taylor es Go, y en la práctica casi cualquier reglamento da el mismo resultado en casi todos los casos. No es un reglamento exótico, es el simplemente el más sencillo y el que se presta a este tipo de análisis.

Aviso: estrictamente hablando, las reglas expuestas en este post son una generalización de las reglas Tromp-Taylor a NN jugadores y grafos finitos, arbitrarios y no dirigidos. Por lo demás, me estoy desviando de esas reglas lo mínimo posible. Creo que parte de lo bonito del juego solo se aprecia si lo ves generalizado.

Go en la vida real

Es un juego de tablero para dos jugadores que se juega por turnos con piedras negras y blancas. El tamaño de tablero más común e importante es 19x19. El objetivo es (aprox) rodear más territorio que el otro jugador, y en cada turno el jugador puede colocar una piedra en cualquier lugar del tablero, siempre y cuando el punto no esté ya ocupado por otra piedra (con algunas otras restricciones en las que ya entraremos luego). Las piedras se quedan donde están toda la partida (no se pueden mover) salvo que haya que retirarlas porque han muerto.

En este post voy a usar mucho un tablero de 9x9 para los ejemplos, pero al final veremos otros grafos más interesantes.

Definiciones matemáticas

Tablero, partida, puntos

El Go se juega sobre un grafo finito y no dirigido

G=(V,E)G = (V, E)

donde VV es el conjunto de vértices/nodos y EE es el conjunto de aristas/conexiones entre ellos (EE de “Edges”, el post original lo escribí en inglés y quiero preservar la notación).

Los nodos del grafo pueden estar coloreados/etiquetados. Para NN jugadores, sea el conjunto de colores:

C={0,c1,,cN}\mathcal C = \{\mathsf 0, c_1, \ldots, c_N\}

Para el caso especial de dos jugadores uso:

C={0,B,W}\mathcal C = \{\mathsf 0, \mathsf{B}, \mathsf{W}\}

( Por "Black", "White", pero normalmente escribireˊ Negro, Blanco, Vacıˊo. Uso c minuˊscula para colores concretos).(\text { Por "Black", "White", pero normalmente escribiré Negro, Blanco, Vacío. Uso } c \text{ minúscula para colores concretos).}

Una coloración del tablero es una función:1

λ:VC\lambda: V \to \mathcal C

Un punto es simplemente un vértice vVv \in V, y su color es λ(v)\lambda(v).

Una piedra es un punto no-vacío.

Como el grafo no cambia durante la partida, podemos decir que una partida jugada durante nn turnos es una sucesión de coloraciones:

(λi)=λ0,...,λn(\lambda_i)=\lambda_0, ..., \lambda_n

(donde λ0\lambda_0 es la coloración antes de que ningún jugador haya hecho nada)

Una consecuencia inmediata de lo anterior en los tableros típicos de Go es que las piedras colocadas diagonalmente entre sí no son adyacentes:

Ejemplo 1
Diagrama de tablero de Go
AA es adyacente (toca) a BB, CC, DD y EE, pero no a FF ni a GG.

Alcanzar

Se dice que un punto P0P_0 con color c0c_0 alcanza el color c1c0c_1 \neq c_0 si y solo si existe un camino de puntos de color c0c_0 que termina adyacente a un punto de color c1c_1. Es decir, P0P_0 alcanza c1c_1 si y solo si:

 un camino (P0,,Pm),QV\exists \text{ un camino } (P_0, \ldots, P_m), \exists Q \in V

tal que:

λ(Pi)=c0:(i=0,,m),λ(Q)=c1,{Pm,Q}E \lambda(P_i)=c_0 : (i=0,\ldots,m),\quad \lambda(Q)= c_1, \quad \left\{P_m,Q\right\} \in E

(La última parte significa que PmP_m y QQ son adyacentes porque existe una arista entre ellos. Fíjate también en que m=0m=0 está permitido; simplemente significa que P0P_0 es directamente adyacente).

Cuando QQ es Vacío y PmP_m no es vacío, QQ se llama una libertad de la componente conexa que contiene a PmP_m.

En el ejemplo de abajo consideramos varios casos a la vez.

Ejemplo 2
Diagrama de tablero de Go

Este es un tablero posible, aunque sería muy raro que ocurriese (jugadas muy artificiales).

  • AA solo alcanza Vacío, no alcanza Negro.
  • BB, en cambio, sí alcanza Negro (y Vacío). Hay un camino blanco desde BB hasta un punto negro.
  • CC solo alcanza Blanco (CC es un punto vacío y hay muchos caminos formados por puntos vacíos desde CC hasta un punto blanco).
  • DD alcanza tanto Blanco como Negro.
  • No puede decirse que BB alcance Blanco, aunque toque un punto blanco, porque alcanzar solo se define para colores distintos.
  • Por la misma razón, no puede decirse que CC y DD alcancen Vacío.

Limpieza

Ahora nos interesan las piedras/puntos que no alcanzan Vacío. Cuando describamos el bucle real de la partida veremos que esas piedras están muertas.2

Ejemplo 3
Diagrama de tablero de Go
La piedra/punto negra no alcanza Vacío y por tanto está muerta.
Ejemplo 4
Diagrama de tablero de Go
Ninguna de las piedras blancas alcanza Vacío; también están muertas.

Supongo que intuitivamente ves que los puntos blancos como los de arriba forman un grupo tal que, si uno de los puntos alcanza Vacío, todos lo hacen.

Proof

Sea GcGG_c \subseteq G el subgrafo de puntos coloreados cc, y sea SGcS \subseteq G_c una componente conexa de GcG_c (es decir, un subgrafo de GcG_c donde para cada par de puntos existe un camino de uno al otro y el subgrafo no puede agrandarse sin romper la conexidad).

Proposición: Si BSB \in S alcanza Vacío, AA alcanza Vacío AS\forall A \in S.


Demostración: Como BB alcanza Vacío, existe un camino BC=(B,,C)GcBC = (B, \ldots, C) \subseteq G_c desde BB hasta algún punto CC adyacente a un punto vacío DD del grafo completo GG. Como SS es una componente conexa de GcG_c, también tenemos que CSC \in S. Eso significa que, para cada ASA \in S, existe un camino ACGcAC \subseteq G_c que termina en CC, que es adyacente a DD. Por tanto, AA alcanza Vacío.\square

Ejemplo 5
Diagrama de tablero de Go
Este grupo blanco está vivo por ahora (uno de sus puntos es adyacente a un punto vacío, así que todos alcanzan Vacío), pero es fácil ver que va a morir si Blanco no hace algo al respecto.

Limpiar un color cc significa encontrar todos los puntos de ese color que no alcanzan Vacío y cambiar su color a Vacío. En el ejemplo 4, esto se correspondería con retirar las piedras blancas muertas.

Fíjate en que limpiar Vacío está permitido por esta definición, pero hacerlo no cambia nada.

Jugadas

Una jugada la realiza un jugador, y consta de 3 pasos:

  1. Cambiar el color de un punto vacío al color de ese jugador. (En la vida real, esto corresponde a colocar una piedra del color de ese jugador).
  2. Limpiar el color de cada rival (simultáneamente).
  3. Limpiar el color propio.

Esto se ve mejor con un ejemplo.

Ejemplo 6
Tablero de Go animado
Al principio hay 7 piedras blancas. Blanco coloca una octava, lo cual no produce ninguna limpieza. Luego, Negro coloca una piedra y limpia dos grupos de piedras blancas (las 7 piedras marcadas con □ y la piedra individual marcada con △). Después de eso, no hace falta limpiar ninguna piedra negra, aunque por un instante parezca que la piedra negra no alcanza Vacío.

El ejemplo anterior muestra que el orden de limpieza es importante: puedes colocar la piedra negra en un punto donde no alcanzaría Vacío y aun así no muere, porque primero limpia las piedras blancas. Después de la limpieza, la piedra negra sí alcanza Vacío, así que no se limpia en el paso 3.

En realidad, es imposible limpiar a la vez algunas piedras enemigas y piedras propias en la misma jugada. Lo de abajo es más bien una pseudo-demostración de palabra.

Proof

Suponemos sin pérdida de generalidad que es el turno de Negro.

Notación. Sea:

  • λ\lambda la coloración al comienzo de un turno de Negro.
  • μ\mu la coloración después de colocar la piedra negra en PP.
  • ν\nu la coloración después de limpiar todos los colores rivales, pero antes de limpiar Negro.
  • λfinal\lambda_{\mathrm{final}} la coloración al final del turno.
  • Por “cluster” entenderemos una componente conexa AA donde todos los puntos son del mismo color no vacío.
  • El conjunto de libertades de un cluster AA bajo la coloración φ\varphi es Lφ(A)L_{\varphi}(A). Como todo punto no vacío XX pertenece a un único cluster bajo una coloración φ\varphi, y las libertades se definen solo para clusters, también podemos escribir Lφ(X)L_{\varphi}(X) como abreviatura de Lφ(A)L_{\varphi}(A).
  • Interpretamos λ(A)\lambda(A) como λ(X)\lambda(X) para algún XAX \in A. Como AA es un cluster, todos sus puntos tienen el mismo color.

Proposición:

Supongamos que todo cluster alcanza Vacío antes de que Negro juegue.

Sea PVP\in V el punto vacío donde Negro juega, es decir:

λ(P)=0,μ(P)=B,μ(X)=λ(X)XP\lambda(P)=\mathsf 0, \quad \mu(P) = \mathsf B, \quad \mu(X)=\lambda(X)\quad \forall X\neq P

(es decir, PP empieza vacío, se vuelve negro, y ningún otro punto se vuelve negro).

Vamos a probar que, si existe algún conjunto de puntos SVS \subset V que forma un cluster rival bajo λ\lambda y que se limpia después de la jugada, es decir:

Sλ(S)=c: and :λfinal(Y)=0YS \exists S \mid \lambda(S) = c : \text{ and } : \lambda_{\mathrm{final}}(Y) = \mathsf 0 \quad \forall Y \in S

entonces la piedra recién colocada no se limpia:

λfinal(P)=B(1)\lambda_{\mathrm{final}}(P)=\mathsf B \tag {1}

y tampoco se limpia ningún cluster negro preexistente, es decir:

λ(X)=B    λfinal(X)=B(2)\lambda(X)=\mathsf B \implies \lambda_{\mathrm{final}}(X)=\mathsf B \tag {2}

Demostración:

Paso 1 (λμ\lambda \to \mu): Colocar una piedra en PP.

Como ya se ha dicho, μ(P)=B\mu(P)=\mathsf B y ningún otro punto cambia de color.

Paso 2 (μν\mu \to \nu): Limpiar rivales.

Los puntos negros no cambian, así que en particular ν(P)=B\nu(P)=\mathsf B.

Sea SS un cluster rival limpiado después de que Negro juegue en PP. Entonces

Lλ(S),Lμ(S)=L_\lambda(S)\neq\varnothing, \quad L_\mu(S)=\varnothing

y el único punto que cambió de color entre λ\lambda y μ\mu fue PP; por tanto, PP era la única libertad restante, es decir:

Lλ(S)=PL_\lambda(S)={P}

Así que existe algún QSQ\in S adyacente a PP, es decir, Q,PE{Q,P}\in E.

Como SS se limpia al pasar de μ\mu a ν\nu, en particular, QQ se limpia: ν(Q)=0\nu(Q)=\mathsf 0.

Paso 3 (νλfinal\nu \to \lambda_{\mathrm{final}}): Limpiar Negro.

Como ν(Q)=0\nu(Q)=\mathsf 0 y PP y QQ son adyacentes, PP tiene una libertad bajo ν\nu, es decir, QLν(P)Q \in L_\nu(P).

Por tanto, la componente negra que contiene a PP alcanza Vacío y no se limpia:

λfinal(P)=B\lambda_{\mathrm{final}}(P)=\mathsf B

Esto prueba (1)(1).

Ahora sea HH cualquier componente conexa negra bajo ν\nu.

  • Si PHP\in H, entonces Lν(P)=Lν(H)L_\nu(P)=L_\nu(H)\neq\varnothing. Alcanza Vacío y por tanto no se limpia.
  • Si PHP\notin H, entonces HH consiste solo en piedras negras que ya estaban presentes antes de la jugada. Eso significa que alcanzaba Vacío bajo λ\lambda a través de un punto vacío RR distinto de PP (si PP fuera una libertad de HH bajo λ\lambda, PP estaría en HH después del Paso 1). Como RPR \neq P, λ(R)=μ(R)=ν(R)=0\lambda(R)=\mu(R)=\nu(R)=\mathsf 0. HH alcanza Vacío bajo todas esas coloraciones y por tanto no se limpia.

Esto prueba (2).\square

Fíjate en que añadimos el tercer paso porque colocar una piedra donde moriría está permitido bajo las reglas Tromp-Taylor (no así en otros reglamentos, donde ese “suicidio” está prohibido).

Territorio y puntuación

El territorio del color c0c \neq \mathsf 0 es el conjunto de puntos vacíos que solo alcanzan cc:

Tc(λ)={PVλ(P)=0,:P reaches only c}T_c(\lambda) = \left\{P \in V \mid \lambda(P)=\mathsf 0, : P \text{ reaches only } c \right\}

La puntuación de un color de jugador cc es el número de puntos de su color más el territorio de ese color. En mates:

Vc(λ)={PVλ(P)=c}V_c(\lambda) = \left\{P \in V \mid \lambda(P)=c \right\}

score(λ;c)=Vc(λ)+Tc(λ)+K(c)\operatorname{score}(\lambda; c) = |V_c(\lambda)| + |T_c(\lambda)| + K(c)

El término K(c)K(c) es el komi, un ajuste por el hecho de que Negro juega primero y se espera que termine con una puntuación mayor. En general, para NN jugadores cada uno recibirá un K(c)K(c) diferente.

Ejemplo 7: puntuación
Tablero de Go

Los círculos y los triángulos son puntos vacíos. Los círculos solo alcanzan negro y los triángulos solo alcanzan blanco. Hay 11 puntos negros y 4 puntos vacíos que solo alcanzan Negro. La puntuación de Negro es por tanto 15. La puntuación de Blanco es 11+2=13.

Aquí estamos suponiendo, obviamente, que no hay komi (K(B)=K(W)=0K(\mathsf B)=K(\mathsf W)=0).

Como puedes ver, la puntuación de un jugador depende únicamente de la coloración actual. Estos son algunos ejemplos de cosas que no importan de cara a la puntuación:

  • De quién es el turno.
  • Estados anteriores.
  • Estados futuros, incluyendo, por ejemplo, qué puntos es probable que dejen de alcanzar Vacío.

Eso último necesita algún comentario adicional. Consideremos el tablero del ejemplo anterior. Las piedras negras de la esquina superior izquierda están a punto de morir; están a una jugada de no alcanzar vacío. Pero eso no importa para la puntuación tal como la hemos definido. Por supuesto, esto también sugiere que la puntuación actual puede ser engañosa en partidas sin terminar. Volveremos sobre este tema más adelante.

Reglas del juego

Voy a suponer que no hay hándicap por ahora.

Reglas:

  1. Asigna jugadores a colores. Los colores tienen un orden de turno fijo c1,,cNc_1,\ldots,c_N. Para dos jugadores, primero va Negro y luego Blanco.
  2. La partida empieza con todos los puntos vacíos.3
  3. Durante su turno, el jugador puede jugar (colocar una piedra) o pasar.
  4. Un jugador puede jugar en cualquier punto vacío, siempre que la coloración resultante después de la jugada no se haya visto ya en la partida (es decir, si un jugador jugó en el turno ii, λi=λj,:j<i\lambda_i = \lambda_j, : j < i es ilegal).
  5. La partida termina después de NN pases consecutivos, donde NN es el número de jugadores.
  6. El ganador de la partida es quien tenga la puntuación más alta (se permiten empates).

Como puedes ver, no podemos describir por completo el estado de la partida solo con la coloración actual y sabiendo de quién es el turno. También necesitamos conocer las coloraciones anteriores para comprobar la legalidad de las jugadas. Esa regla se llama Super-Ko Posicional (PSK, por siglas en inglés), y es necesaria para evitar bucles infinitos.4 Por supuesto, las coloraciones repetidas no dan problemas si vienen de que un jugador haya pasado.

Más sobre el komi

La cantidad concreta de komi siempre es objeto de debate. En principio, debería fijarse en la cantidad que haga que negro y blanco tengan la misma probabilidad de ganar cuando el color de cada jugador se decide al azar. Eso significa que el komi de 6.5 es contextual, y grafos distintos deberían tener komis distintos. Con 3+ jugadores, el komi K(c)K(c) debería ser mayor cuanto más tarde empiece a jugar el color cc, empezando en 0 para el primer jugador.

En un servidor que encontré que permite 3+ jugadores, parece que no hay komi (por el motivo que sea). De todos modos, estos servidores no parecen tener demasiados jugadores, así que las cosas podrían cambiar con más experiencia en este tipo de juegos.

Hándicap

El sistema tradicional japonés de hándicap deja que el jugador más débil juegue con negras y tenga algunas piedras precolocadas. Luego, blanco hace la primera jugada real. La idea detrás de esto parece ser enseñar Go al jugador más débil dándole una buena colocación inicial independientemente de lo que le apetezca hacer.

Ese sistema, bastante opinado, generaliza mal, y otros sistemas dan al jugador más débil colocación libre de las piedras, como en China. También es la propuesta de Tromp-Taylor, y me parece razonable. Aun así, habría que ajustarlo para que cada jugador tenga la misma probabilidad de ganar, aunque tengo la sensación de que, incluso si lo haces correctamente, este método va a tener más varianza que la versión japonesa. Lo cual quizá sea una virtud y no un defecto; no lo tengo claro.

Otra opción obvia es simplemente dar komi a los jugadores más débiles. Por qué tener dos sistemas de compensación (komi y hándicap) pudiendo usar solo uno? Es interesante que el enfoque Tromp-Taylor sea tan minimalista en general y, sin embargo, no reutilice el komi para esto.

¿Puede definirse un sistema de piedras precolocadas para grafos y jugadores arbitrarios? Lo dudo, pero sería interesante intentar definirlo, aunque acabe siendo razonable solo para algunas familias de grafos.

Comentarios y algunas preguntas posibles

Puedo rendirme?

En implementaciones prácticas, por supuesto que está permitido y es muy común. En teoría, sin embargo, bajo Tromp-Taylor solo puedes pasar, y estás obligado a ver la partida hasta el fin de los tiempos o hasta que decidas no pasar, por algún motivo.

Puede haber en el tablero grupos de piedras que no alcanzan Vacío, a pesar de estar muertas?

Antes de la primera jugada, no, porque todos los puntos están vacíos, así que no hay piedras.

Después de que una jugada termina, tampoco, por dos razones:

  1. Una jugada acaba limpiando los colores de todos los jugadores.
  2. Limpiar colores expande el número de puntos vacíos, así que el número de puntos que alcanzan Vacío solo puede aumentar o quedarse igual. No puede ocurrir que, después de limpiar, algunas piedras estén de pronto muertas cuando antes no lo estaban.

Quizá edite esto para añadir una demostración por inducción en algún momento.

Está garantizado que la partida termina?

Sí. Recuerda que exigimos grafos finitos. Un grafo con V|V| vértices y C|\mathcal C| colores tiene CV|\mathcal C|^{|V|} coloraciones posibles. Ese número finito es en realidad muchísimo mayor que el número de configuraciones posibles en Go, ya que muchas de esas coloraciones son ilegales o imposibles de producir en una partida. Además, PSK hace que el conjunto de coloraciones no vistas se reduzca con cada jugada que no sea pasar. En algún momento no quedan más jugadas legales (en el peor caso, porque todas las coloraciones se han visto ya) y los jugadores están obligados a pasar. Cuando todos los jugadores pasan, la partida termina.

Por supuesto, todos los jugadores pasarán muchísimo antes de quedarse sin jugadas legales (recuerda que el suicidio es legal, así que, si tuvieran que jugar todas las jugadas legales posibles, tendrían que empezar a suicidarse en algún momento. Lo cual no suena muy sano, por cierto).

Eso nos lleva al punto importante de la parada anticipada de las partidas, pero primero tenemos que hablar de otro asunto de vida o muerte.

Vida y muerte

Una consecuencia de las reglas del Go que no es obvia para nadie en una primera lectura de las reglas es que algunos grupos de piedras son imposibles de capturar. A veces el “grupo” inmortal ni siquiera es un solo grupo, sino dos o más! Considera esta situación:

Ejemplo 8
Diagrama de tablero de Go
Parece que blanco puede capturar (matar) esas piedras negras; lo único necesario es rellenar los dos puntos marcados con △. Pero ¿cómo? Si colocas una piedra blanca en uno de esos lugares, ambos grupos negros siguen alcanzando Vacío, ¡pero tu piedra no! Esto es suicidio, que está permitido bajo las reglas Tromp-Taylor (no así en otros reglamentos comunes), pero en este caso ni siquiera es legal porque la coloración sería exactamente la misma que antes. Como Blanco, no puedes hacer absolutamente nada contra este “grupo” de piedras negras, y se dice que están vivas incondicionalmente.

Parada anticipada de partidas

Como hemos explicado, jugar las partidas hasta que no queden más jugadas posibles no solo es cansino e inútil, sino indeseable, porque obligaría a los jugadores a hacer jugadas suicidas. Igual que en el ajedrez, la gente suele rendirse antes. En Go, en realidad, muchísimo antes.

Esto significa que, para jugar en el mundo real y pasarlo bien, necesitamos alguna forma de parar pronto y ponernos de acuerdo en quién ha ganado. El problema es que es computacionalmente inviable buscar todas las posibles continuaciones.5 Peor aún: si paras pronto, bajo estas reglas la puntuación podría parecer casi cualquier cosa. Considera el siguiente ejemplo:

Ejemplo 9
Diagrama de tablero de Go
Antes de jugar la piedra blanca, negro tiene mucho territorio en el centro (marcado con pequeños cuadrados negros). Fíjate en que colocar una sola piedrecita desplaza considerablemente la puntuación (y cambia el ganador, si la partida terminase justo en ese momento). Recuerda que, antes de colocar la piedra blanca, todos esos puntos vacíos solo alcanzan Negro, así que son territorio negro. Después de colocarla, sin embargo, alcanzan tanto Negro como Blanco, así que no son territorio de nadie.

Entonces, cómo podemos conseguir parar anticipadamente?

Tradicionalmente, cuando ambos jugadores pasan, la partida no termina realmente. Los jugadores tienen que ponerse de acuerdo sobre qué grupos de piedras son inmortales y cuáles están muertos a todos los efectos. La piedra blanca solitaria del ejemplo anterior sería considerada muerta con casi con total seguridad por cualquier jugador razonable. Creo que, de hecho, es imposible que blanco “haga vida” dentro de ese territorio si negro juega de forma siquiera medianamente competente (no digamos ya óptimamente). Pero ¿qué pasa si Blanco no está de acuerdo? Aquí la respuesta varía según el reglamento. Los más liosos, como los reglamentos japonés y coreano, necesitan una especie de sandbox durante la llamada “fase de confirmación”: los jugadores juegan la situación local sobre la que no están de acuerdo y, una vez ha quedado demostrada la vida o muerte, la partida se reinicia a la posición anterior a la subpartida “sandboxeada”. La necesidad de esta subpartida es una consecuencia de cómo definen la puntuación, cosa en la que no voy a entrar. Baste decir que los otros sistemas, los llamados reglamentos de “puntuación por área”, como el chino, el americano y otros, también hacen que los jugadores jueguen sus desacuerdos, pero no requieren una subpartida sandboxeada.6

Los sistemas automáticos usan heurísticas para determinar qué está vivo y qué no, y eligen pasar cuando no hay nada bueno que hacer. GNU Go, por ejemplo, hace esto.

Otra posibilidad sería usar programas de inteligencia artificial sobrehumanos como KataGo como árbitro/oráculo que te diga quién ganó. Sin embargo, en el momento de escribir esto, tiene algunos fallos sistemáticos que pueden explotarse, así que no puede funcionar como oráculo de la verdad en torneos (los profesionales optimizarían específicamente contra KataGo, en vez de intentar ganar según la opinión de otros humanos experimentados). Podrías pensar en usarlo de manera informal, entre jugadores débiles, y puede que funcione. El único problema es que a veces no se entiende por qué dice que un jugador ha perdido. Para el ojo inexperto, cosas que están muertas pueden parecer vivas y viceversa. E incluso si estás de acuerdo, un jugador débil metería la pata al jugar las situaciones de vida o muerte, así que KataGo no representa “lo que habría pasado si ambos hubiéramos jugado esto hasta el final”, que probablemente es lo que querías.

Para mí, todo esto significa que el mecanismo tradicional de acuerdo es práctico, y funciona. Pero idealmente, a los novatos les supervisaría el final de partida algún jugador fuerte para orientarles sobre qué grupos están vivos y muertos. Luego, después de decidir quién ganó de este modo, también pueden jugarlo hasta el final y verlo por sí mismos si quieren.

¿Dónde puedo jugar al Go?

Si vives en una ciudad grande, es probable que haya algún club de Go. Pero eso depende del contexto. Mi recomendación general es OGS, que es un servidor occidental y, por supuesto, gratuito. Empieza una partida personalizada con los siguientes ajustes (deberían guardarse automáticamente como tus ajustes por defecto para otras partidas después):

  • Tamaño del tablero: 9x9
  • Reglas: chinas
  • Velocidad de partida: en vivo
  • Control de tiempo: byo-yomi
  • Tiempo principal: 5 minutos
  • Tiempo por periodo: 15 segundos
  • Periodos: 5

Puedes dejar el resto con los ajustes por defecto.

Necesito más ayuda para entender este juego

Salvo que seas un lector muy cuidadoso y reflexivo, probablemente necesitarás ver algunos tutoriales para principiantes completos para captar del todo las reglas y sus implicaciones inmediatas. Recomiendo los 5 primeros vídeos de esta playlist. Después, simplemente juega algunas partidas, intenta mejorar por tu cuenta y, si ves que te atascas, echas un vistazo a los vídeos del Clossi Approach. Son muy buenos. Mira solo el primero e intenta aplicar esas ideas en más partidas. Solo entonces mira el segundo.

También me vino bien leer Go For Beginners. El problema es que usa reglas japonesas sin explicar el mecanismo de sandbox, lo cual en mi opinión es una omisión importante y hace que algunos ejemplos resulten confusos.

Más allá de la cuadrícula estándar

Hay una web con variantes de Go. Algunas son simplemente Go sobre grafos poco habituales, como:

Sunflower
Diagrama de tablero de Go
La partida completa puede verse aquí.

Incluso puedes jugarlo en un cubo:

Go en un cubo
Tablero de Go 3D con algunas piedras sobre su superficie
Puedes interactuar con él aquí. Esto, de hecho se podría hacer con imanes y una impresora 3D…

Un servidor que permite 3+ jugadores es este. Sin embargo, solo admite cuadrículas cuadradas (ni siquiera rectangulares). Otro problema de este Go multijugador es que matar piedras es demasiado fácil:

Muerte fácil
Una piedra negra rodeada por piedras de distintos colores
Yo juego Negro. Luego, antes de que vuelva a tener turno, los otros jugadores se ceban con mi pobre piedra.

Creo que una solución a eso último, al menos para partidas de 3 o 4 jugadores, es crear una cuadrícula distinta, una en la que cada vértice tenga más aristas:

Teselación triangular con forma hexagonal
Un tablero de Go formado por triángulos

En esta cuadrícula, solo 6 vértices tienen 3 aristas: los de las esquinas. Los de los lados tienen 4 aristas, y los vértices interiores tienen 6 aristas. Esto hace que sea mucho más difícil para los jugadores matar piedras, así que debería compensar el problema descrito arriba.

La cuadrícula de este ejemplo tiene 331 puntos, y por tanto tiene un tamaño parecido al tablero de 19x19, que tiene 361.

Aún no he encontrado una forma de probar este tablero en una partida real; aparentemente no hay ningún servidor que permita a la vez este tablero y 3+ jugadores.

También debo mencionar que debería ser fácil fabricar esto con un tablero de madera y un grabador láser. Igual encargo uno.

Conclusión

El Go es uno de esos juegos en los que las reglas son sencillas (o pueden serlo), pero volverse bueno es muy difícil. El juego lleva milenios existiendo y se nota. También tiene jugadores muy dedicados, y profesionales. Creo que merece mucho la pena darle una oportunidad y, si no, espero que al menos este post te haya parecido interesante.

Evita los bucles infinitos.


  1. Como programador quizá tengas la tentación de pensar en un struct {.vertex, .color}, pero las matemáticas son más limpias y la lectura es más sencilla si separamos el color como algo propio. Imagina que tenemos un array de vértices, un array de aristas (matriz de adyacencia) y un array de colores. El método .get() del array de colores sería la función λ\lambda de la que estamos hablando aquí. ↩︎

  2. O “capturadas”, aunque este término tiene más sentido en reglamentos como el japonés. ↩︎

  3. Podrías cambiar esta regla para permitir coloraciones iniciales distintas, siempre que no contengan piedras muertas. ↩︎

  4. Otra opción es considerar tanto la coloración como de quién es el turno, lo que se llama Super-Ko Situacional (SSK). Necesitas una de estas dos reglas para que la partida termine. Ambos métodos son igual de fáciles de implementar: en PSK haces un array de hashes, donde cada hash es una función de la coloración; mientras que en SSK cada hash es una función de la coloración y de un booleano que especifica si es el turno de blanco o de negro (o quizá un entero unsigned int de 8 bits si quieres más jugadores). En cualquiera de los dos casos, no es difícil. SSK está más cerca de lo que intuitivamente te importa: no volver a un estado de partida exactamente idéntico a uno anterior. Si la coloración es la misma que antes pero ahora le toca a otra persona, no es exactamente la misma situación que antes, así que en principio debería estar permitido. PSK lo prohíbe, SSK lo permite. Sin embargo, fíjate en que ni PSK ni SSK eliminan todas las situaciones tipo Día de la marmota. Por ejemplo, en una cuadrícula cuadrada, una rotación de 90 grados de una coloración pasada estaría permitida tanto bajo PSK como bajo SSK, aunque está claro que vuelves a estar en la misma situación a todos los efectos. Esto no cambia el hecho de que la partida sea finita; simplemente es un detalle molesto. ↩︎

  5. Que es por lo que las máquinas no derrotaron ni siquiera a jugadores amateurs fuertes hasta la década de 2010; no basta con hacer una búsqueda en árbol. ↩︎

  6. Tromp-Taylor también se considera correctamente puntuación por área (“puntuación por área” simplemente se refiere al hecho de que las piedras sobre el tablero cuentan como puntuación de su dueño mientras que en sistema de puntuación por territorio, no cuentan). Pero, como puedes ver, no tiene ningún mecanismo de parada temprana como otros reglamentos de “su familia”. En teoría, Tromp-Taylor se juega hasta el mismísimo final. En la práctica, siempre se implementa con formas de parar antes. De nuevo, este reglamento es teórico y matemáticamente limpio; en implementaciones prácticas, algunas cosas cambian. ↩︎