Algoritmo de aprendizado de máquina para jogar Connect Four

14

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?

Tom
fonte
2
Google "Aprendizagem por reforço"
George
Ok, acho que isso realmente se aplica exatamente a esse problema. Parece que há muita leitura pela frente. Alguma indicação ou recomendação mais específica?
Tom
1
Se soubesse mais, publicaria como resposta :) Infelizmente, não tenho experiência no aprendizado por reforço. Eu começaria com o livro "Machine Learning", de Tom Mitchell. É um livro introdutório muito bom e também tem um capítulo sobre Aprendizado por Reforço.
George
1
Neste último, estou apenas curioso sobre o aprendizado de máquina e tentando conhecê-lo.
Tom
1
@ Tom, existem maneiras melhores de 'conhecer' as técnicas de aprendizado de máquina. Eu começaria com técnicas mais básicas de classificação e regressão e avançaria a partir daí. Você pode pegar conjuntos de dados no repositório de dados de aprendizado de máquina da UCI, conferir as notas do curso de aprendizado de máquina de Andrew Ng (Stanford) e começar a implementar. Saltar direto para tentar resolver o connect 4 usando o aprendizado por reforço parece bastante estranho e excessivamente complicado.
Nick

Respostas:

8

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.

Pedro
fonte
2

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.

Lukas Vermeer
fonte
Sinta-se à vontade para digitar meu código no Github. github.com/lukasvermeer/minimax
Lukas Vermeer
Bem-vindo ao Stack Exchange. Este é um site de perguntas e respostas . Por favor, leia nossas perguntas frequentes , em particular como responder . Em particular, não queremos postagens que consistam apenas em um link para uma resposta. Obrigado por sua contribuição, mas você poderia resumir os principais pontos de seu blog aqui?
Gilles 'SO- stop be evil'
Sinto muito, mas a pergunta original era "como gerar exemplos de treinamento utilizáveis ​​no aprendizado supervisionado?" Forneci links para o código de trabalho que pode ser usado para gerá-los. Não vejo como escrever mais texto acima ajudaria a responder à necessidade original.
Lukas Vermeer
"Um link para uma solução em potencial é sempre bem-vindo, mas adicione contexto ao link para que seus colegas usuários tenham uma idéia do que é e por que está lá. Sempre cite a parte mais relevante de um link importante, caso o site de destino está inacessível ou fica permanentemente offline. " Eu acho que fiz o primeiro. O último seria irrelevante. A pergunta original precisa de jogos de exemplo, não uma explicação de como implementar uma solução.
Lukas Vermeer