Estou desenvolvendo um programa de xadrez que utiliza o algoritmo de poda alfa-beta e uma função de avaliação que avalia posições usando os seguintes recursos: material, segurança, mobilidade, estrutura de peões e peças presas, etc. Minha função de avaliação é derivado do
onde é o peso atribuído a cada recurso. Nesse ponto, eu quero ajustar os pesos da minha função de avaliação usando a diferença temporal, onde o agente atua contra si mesmo e, no processo, coleta dados de treinamento de seu ambiente (que é uma forma de aprendizado por reforço). Eu li alguns livros e artigos para ter uma idéia de como implementar isso em Java, mas eles parecem ser mais teóricos do que práticos. Preciso de uma explicação detalhada e de pseudo-códigos sobre como ajustar automaticamente os pesos da minha função de avaliação com base nos jogos anteriores.
fonte
Uma primeira observação, você deve assistir 'Wargames' para saber no que está se metendo.
O que você deseja é f (p), de modo que f (p) seja o mais próximo possível da força da posição.
Uma solução muito simples usando algo genético seria configurar 10000 jogadores com pesos diferentes e ver quais vencem. Em seguida, mantenha o peso dos 1000 vencedores, copie-os 10 vezes, altere-os levemente para explorar o espaço de peso e execute a simulação novamente. Esse é o padrão GA, dada uma forma funcional, quais são os melhores coeficientes para ele.
Outra solução é extrair as posições, para que você tenha uma tabela '(material, segurança, mobilidade, estrutura de peões, armadilhas) -> qualidade da posição', em que a qualidade da posição é um fator objetivo (vitória / perda do resultado calculada usando as simulações acima) ou correspondências conhecidas, profundidade da árvore disponível, número de movimentos sob a árvore em que um dos cinco fatores melhora.Você pode tentar diferentes formas funcionais para sua f (p), regressão, svm.
fonte