I.A. Unplugged

Nesta atividade trabalharemos a construção de uma I. A. (Inteligência Artificial) em uma estrutura computacional desplugada, ou seja, que não envolve equipamentos digitais. Para isto aproveitaremos as mecânicas usuais do xadrez para programarmos uma peça com movimentos a serem definidos pelo usuário, que chamaremos de Tron.

Para as demais peças do xadrez, com exceção dos peões, podemos apresentar suas movimentações num tabuleiro 4x4 ignorando reflexões e rotações. Isso significa que podemos imaginar o tabuleiro como uma placa de vidro com as peças pintadas em seu interior, e fazer giros de 90, 180 e 270 graus ou refletir o tabuleiro a partir de qualquer eixo. Esta funcionalidade tem como objetivo reduzir o número de casos com que precisaremos trabalhar para programar Tron. Assim, nosso primeiro passo é programar uma movimentação para Tron que seja independente de rotações, translações e reflexões. Para isso, represente Tron num canto do tabuleiro e marque as posições que ele pode alcançar a partir desta. Por exemplo, quero que Tron possa se mover nas seguintes opções "uma casa para frente", "duas casas para frente", "duas casas para frente e uma casa para direita":

Tron num canto do tabuleiro

Movimentos possíveis de Tron marcados por círculos vermelhos

Definidos os movimentos de Tron, agora precisamos programar como esta peça agirá na presença do inimigo. Para isso, representaremos Tron nas 33 posições relativas da peça inimiga no tabuleiro, representada por "?". Faremos então 33 malhas de tamanho 4x4 com Tron em cada uma dessas 33 posições numeradas.

Para cada uma destas 33 malhas de tamanho 4x4, marque de uma cor as movimentações possíveis de Tron e de outra cor as movimentações possíveis da peça adversária. Nos exemplos abaixo, mostraremos os movimentos de Tron como bolinhas vermelhas e os movimentos de uma Rainha como xizinhos azuis, ambos nas posições relativas 1, 10 e 25.

Marcando estas movimentações nas 33 malhas de tamanho 4x4, temos exatamente todas as possibilidades de movimentos para estas duas peças neste tabuleiro. Assim, sempre que for a vez de Tron e a peça adversária estiver ao seu alcance, Tron fará o movimento de modo a vencer o jogo. De maneira análoga, sempre que a vitória não for possível para aquela rodada, Tron se moverá para uma posição segura (ou seja, que não se encontra ao alcance da peça adversária.

Contudo vamos melhorar um pouco mais a inteligência de Tron, colocando-o para jogar contra seres humanos.

A ideia aqui é que apesar de Tron não se mover para posições suicidas e nem desperdiçar oportunidades de vitória, há ainda a possibilidade de Tron se mover em segurança mas ser encurralado para uma posição da qual não possa escapar das ameaças do adversário, como ilustrarmos a seguir. Na situação Tron encontra-se na posição relativa 14 em relação à Rainha. Decide se mover para a posição relativa 21 em relação à Rainha (que a princípio é uma posição segura). Porém, a Rainha se movimenta, de modo que Tron fique na posição relativa 33 em relação à ela. Que é equivalente a um xeque-mate no Tron, dado que não há posições seguras para se mover.

Sempre que situações assim ocorrerem, faremos uma pequena atualização no Tron, eliminando a jogada que o levou a derrota. Assim, de volta para a posição relativa 14, eliminaremos desta malha a opção do Tron se mover para a posição relativa 21. Isto "ensina" nossa inteligência artificial a não cair novamente neste mesmo erro.

Antes da atualização

Depois da atualização

Assim, a medida que Tron jogar mais vezes, receberá mais atualizações e se tornará mais "inteligente".