implementando diferença temporal no xadrez


10

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

f(p)=W1 1material+W2segurança+W3mobilidade+W4estrutura de peões+W5peças presas

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.W

Respostas:


4

Eu recomendo que qualquer pessoa interessada no tópico dê uma olhada no artigo que combina TDL e aprendizado profundo.

Aproximadamente, você precisará fazer o mecanismo jogar um contra o outro. Registre a avaliação mini-max para cada posição. No final do jogo, você receberá uma recompensa, que é {0,1, -1} pelo xadrez. Então você precisará ajustar seus parâmetros com:

insira a descrição da imagem aqui

Essa equação nos diz que devemos ajustar os pesos pelas diferenças temporais, ponderadas pela distância que você deve fazer. Se você tiver uma avaliação perfeita, sua diferença temporal sempre será zero e, portanto, não será necessário fazer nenhum ajuste.

Em seguida, você precisará usar os novos parâmetros para jogar um novo jogo. Repita até quantos jogos você puder pagar ou quando achar que está convergindo.

Poucas observações:

  1. O artigo que cito aplica um fator de desconto. É feito para o algoritmo de proporção proporcional para redes neurais. Você não precisa disso.
  2. Você precisará experimentar a taxa de aprendizado ideal (alfa na equação). Muito grande tornará seu aprendizado instável, e muito pouco levará mais tempo para convergir. Eu já vi pessoas usando 0,70. O artigo que cito usou 1.0.

Olá, adoro a sua resposta, mas você poderia consertar o link do artigo?
padura

@padura Fixed. Por favor, leia. Foi uma boa leitura para a ciência de dados.
HelloWorld 18/02

(+1) Ótima resposta. Amamos demais o papel :)
Dawny33

É um ótimo artigo, pena que eu não sabia disso no momento em que estava trabalhando no meu próprio mecanismo de xadrez;) Gostaria de saber se podemos melhorar combinando com esta técnica: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura

2

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.


Isso não faz sentido.
HelloWorld 18/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.