Atualmente, estou lendo sobre aprendizado de máquina e me perguntei como aplicá-lo para jogar o Connect Four .
Minha tentativa atual é de um classificador multiclasse simples usando um modelo de função sigmóide e o método one-vs-all.
Na minha opinião, os recursos de entrada devem ser o estado (disco do jogador 1, disco do jogador 2, vazio) dos campos de grade 7x6 = 42.
A saída seria o número da linha para colocar o disco. Como esse é um número discreto entre 1 e 7, acho que isso pode ser tratado como um problema de classificação em várias classes.
Mas como eu gero exemplos de treinamento utilizáveis no aprendizado supervisionado?
O objetivo principal é vencer o jogo, mas o resultado obviamente não é conhecido ao realizar todos os turnos, exceto o último. Se eu deixar apenas dois jogadores que decidem aleatoriamente o que fazer jogar um contra o outro milhares de vezes, será suficiente simplesmente dar todas as voltas feitas pelo vencedor de cada rodada como exemplos de treinamento? Ou tenho que fazer isso de uma maneira completamente diferente?
Edit: Como sugerido nos comentários, li um pouco sobre o aprendizado por reforço. Pelo que sei, o Q-Learning deve fazer o truque, ou seja, preciso aproximar uma função Q do estado atual e a ação a ser tomada para ser a recompensa cumulativa máxima a partir desse estado. Então, cada passo seria escolher a ação que resulta no valor máximo de Q. No entanto, este jogo tem muitos estados para fazer isso, por exemplo, como uma tabela de pesquisa. Então, qual é uma maneira eficaz de modelar essa função Q?
Respostas:
Apenas para oferecer uma alternativa mais simples ao aprendizado por reforço, você pode usar o algoritmo minimax básico para procurar boas jogadas e usar o aprendizado de máquina para avaliar as posições da placa.
Para esclarecer, o minimax cria uma árvore de jogo em que cada nó é rotulado com o resultado das folhas (1 = jogador A vence, 0 = jogador B vence), assumindo que A escolhe os movimentos que maximizam esse número e B escolhe os movimentos que minimizá-lo.
A menos que o jogo seja muito simples, você não poderá construir toda a árvore do jogo até os terminais. Em vez disso, você precisará parar em posições inacabadas do tabuleiro e avaliar as folhas com alguma heurística (essencialmente a probabilidade de o jogador A vencer da posição especificada). Você pode permitir que um algoritmo de aprendizado de máquina como uma rede neural tente aprender essa probabilidade conectando quatro posições a resultados conhecidos.
Para gerar exemplos de treinamento, você pode criar seu minimax player com uma heurística simples, deixá-lo jogar mil vezes, usar esses jogos para treinar sua primeira rede neural e depois pagar mil jogos e assim por diante. Com um pouco de sorte, seu sistema irá melhorar a cada geração.
fonte
Eu escrevi um post no blog sobre o uso do minimax para jogar connect quatro há um tempo atrás. Você pode ver o código em ação aqui . Se você precisar treinar seus modelos, talvez possa deixá-lo jogar alguns milhares de jogos contra minha implementação minimax.
fonte