IA jogo da velha
IA
Em teoria da decisão, o minimax (ou minmax) é um método para minimizar a perda máxima possível. A abstração mais comum é de dois jogadores, jogando alternadamente, como acontece no jogo da velha (nosso exemplo), xadrez, damas, etc. class MinimaxPlayer : IPlayer
{
public Grid MakeMove(Grid g) { GridCells move; Minimax(g, out move); return g.MakeMove(move); } public int Minimax(Grid g, out GridCells best) { best = GridCells.None; var bestResult = -10; GridCells garbage; if (g.IsDraw) return 0; if (g.CurrentIsWinner) return 1; if (g.CurrentIsLoser) return -1; foreach (var move in g.GetMoves()) { var other = g.MakeMove(move); var result = -Minimax(other, out garbage); if (result > bestResult) { best = move; bestResult = result; } } return bestResult; }
}
Cada jogador busca maximizar sua condição no jogo. Logo, entre as alternativas, escolhe aquela que lhe parece mais favorável;
A cada passo assume-se que o jogador A está tentando maximizar as chances de A ganhar, enquanto na próxima rodada o jogador B está tentando minimizar as chances de isso acontecer (ao maximizar as chances de que ele próprio ganhe).
A “qualidade” da jogada é descrita por um valor numérico que será mais alta para os melhores casos;
A “qualidade” de uma jogada só poderá ser determinada se for levada em consideração a resposta do adversário, ou, a conclusão do jogo;
Por sua consideração recursiva, pode-se presumir que a melhor jogada somente poderá ser determinada considerando todas as possibilidades. Entretanto, isso nem sempre é viável, então, é necessária a determinação de uma condição de parada e um método de avaliação.
Como o jogo é “rápido” (tem poucas jogadas