Come "pensano" i motori di scacchi?


28

Quello che voglio sapere è come i motori sono programmati per trovare le mosse. Sono sicuro che prima calcolano le linee più forzanti come acquisizioni e assegni. Ma che dire delle mosse posizionali sottili e profonde? Sembrano trovarli anche molto rapidamente (in generale. Ovviamente mancano queste mosse di tanto in tanto). Come in, come sono programmati per cercare movimenti silenziosi / idee posizionali? Non possono semplicemente forzare ogni mossa, poiché ciò richiederebbe troppo tempo, quindi dovrebbe esserci un modo intelligente per arrivare alle mosse migliori molto rapidamente. Sono interessato a saperlo perché penso che aiuterebbe i giocatori a riflettere anche nel mondo reale.


I motori di scacchi osservano diversi milioni di posizioni al secondo, quindi possono effettivamente guardarli tutti fino a quando non ottengono qualche mossa in profondità.
Remco Gerlich,

2
Questa è una domanda fantastica, mi sono piaciute molto le risposte.
Travis J

Fondamentalmente cercano avanti con un algoritmo di ricerca (ad esempio, minimax) e valutano le posizioni usando l'euristica pre-programmata. Sebbene alcuni motori recenti (ad esempio AlphaZero) sviluppino i propri metodi di valutazione giocando da soli.
Ignoranza inerziale

Risposte:


22

In generale, i motori degli scacchi usano un albero decisionale. La radice dell'albero è la posizione corrente e ha un nodo figlio per ogni posizione che può essere effettuata facendo una mossa legale. Ognuno di questi nodi a loro volta ha un nodo figlio per le posizioni che possono essere raggiunte facendo una mossa legale da esse. Il motore spinge l'albero ad una profondità definita dalle sue capacità e dal tempo che gli è concesso di "pensare". Le posizioni che possono essere raggiunte in più di un modo sono semplicemente referenziate in modo da non essere prese in considerazione più di una volta. Una volta creato l'albero, il computer utilizza una serie di regole ponderate per analizzare le posizioni finali dell'albero e inizia a rimuovere quelle indesiderabili o che l'avversario può impedire che raggiunga. L'albero viene abbattuto in questo modo fino a quando rimane una sola mossa e il computer esegue quella mossa.

http://www.chess.com/blog/zaifrun ha serie o articoli sulla creazione di un motore di scacchi se si desidera uno sguardo più approfondito su come funzionano.


Bella risposta, quindi quando vedi una profondità di 30, significa che il motore ha cercato in profondità 30 nodi? Inoltre, cosa significa Ply?
xaisoft,

Non sono sicuro di ciò che Ply rappresenta senza fare ulteriori ricerche, non sono mai stato bravo con gli acronimi. Piuttosto la profondità si riferisce a quanti nodi in profondità, ogni nodo sarebbe un mezzo movimento, o ai movimenti in profondità potrebbe dipendere dal programmatore. Comunque penso che la convenzione vorrebbe che fosse il numero di mosse profonde.
Edward Goodson,

5
Una tela è la metà di una mossa. Una mossa negli scacchi è un 'set' completo se lo farai di bianco + nero. Uno strato ne è la metà, quindi solo un colore.
ErebusBat

21

Stai facendo una domanda piuttosto complessa, ma è bene tornare alle origini. Ci sono un paio di concetti da considerare:

Valutazione

Se a un giocatore (reale) viene mostrata una posizione e viene chiesto "chi sta vincendo questo gioco?", Come fanno a decidere? Molto probabilmente, controlleranno alcune cose di base, come: differenze materiali, il grado in cui i pezzi sono stati sviluppati o posizionati "bene", pedine raddoppiate / isolate / connesse / passate, file (controllati) aperti, fino a che punto la tavola sono le pedine.

Ora, se fosse necessario, potresti trovare un modo sistematico per calcolare un punteggio di posizione basato su quanto sopra. Potresti decidere, ad esempio, che una pedina vale 1 punto e che una pedina passata vale 0,3 punti in più. Le pedine isolate o raddoppiate potrebbero valere un po 'meno, ecc. Se sommi tutto, otterrai un valore stimato per la posizione immediata a portata di mano.

