Choose Language
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
Abak Logo
ABK-GOFAI: Boa e Velha Inteligência Artificial

ABK-GOFAI: Uma Boa e Velha Inteligência Artificial para Jogar Abak Evolution Backgammon.

Sem a ajuda de uma Rede Neural, o desenvolvimento de uma Inteligência Artificial (IA) para o Abak provou ser uma tarefa desafiadora e, com o tempo, atingiu um limite aparente. No entanto, foi um processo divertido desenvolvê-la, e ela ainda está em serviço para jogar nos níveis "fácil", "normal" e "avançado". Este é um post sobre como ela funciona e como foi feita.

Fase 1, GOFAI PHP

A primeira versão da IA do Abak foi escrita em PHP e tinha a tendência de travar o sistema com erros de 'falta de memória', mas pavimentou o caminho para uma versão em C++. Foi o playground de prototipagem para eu descobrir como diabos se faz uma IA. A primeira vez que a executei conectada ao servidor web (então eu estava efetivamente jogando contra ela), foram necessários 15 longos segundos para selecionar um movimento, e quando vi o servidor se movendo sozinho, fiquei maluco e posso ter feito uma dancinha. Não tenho certeza.

Fase 2, GOFAI C

Então, a versão C/C++ da IA, a primeira a ir para um ambiente produtivo, meu amado motor GOFAI, nasceu sobre as cinzas do PHP. Ela executa 29 algoritmos de análise sobre milhares de posições em nanossegundos, e funciona assim:

  • Dada uma posição do tabuleiro e um conjunto de dados.
  • Calcular um estado
  • Obter todos os movimentos possíveis.
  • Analisar cada movimento e dar uma pontuação.
  • Selecionar a 'melhor' pontuação.

Aqui está um diagrama do processo.

Diagrama Abak-GOFAI Artificial Intelligence

É composto por quatro funções principais:

  • Obter Ações (Calcular Movimentos Válidos):

    Dada uma posição do tabuleiro e um lançamento de dados, calcula todos os movimentos válidos.

    Movimentos válidos podem ir de 0 a dezenas de milhares.

    Em toda linguagem em que escrevi isso, adotei uma abordagem recursiva desnecessária que torna o código muito difícil de depurar, mas é tão bonita. Tem algumas centenas de linhas de código, mas levou semanas para escrever, e depois mais semanas para traduzir para C.

  • Obter Estado (Calcular Estado do Tabuleiro):

    Dada uma posição do tabuleiro, calcula um estado semântico, eles são bastante autoexplicativos:

    • Início
    • Meio de Jogo
    • Corrida sem Esperança
    • Corrida com Esperança
    • Fim de Jogo
    • Entrando em Casa
  • Analisar Movimento (Calcular Pontuações para uma Posição do Tabuleiro):

    Este é de longe o algoritmo mais extenso de todos. Ele analisa as características do tabuleiro, cada uma retornando uma pontuação, e então, com base no estado calculado anteriormente, aplica fatores a elas, para que você possa dar importância a diferentes aspectos da análise com base no estado do jogo.

    A IA começou com 8 algoritmos e terminou com 29, uma amostra:

    • Altura das Colunas
    • Risco de Ser Capturado
    • Risco de Ser Aprisionado
    • Força da Casa
    • Pivôs de Fuga
    • Peças na Barra
    • Peças Seguras

    Muitos desses algoritmos eram muito básicos no início ou simplesmente não existiam.

    Com o tempo, trabalhei neles, adicionando recursos e ajustando fatores.

  • Selecionar Ação (Selecionar o "Melhor" Movimento):

    Este algoritmo é relativamente trivial se você quer apenas a pontuação mais alta (como faz o Nível Avançado).

    Para os Níveis Normal e Fácil, ele seleciona um movimento aleatoriamente entre uma lista das melhores ações; o tamanho dela (ou sua tolerância a movimentos ruins) é dado pelo nível.

Por causa do C, este motor é extremamente rápido, então sempre o usarei como a função principal de obter ações.

Fase 3, Ajuste Fino do GOFAI C

Para depurar, solucionar problemas e ajustar este motor, tive que construir muitas ferramentas para monitorar o processo de tomada de decisão. Diferente da Rede Neural, cada decisão aqui é auditável, então pelo menos isso você tinha.

O processo foi divertido, mas dolorosamente lento. Joguei muito contra a CPU, e sempre que via um movimento ruim, vinha a essas ferramentas para verificar o que deu errado. Às vezes isso me levava a um caminho de corrigir um algoritmo, ajustar um fator ou simplesmente construir um novo modelo de análise. Às vezes, e isso era lindo, me levava a reconsiderar minhas estratégias do Abak Evolution.

Abak-GOFAI Debug Tool Screenshot 1 Abak-GOFAI Debug Tool Screenshot 2

Com o tempo, tive uma IA bastante sólida, mas aperfeiçoá-la mais estava se tornando cada vez mais difícil. Havia tantas linhas de código, tantos cenários, operações tão massivas, que depurar no nível do código era uma tarefa pesada, e ajustar fatores manualmente não estava dando resultados.

Fase 4, Desespero

Mas eu queria mais, porque eu jogo Abak, e precisava de um jogador sólido para me divertir, e não havia muitos humanos que jogavam na época (e mesmo enquanto escrevo isto).

E esta abordagem tem muitas desvantagens:

  • Ela calcula o estado do tabuleiro dada sua posição atual, e esse estado é usado para alterar os fatores dos algoritmos de análise para cada ação válida. Essa ação, porém, poderia ter alterado o estado, mas o motor não leva isso em conta.
  • O ajuste manual de fatores precisava de uma quantidade enorme de tempo. Tempos divertidos, sim, mas toneladas mesmo assim.
  • O estado é brutalmente difícil de calcular, dado o número de cenários possíveis. Sempre foi um algoritmo falho.
  • A equidade do jogo é impossível de calcular com precisão, porque este motor tem um sistema de pontuação arbitrário para cada algoritmo de análise, e a pontuação final não reflete uma probabilidade de vitória, apenas funciona como uma pontuação comparável entre diferentes posições do tabuleiro. Pode-se dizer que tem um valor relativo em vez de absoluto.

Fase 5, O Despertar

E então, um dia, em 2018, o Google venceu o Campeão de GO com sua Rede Neural AlphaGo, e houve tanta repercussão, e novas e incríveis bibliotecas de Aprendizado de Máquina de código aberto se tornaram disponíveis, usando GPUs domésticas para acelerar o processo de treinamento.

Claro, eu já sabia um pouco sobre Redes Neurais, mas nunca havia construído uma, e honestamente, as via como uma tarefa além das minhas capacidades.

Então simplesmente não pude resistir, e o nível expert não roda mais no motor GOFAI, exceto pela parte de obter ações.

Mas esta história termina aqui.

Se você leu tudo até aqui, estou impressionado.

Este texto foi escrito para fins de SEO pela honesta Equipe Abak Evolution,
Também conhecido como Samy Garib.

Abak Evolution Backgammon é uma incrível variante de Backgammon baseada em classes, que literalmente adiciona uma nova dimensão ao jogo de tabuleiro clássico.