Qual è un modo preciso per valutare le posizioni degli scacchi?


13

Sono stato interessato per un po 'a un algoritmo AI di computer a scacchi (e ho avuto la possibilità di lavorare su uno ad un certo punto) come Minimax , e poiché il componente principale di questi algoritmi è la cosiddetta funzione di valutazione per determinare cosa è un una buona configurazione della scheda e una cattiva configurazione .

In altri termini, data la configurazione della tua scacchiera, come determini che sia a tuo vantaggio e con quale grado di fiducia?

Per esempio:

  • Se possiedi il centro, questo è piuttosto favorevole.
  • Se hai più pezzi del tuo avversario, questo è piuttosto favorevole.
  • Se hai perso la tua regina, questo non è piuttosto favorevole.
  • Se hai una pedina che sta per essere promossa, questo è favorevole.
  • ...

Quindi vorrei chiedere alcuni consigli su come creare una buona funzione di valutazione, basata su alcune conoscenze specialistiche sul gioco degli scacchi in generale. E se possibile, un certo grado di favore (diciamo che tra 1 non è molto favorevole, a 100 è estremamente favorevole).

L'idea alla fine è quella di essere in grado di creare un algoritmo che guarderà nella struttura delle possibilità fino a una certa profondità e valuterà quale sia la configurazione più favorevole per la prossima mossa (tenendo conto di diverse mosse in futuro) in base a ciò è favorevole al giocatore e non favorevole all'avversario. Ma senza una buona funzione di valutazione l'algoritmo è nulla.


Penso che questa domanda andrebbe bene su StackOverflow. Ci sono già molte domande riguardo a Chess AI
xaisoft

3
Ho pensato di pubblicarlo su SO prima, ma sono quasi sicuro che sarebbe chiuso come non costruttivo o non una vera domanda lì. Forse se ho bisogno di maggiore enfasi sul codice stesso, ma penso che per la funzione di valutazione sia necessaria la conoscenza degli scacchi, non tanto del codice o degli algoritmi.
Charles Menguy,

Quanto accurato L'unico modo completamente accurato è vincere, perdere o pareggiare.
Edwina Oliver,

Risposte:



5

Aggiungendo alla risposta di @Eve Freeman, suggerirei di cercare in che modo il miglior motore di computer del mondo, Stockfish, valuti una determinata posizione. Poiché il codice sorgente è aperto, puoi farlo gratuitamente. Penso che il file con la funzione di valutazione che stai cercando sia questo .


5

Ho la sensazione di essere un po 'in ritardo su questa risposta, ma ... sto anche costruendo un motore. Il codice sorgente è in Python (che è abbastanza facile da leggere, anche se non lo conosci) ed è disponibile qui se desideri leggerlo. L'elenco delle "euristiche" attualmente attive (al momento della pubblicazione):

  • I pezzi più sviluppati (più vicini al lato opposto) sono migliori
  • Le pedine più vicine alla promozione sono buone
  • I re vengono assegnati separatamente in base alla fase in cui si trova il gioco (apertura, middlegame, endgame)
  • Se il giocatore ha entrambi i vescovi, questo riceve un bonus
  • Se il giocatore ha arroccato, ricevi un bonus
  • Le pedine isolate (pedine senza nulla intorno a loro) non sono buone
  • Le pedine raddoppiate (due pedine sullo stesso file senza spazi vuoti) non sono buone
  • Avere tutte e 8 le pedine non è necessario ed è penalizzato (ingombrano il tabellone e si mettono in mezzo)
  • Dai un'occhiata a questa grande funzione di valutazione che viene anche utilizzata
  • I vescovi con più pedine sullo stesso quadrato di colore del vescovo sono penalizzati (non sono bravi in ​​situazioni affollate)
  • Non ancora implementato, ma pianificato: i cavalieri ottengono un bonus in situazioni più affollate