Questo è noto come valutazione e fondamentalmente tutti i programmi di scacchi hanno un modo per valutare le posizioni (ignorando i nuovi motori di scacchi AI che sono in genere molto deboli).

Ma che dire delle mosse posizionali sottili e profonde?

Bene, abbiamo appena graffiato la superficie della valutazione della posizione. L'attuazione effettiva di una funzione di valutazione potrebbe essere semplicistica, per consentire di valutare più posizioni al secondo (anche se in modo approssimativo), o più complesse, portando a meno posizioni valutate, ma con un livello di confidenza più elevato. Non è insolito che la funzione di valutazione tenga conto di centinaia o addirittura di migliaia di informazioni separate.

Ricerca

Ho specificamente escluso qualcosa di cui sopra, a cui la maggior parte dei giocatori reali penserà immediatamente: c'è un modo per vincere immediatamente la partita per entrambe le parti? Sono visibili compagni o pezzi "pendenti"? Anche se è facile banalizzare questo, è tutt'altro che banale.

Cosa significa per un giocatore avere piena fiducia in una combinazione? Alla fine, si riduce a aver calcolato tutte le opzioni. I giocatori reali di solito non lo faranno (tranne che per compagni banali o molto forzati), il più delle volte considereremo solo una manciata di opzioni e escluderemo altri che sembrano "non costruttivi" o che ovviamente portano a una perdita . Spesso commettiamo errori durante questo calcolo, ad esempio potremmo renderci conto che un cambiamento negli ordini di spostamento fa evaporare le minacce, ecc. Il punto è che per essere completamente sicuri di una combinazione, devi effettivamente calcolare fino alla sua conclusione, supponendo che ogni il giocatore metterà a sua disposizione solo la mossa migliore possibile (definita "min / max").

Ora, dato che gli scacchi hanno uno spazio di ricerca molto più ampio (questo è ciò a cui si fa riferimento "tutte le mosse possibili in futuro") di quello che è possibile calcolare per un computer, è necessario scendere a compromessi. Proprio come gli umani, i computer possono decidere di ignorare intere linee di pensiero basate su determinati criteri. Questo è noto come euristica . Vale la pena notare che mentre puoi essere davvero sicuro di una combinazione solo se la forza brutalmente, una complessa funzione di valutazione può spesso rilevare la presenza di minacce (ad esempio, potremmo contare forchette, opportunità di infilzamento, ecc., Per guidare una ricerca in quella direzione ).

Alla fine, sebbene i computer siano estremamente veloci, è l'euristica che consente loro di calcolare così in profondità. Detto questo, potresti essere sorpreso dal modo in cui i motori moderni profondi calcolano completamente, in genere supera le 3 mosse, anche nei giochi veloci.

Conclusione / combinando tutto

Quindi, per riassumere: le funzioni di valutazione hanno molta intelligenza incorporata in loro (cioè prendono in considerazione più cose rispetto al tuo giocatore umano medio), l'euristica consente al computer di abbattere le linee di pensiero che decide che probabilmente non finirà bene, e i computer sono estremamente, estremamente veloci. Aggiungili e sono piuttosto difficili da battere.


6

Sono d'accordo con le risposte.

Ricordo che GM Roman Dzindzichashvili ne parlava, in uno dei video dei laboratori di Roman , non ricordo che video fosse (se qualcuno conosce i dettagli, modifica la mia risposta).

Roman ha detto che lo sviluppatore del motore Fritz è suo amico. Quindi Roman testò Fritz per vedere quanto fosse bello, e lo sviluppatore disse a Roman che per prendere decisioni complesse (sacrificando materiali in cambio di un vantaggio posizionale, per esempio) dovevano cambiare il valore dei pezzi, come dire al programma che un cattivo vescovo vale 1 punto, un vescovo su una diagonale aperta vale 7 punti, i cavalieri valgono 5 punti in posizioni ravvicinate ...

