La regla renju

La regla renju (連珠), que se usa como estándar internacional del gomoku, considera que negras, que juegan primero, tienen ventaja, e impone jugadas prohibidas solo a negras. Negras no pueden hacer doble tres, doble cuatro ni línea larga (seis o más en línea), mientras que blancas no tienen ninguna restricción. Para blancas, la línea larga incluso cuenta como victoria.

Cuando construí el motor por primera vez con la regla renju, blancas se volvieron casi invencibles. Las formas de ataque de negras quedan bloqueadas como jugadas prohibidas, mientras que blancas pueden ganar libremente con esas mismas formas.

Las mismas jugadas prohibidas para negras y blancas

Por eso cambié las reglas para que no haya diferencia entre negras y blancas.

  • Doble tres: prohibido para negras y blancas. Los tres partidos (●_●●, ●●_●) también cuentan como tres.
  • Línea larga: prohibida para negras y blancas, y seis o más en línea no cuenta como victoria. Solo gana un cinco exacto.
  • Doble cuatro: permitido para negras y blancas.
  • La jugada que forma cinco se mira antes que la comprobación de jugadas prohibidas. Una jugada ganadora siempre se puede hacer.
Formas prohibidas. Doble tres (tres seguido + tres seguido), doble tres (tres partido + tres seguido) y línea larga están prohibidos para negras y blancas; el doble cuatro está permitido
Formas prohibidas. Doble tres (tres seguido + tres seguido), doble tres (tres partido + tres seguido) y línea larga están prohibidos para negras y blancas; el doble cuatro está permitido

Blancas siguieron ganando tras el cambio

El momento del cambio de reglas no quedó registrado, así que dividí las partidas tomando como referencia el quinto día de juego automático, cuando cambió por última vez el archivo del motor. En las 445 partidas anteriores, blancas ganaron 419 (94%); en las 42 posteriores, 38 (90%).

En las partidas de entrenamiento, blancas eran siempre el VLM y negras siempre la IA local. Por eso, solo con estos registros no se puede saber si blancas ganaron por las reglas o porque la IA local que llevaba negras era débil. Hay que volver a jugar partidas en las que la misma IA alterne entre negras y blancas.

El código real de este paso

Esta es la comprobación de jugadas prohibidas del motor web. Primero mira si la jugada gana, y después bloquea solo la línea larga y el doble tres.

omook-web/lib/board.tstypescript · 16 líneas
export function hasKyungsuBan(
  board: Stone[],
  row: number,
  col: number,
  stone: Stone,
  size: number,
): RejectReason | null {
  if (!inBounds(row, col, size)) return "out_of_bounds";
  if (cell(board, row, col, size) !== EMPTY) return "occupied";
  if (wouldWinIfPlaced(board, row, col, stone, size)) return null;

  const g = withStone(board, row, col, stone, size);
  if (hasOverline(g, row, col, stone, size)) return "changmok";
  if (countOpenThreeAxes(g, row, col, stone, size) >= 2) return "sansan";
  return null;
}

La siguiente entrada es "3. Una IA que no ve las victorias con un cuatro partido".