In uno di questi punti, ho citato la "fase" del gioco (ad es. Apertura, middlegame, endgame), e se desideri includerlo nel tuo motore, probabilmente incontrerai lo stesso problema che ho fatto io: non c'è linea chiara che separa quelli. La mia funzione che decide in quale fase del gioco utilizza alcune cose:

  • Quantità di materiale sul tabellone (non appena un pezzo viene ucciso, segna il gioco come non nell'apertura)
  • Numero di mosse (meno di 6 mosse complete è l'apertura, non importa quale)
  • movimento delle regine (se entrambe le regine sono state spostate, contrassegnare il gioco come middlegame)

Questa risposta potrebbe essere stata lunga, in ritardo e fuori tema, ma spero sia stata comunque utile.


4

Sorprendentemente, si scopre che un motore Minimax funzionerà abbastanza bene quando la funzione di valutazione è casuale ; questo è noto come effetto Beale e deriva dal principio che posizioni che ti danno più opzioni e che il tuo avversario meno opzioni sono generalmente favorevoli. Un modo ragionevole per generare valutazioni casuali in modo coerente ed efficiente è generare un hash Zobrist per la posizione (usando coefficienti scelti casualmente all'inizio del gioco) e ricavare la valutazione casuale direttamente dall'hash.

All'estremità opposta della scala, AlphaZero e Leela conducono una valutazione estremamente sofisticata di ogni posizione cercata, utilizzando una grande rete neurale . Non è pratico descrivere in termini umani quali funzioni questa rete implementa efficacemente, ma è innegabilmente più efficace della funzione di valutazione di Stockfish. Il documento di ricerca AlphaZero indica che questo approccio funziona meglio con Monte-Carlo Tree Search piuttosto che con Minimax.

Se, d'altra parte, si desidera sviluppare un motore di analisi per aiutare i giocatori o i commentatori umani a comprendere le sfumature di una posizione, può essere utile implementare una funzione di valutazione convenzionale utilizzando valori di materiale e teoria della posizione stabiliti . Un buon esempio è rappresentato da Inside Rebel di Ed Schröder , che documenta le principali caratteristiche progettuali di un motore ben considerato utilizzato in molti computer di scacchi di Mephisto. È possibile utilizzare un certo grado di apprendimento automatico per determinare l'importanza relativa di ciascun elemento della funzione di valutazione e suddividerli singolarmente per la presentazione in una GUI.


3

Penso che i programmatori di scacchi tendano a non fare affidamento sulla conoscenza di forti giocatori di scacchi quando progettano le loro funzioni di valutazione, ma provano invece elementi diversi, quindi li testano nei giochi contro altri motori e decidono cosa tenere. Larry Kaufman parla un po 'delle sue opinioni su ciò che è una comprensione umana, ma sembra che sia Rajlich che Dailey fossero molto orientati ai risultati e non adottarono le idee di Kaufman all'ingrosso.

Un articolo che ho trovato interessante è stato Zach Wegner confrontando le funzioni di valutazione di Rybka e Fruit. Una delle aree in cui Rybka potrebbe aver rappresentato un passo avanti è stata l'incorporazione di tabelle di squilibrio dei materiali basate su combinazioni specifiche di pezzi. Anche Kaufman ha scritto un articolo su questo.

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast.net/~danheisman/Articles/evaluation_of_material_imbalance.htm



0

In breve, l'approccio standard alla messa a punto dei parametri di un motore di scacchi è di:

  1. Definire i parametri
  2. Fornire i parametri valori nominali (iniziali)
  3. Avvia il motore per vedere come si comporta
  4. Ottimizza i valori dei parametri per provare a migliorarne le prestazioni

Quindi ripetere i passaggi 3 e 4 fino a quando non si è raggiunto l'obiettivo per le prestazioni.

L'approccio abituale per farlo è quello di creare un laboratorio in cui i motori si affrontano nei tornei di motori. Vengono utilizzati più giochi in cui il motore riproduce entrambi i colori. I principali tornei di interesse riguardano l'esecuzione di un motore con il valore del parametro impostato A contro lo stesso motore con il valore del parametro impostato B.

Come probabilmente intuirai, i risultati di questo approccio dipendono fortemente da:

  • I parametri scelti
  • Come vengono specificati i parametri
  • Come vengono variati i valori dei parametri durante il test
  • Come funzionano i motori (profondità dello strato limitata, tempo limitato, sensibilità, ecc.)

Questo approccio richiede anche molto tempo.

Nel 2010 i ricercatori hanno sviluppato un approccio più recente (e innovativo) utilizzando le tecniche dell'algoritmo genetico per a) specificare i parametri e b) ottimizzare i valori dei parametri. Gli investigatori hanno prima avviato un motore con un set nominale iniziale di valori dei parametri rispetto a un set di giochi da gran maestro per vedere se poteva effettivamente scegliere la "mossa migliore". La "mossa migliore" è stata definita come la mossa del gran maestro *. Ovunque non sia riuscito a farlo è stato registrato. Quindi, è stato provato un altro set di valori di parametro e sono state determinate le prestazioni relative rispetto alla corsa precedente.

Quindi, è stato provato un approccio programmatico alla combinazione dei valori dei parametri , usando il principio dell'algoritmo genetico di sopravvivenza del "più adatto". Qui, "più adatto" indica quello che genera un output che corrisponde maggiormente all'ideale. (Capita anche di essere un gioco di parole sulla tecnica statistica della regressione "minimi quadrati", una tecnica usata per giudicare la qualità dell'approssimazione.)

Solo dopo che sono stati trovati i parametri del motore in grado di imitare un GM abbastanza bene, inizia la fase del torneo del motore. In questa fase, i diversi set di valori dei parametri vengono nuovamente confrontati, questa volta direttamente . Le tecniche di miglioramento dell'algoritmo genetico sono applicate per generare generazioni del motore successivamente migliori.

In questo progetto di ricerca sono stati utilizzati 36 parametri, inclusi tutti i valori materiali dei pezzi, e molti dei criteri di valutazione strategica più comuni, come pedine arretrate, quadrati deboli, coppia di vescovi e così via. Tuttavia, i ricercatori hanno aggiunto alcuni nuovi parametri, come "pressione del re", valori "mobilità" per ogni tipo di pezzo, torre su un file adiacente al re, torre su un file semi-aperto, torre che attacca il re su un - / b- / g- / h-file, separazione tra un pedone passato e il re in difesa e altro.

Sfortunatamente, i ricercatori non hanno elaborato il modo in cui sono arrivati ​​a questa suite di parametri e quali parametri alternativi potrebbero aver testato e rifiutato. Sarebbe ragionevole supporre che iniziassero con un set molto più ampio, e determinarono (attraverso tentativi ed errori) quali avevano il maggiore effetto sulle prestazioni e quali erano o insignificanti o derivati, e quindi potevano essere lasciati cadere.

Se può sembrare utile, puoi trovare la ricerca qui .

* Un avvertimento su una fase dell'approccio che i ricercatori hanno usato è in ordine. Nella sua Introduzione alla comprensione degli scacchi Move by Move , John Nunn ha scelto "... giochi combattuti tra grandi maestri ..." per illustrare i suoi temi. Quindi aggiunge:

I lettori possono essere piuttosto sorpresi nel vedere il numero di punti interrogativi che adornano i giochi in questo libro. Sicuramente, potresti pensare, con solo trenta giochi da selezionare, sarebbe stato facile trovare alcuni giochi sonori. Tuttavia, posso assicurarti che non lo era. ... è possibile trovare difetti in quasi tutti i giochi complessi e combattuti ... Non ho mai pensato che il mio gioco fosse assolutamente accurato, quindi personalmente non trovo queste rivelazioni angoscianti. Tuttavia, alcuni potrebbero avere difficoltà ad ammettere che gli scacchi giocati dagli esseri umani sono meno precisi di quanto si pensasse in precedenza.

Il punto sollevato dal dott. Nunn suggerisce che l'approccio iniziale dei ricercatori nell'impostare i parametri del motore, imponendo loro di imitare le mosse dei grandi maestri, potrebbe essere difettoso perché il gioco umano è difettoso . In effetti, è risaputo che i motori funzionano già meglio degli umani .

Pertanto, forse un approccio migliore all'impostazione dei parametri iniziali sarebbe quello di abbinare un nuovo motore a un motore esistente superiore .


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.