Estou escrevendo um jogo de brinquedo simples, com a intenção de treinar uma profunda rede neural sobre ela. As regras dos jogos são aproximadamente as seguintes:
- O jogo tem um tabuleiro composto por células hexagonais.
- Ambos os jogadores têm a mesma coleção de peças que podem escolher posicionar livremente no tabuleiro.
- Colocar tipos diferentes de peças premia pontos (ou diminui os pontos do oponente), dependendo da posição e da configuração entre si.
- Quem tiver mais pontos ganha.
Existem regras adicionais (sobre turnos, número e tipos de peças, etc ...), mas elas não são importantes no contexto desta questão. Quero criar uma rede neural profunda que possa aprender iterativamente jogando contra si mesma. Minhas perguntas são sobre representação de entrada e saída. Em particular:
- Como o padrão das peças é importante, eu estava pensando em ter pelo menos algumas camadas convolucionais. A placa pode ser de vários tamanhos, mas em princípio muito pequena (6x10 nos meus testes, para ser expandida por poucas células). Isso faz sentido? Que tipo de pool posso usar?
- Como representar os dois lados? No presente trabalho sobre trânsito, autores usam duas matrizes de entrada, um para as pedras brancas e um para pedras pretas. Também pode funcionar neste caso? Mas lembre-se de que tenho tipos diferentes de peças, digamos A, B, C e D. Devo usar matrizes de entrada 2x4? Parece muito escasso e de pouca eficiência para mim. Receio que seja muito escasso para as camadas convolucionais funcionarem.
- Eu pensei que o resultado poderia ser uma distribuição de probabilidades sobre a matriz, representando as posições do tabuleiro, além de um conjunto separado de probabilidades, indicando qual peça jogar. No entanto, eu também preciso representar a capacidade de passar o turn, o que é muito importante. Como posso fazer isso sem diluir seu significado entre outras probabilidades?
- E o mais importante , imponho apenas jogadas vencedoras ou perdidas também? A imposição de lances vencedores é fácil, porque apenas defino as probabilidades desejadas como 1. No entanto, ao perder, o que posso fazer? Defina essa probabilidade de movimento como 0 e todos os outros com o mesmo valor? Além disso, faz sentido aplicar movimentos pela diferença final de pontuação, mesmo que isso contraria o significado dos resultados, que são aproximadamente probabilidades?
Além disso, desenvolvi o mecanismo de jogo no node.js pensando em usar o Synaptic como estrutura, mas não tenho certeza de que ele possa funcionar com redes convolucionais (duvido que exista uma maneira de corrigir os pesos associados aos campos perceptivos locais). Algum conselho sobre outras bibliotecas compatíveis com o nó?