Non conosco i numeri esatti per ogni pezzo, ma è così che funziona, e ora il tuo motore non avrà alcun problema a sacrificare un cattivo vescovo o qualsiasi altra cosa se puoi dirgli il valore di ogni pezzo in ogni posizione.

MODIFICARE

Vedi anche Wiki sulla programmazione degli scacchi .


4

È semplicemente impossibile per i computer guardare abbastanza in profondità (25 strati e più) e controllare ogni possibile mossa.

Ciò che rende possibile è la tecnica chiamata potatura Alpha-beta, il che significa che i computer, simili agli umani (ma molto meglio) seguono solo le promettenti continuazioni.

Valutano costantemente le posizioni (sulla base di alcune regole precodificate, valutazione del materiale, sicurezza del re, attività, strutture dei pedoni ecc.) E esaminano le variazioni che sembrano portarle verso la posizione migliore.

È ancora vicino alla magia il modo in cui riescono a farlo in modo abbastanza efficiente da valutare milioni di queste posizioni in un secondo.

Quindi, per riassumere, hai ragione, non possono guardare tutte le mosse se giocano a scacchi strategici, ma possono guardare molto rapidamente mosse decenti. Il problema è ancora con i piani a lungo termine e l'orizzonte a cui possono vedere, ma su questo si sta lavorando (Rybka analizza molto più lentamente, ma gioca molto più a scacchi posizionali, mentre Houdini è romantico nel suo "cuore meccanico" che calcola più mosse e suonare in modo più aggressivo). Anche i computer hanno i loro stili!


3

La potatura alfa-beta significa semplicemente che se trovi una linea che risulta male per te, smetti di guardare quella mossa candidata e invece provi gli altri. È un tipo di potatura all'indietro che significa che di conseguenza non ti perderai mai una buona mossa. La potatura in avanti, al contrario, si basa più sulle congetture. La potatura futilità, le riduzioni delle mosse tardive e il rasoio sono tipi di potatura diretta e tutti si basano sul sentimento del programmatore per quale tipo di mosse dovrebbe essere considerato. Un programma che esegue molte potature in avanti può perdere sacrifici sorprendenti che portano all'accoppiamento, ma d'altra parte elimina molte mosse davvero sbagliate e quindi può andare più a fondo guardando le mosse che favorisce.

La maggior parte dei motori cerca le prime mosse a fondo esaminando tutte le possibilità. Se nessuna mossa fallisce in alto (cioè sembra chiaramente peggiore di una mossa che hai già considerato), estendi la ricerca solo un po 'di più. In generale, continui a esplorare ogni riga fino a raggiungere una posizione di riposo (senza controlli, acquisizioni, minacce di accoppiamento, ecc.), Quindi esegui la valutazione. Le mosse silenziose potrebbero non essere prese in considerazione quando sono profonde nella struttura di ricerca, ma una volta raggiunta la posizione effettiva nel gioco, il motore osserva tutte le mosse, silenziose e nitide allo stesso modo. A volte puoi effettivamente vederlo nell'output del motore, quando un motore favorisce improvvisamente una mossa che non aveva preso in considerazione qualche mossa indietro.

I motori calcolano così rapidamente che non è così importante per loro considerare quale mossa guardare prima, ma per gli umani questa è una domanda chiave. Jonathan Tisdall si prende una cazzata nel rispondere a questo nel suo libro, Migliora i tuoi scacchi ora. Quando sei in attacco, ti suggerisce di guardare prima le mosse più violente. Quando difendi, guardi prima le linee più difficili. Cita anche le regole empiriche posizionali (ad es. Centralizzazione, coordinamento) quando decide quali mosse guardare prima.

Altri libri che potrebbero essere rilevanti sono le Mosse di scacchi invisibili di Emmanuel Neimann e le Mosse di scacchi forzate di Charles Hertan, entrambe le quali sostengono l'importanza di considerare mosse improbabili o sorprendenti in posizioni acute. Hertan parla persino di sviluppare "occhi da computer" per tali tattiche.

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.