implementare la differenza temporale negli scacchi


10

Ho sviluppato un programma di scacchi che utilizza l'algoritmo di potatura alfa-beta e una funzione di valutazione che valuta le posizioni usando le seguenti caratteristiche: materiale, sicurezza del re, mobilità, struttura dei pedoni e pezzi intrappolati ecc .... La mia funzione di valutazione è derivato dal

f(p)=w1Materiale+w2kingsafety+w3mobilità+w4pedone-struttura+w5pezzi intrappolati

dove è il peso assegnato a ciascuna funzione. A questo punto voglio sintonizzare i pesi della mia funzione di valutazione usando la differenza temporale, in cui l'agente gioca contro se stesso e nel processo raccoglie i dati di allenamento dal suo ambiente (che è una forma di apprendimento di rinforzo). Ho letto alcuni libri e articoli per avere un'idea di come implementarlo in Java, ma sembrano essere teorici piuttosto che pratici. Ho bisogno di una spiegazione dettagliata e di pseudo codici su come ottimizzare automaticamente i pesi della mia funzione di valutazione in base ai giochi precedenti.w

Risposte:


4

Consiglio a chiunque sia interessato all'argomento di dare un'occhiata al documento che combina TDL e apprendimento profondo.

All'incirca, dovrai far giocare il motore uno contro l'altro. Registrare la valutazione mini-max per ciascuna posizione. Alla fine del gioco riceverai una ricompensa, che è {0,1, -1} per gli scacchi. Quindi dovrai modificare i tuoi parametri con:

inserisci qui la descrizione dell'immagine

Questa equazione ci dice che dovremmo regolare i pesi in base alle differenze temporali, ponderati da quanto lontano dovresti farlo. Se hai una valutazione perfetta, la tua differenza temporale sarebbe sempre zero, quindi non dovrai apportare alcuna modifica.

Successivamente, dovrai utilizzare i nuovi parametri per giocare a un nuovo gioco. Si ripete fino a quanti giochi puoi permetterti o quando pensi che sia convergente.

Alcune osservazioni:

  1. La carta che cito applica un fattore di sconto. È fatto per l'algoritmo di retroproporzione per la rete neurale. Non ne hai bisogno.
  2. Dovrai sperimentare il tasso di apprendimento ottimale (alfa nell'equazione). Troppo grande renderà instabile il tuo apprendimento, troppo poco impiegherà più tempo a convergere. Ho visto persone che usano 0.70. Il documento che cito ha usato 1.0.

Ciao, adoro la tua risposta, ma potresti per favore correggere il link al documento?
Padura,

@padura fisso. Per favore, leggi. È stata una buona lettura per la scienza dei dati.
HelloWorld,

(+1) Ottima risposta. Mi è piaciuto molto anche il giornale :)
Dawny33

Questo è un ottimo articolo, peccato che non lo sapessi mentre stavo lavorando sul mio motore di scacchi;) Mi chiedo se possiamo migliorare combinando con questa tecnica: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura,

2

Una prima osservazione, dovresti guardare 'Wargames' per sapere in cosa ti stai cacciando.

Quello che vuoi è f (p) tale che f (p) sia il più vicino possibile alla forza della posizione.

Una soluzione molto semplice che utilizza l'algo genetico sarebbe quella di impostare 10000 giocatori con pesi diversi e vedere quali vincono. Quindi mantenere il peso dei primi 1000 vincitori, copiarli 10 volte, modificarli leggermente per esplorare lo spazio di peso ed eseguire nuovamente la simulazione. Questo è GA standard, data una forma funzionale, quali sono i migliori coefficienti per questo.

Un'altra soluzione è quella di estrarre le posizioni, in modo da avere una tabella "(materiale, sicurezza del re, mobilità, struttura del pedone, trappole) -> bontà della posizione" in cui la bontà della posizione è un fattore oggettivo (il risultato si ottiene / si perde calcolato con le simulazioni sopra o partite conosciute, profondità dell'albero disponibile, numero di mosse sotto l'albero dove uno dei 5 fattori migliora. Puoi quindi provare diverse forme funzionali per f (p), regressione, svm.


Questo non ha alcun senso.
HelloWorld,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.