A regra renju

A regra renju (連珠), usada como padrão internacional do gomoku, considera que as pretas, que jogam primeiro, têm vantagem e impõe jogadas proibidas só às pretas. As pretas não podem fazer duplo três, duplo quatro nem overline (seis ou mais em linha), enquanto as brancas não têm nenhuma restrição. Um overline é até uma vitória para as brancas.

Quando construímos o motor pela primeira vez com a regra renju, as brancas ficaram quase invencíveis. Os formatos de ataque das pretas são bloqueados como jogadas proibidas, enquanto as brancas podem vencer à vontade com os mesmos formatos.

As mesmas jogadas proibidas para pretas e brancas

Por isso, mudamos as regras para que não haja diferença entre pretas e brancas.

  • Duplo três: proibido para pretas e brancas. Três separados (●_●●, ●●_●) também contam como três.
  • Overline: proibido para pretas e brancas, e seis ou mais em linha não contam como vitória. Só exatamente cinco vence.
  • Duplo quatro: permitido para pretas e brancas.
  • A jogada que forma cinco é verificada antes da verificação de jogadas proibidas. Uma jogada vencedora sempre pode ser feita.
Formatos proibidos. Duplo três (três unido + três unido), duplo três (três separado + três unido) e overline são proibidos para pretas e brancas; duplo quatro é permitido
Formatos proibidos. Duplo três (três unido + três unido), duplo três (três separado + três unido) e overline são proibidos para pretas e brancas; duplo quatro é permitido

Mesmo depois da mudança, as brancas venceram

O momento da mudança de regra não ficou registrado, então dividimos as partidas no quinto dia de partidas automáticas, quando o arquivo do motor foi alterado pela última vez. Nas 445 partidas anteriores, as brancas venceram 419 (94%); nas 42 partidas seguintes, venceram 38 (90%).

Nas partidas de treinamento, as brancas eram sempre o VLM e as pretas eram sempre a IA local. Por isso, só com esses registros não dá para dizer se as brancas venceram por causa das regras ou porque a IA local que jogava com as pretas era fraca. Precisamos jogar de novo com a mesma IA alternando entre pretas e brancas.

O código real desta etapa

Esta é a verificação de jogadas proibidas do motor da web. Primeiro ela verifica se a jogada vence e, depois, bloqueia só o overline e o duplo três.

omook-web/lib/board.tstypescript · 16 linhas
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;
}

O próximo post é "3. Uma IA que não enxerga vitórias com um quatro separado".