Come fa un motore a decidere quale nodo cercare per primo?


8

Questa è una domanda di follow-up sulla casualità in Engine Play . La risposta di SmallChess indica che, in un caso, Stockfish ha cercato un determinato numero di nodi dopo 20 anni e un numero diverso negli altri 20, quindi c'è casualità.

La domanda: se ogni nodo ha una determinata posizione, come fa lo Stoccafisso a decidere quale nodo cercare per primo? Prendiamo ad esempio il primo mezzo strato. Il bianco ha 20 possibili prime mosse, quindi ci sono 20 nodi. Chiedo che lo stoccafisso faccia una mossa dopo aver cercato cinque nodi. Questo significa che lo stoccafisso avrebbe potuto valutare solo 1. a4, 1. a3, 1. b4, 1. b3 e 1. c3 prima di dover fare una mossa? Una ricerca sistematica come questa significherebbe tuttavia che lo stoccafisso non ha valutato le prime mosse più comuni.

Immagino che, più avanti nel gioco, ci sarebbe un enorme salto nel numero di nodi per mezzo strato. Ciò significherebbe che lo stoccafisso a volte decide di fare una mossa anche se non ha ancora finito di valutare tutti i nodi nella mezza tela. Come fa a sapere che ha cercato i nodi più promettenti?



Grazie per il link, comunque non capisco davvero. Pronuncia il grafico in basso. Suppongo che A sia la posizione attuale e B, C ed E siano le tre mosse candidate? Se IDDFS alla profondità due va A, B, D, F, C, G, E, F e la mossa migliore è E, è possibile che si verifichi la perdita della mossa migliore se dovesse terminare la ricerca prima di raggiungerla.
Allure il

Non vedo come possa essere un duplicato: la domanda è ovviamente (?) Diversa.
Allure il

Mi dispiace @ user3727079, potresti rimuovere quel voto negativo? Dimmi anche se aiuta.
QuIcKmAtHs

@XcoderX non può rimuoverlo perché io sono colui che vi downvoted
SmallChess

Risposte:


5

http://rebel13.nl/rebel13/ideas.html lo spiega bene.

L'idea di base è ordinare le mosse in base a ciò che il programma ritiene sia la mossa migliore senza effettuare ricerche. Questo punteggio di solito si basa sulla mobilità, il valore di un pezzo quadrato, il controllo centrale, la storia, il potenziale di attacco, le acquisizioni e altri elementi che il programmatore ritiene importanti. Proprio come gli umani basano le loro mosse candidate in base all'intuizione e alla storia, il computer cerca prima la mossa con il punteggio più alto.

Se il computer è limitato a soli cinque nodi, quindi sì, il computer cercherà solo le cinque mosse più alte. Questo fattore di limite di tempo potrebbe causare al computer di perdere un compagno in uno se è stato segnato male. Il primo metodo per correggere ciò era stabilire fail-safe. Ciò interromperebbe una ricerca se la posizione diventasse notevolmente peggiore o significativamente migliore. La speranza era di concedere più tempo per cercare più varianti che potessero usare meglio il tempo. Altri algoritmi di ricerca, l'approfondimento iterativo, hanno migliorato la gestione del tempo in quanto hanno una lunghezza inferiore prima di mettere in atto un fail-safe.


0

Questo problema è piuttosto simile ad alcuni problemi di codifica. Lo stoccafisso ha già più set di mosse pre-calcolate. Rappresenta lo stato della scacchiera usando più bitboard, che quindi utilizza per valutare le posizioni della scacchiera usando una rappresentazione categorica (controlli, tempos, checkmates) e statistica (valori dei pezzi). Quasi immediatamente, utilizza un algoritmo di ricerca alpha-beta avanzato. Per non analizzare più volte la stessa posizione, viene utilizzata una tabella di trasposizione. Questa è essenzialmente la memorizzazione applicata alla funzione di ricerca, che è fondamentale in molti problemi di programmazione della teoria dei grafi. Pertanto, utilizza effettivamente un algoritmo piuttosto semplice. Ecco alcune ricerche fatte prima:

Passaggio 1. Inizializzare il nodo

Passaggio 2. Verificare la ricerca interrotta e il sorteggio immediato. Applicare qui il limite del nodo. (Funziona solo con 1 thread di ricerca, a partire da Stoccafisso 2.3.1.)

Passaggio 3. Accoppiamento della potatura a distanza. Anche se ci accoppiamo alla prossima mossa, il nostro punteggio sarebbe nella migliore delle ipotesi mate_in (textsrightarrowtextply + 1textssrightarrowtextply + 1, ma se l'alfa è già più grande perché un compagno più corto è stato trovato verso l'alto nell'albero, allora non c'è bisogno di cercare ulteriormente, non faremo mai più ricerche battere l'alfa corrente La stessa logica ma con segni invertiti si applica anche nella condizione opposta di essere accoppiati invece di dare accoppiamento, in questo caso restituisce un punteggio alto.

Passaggio 4. Ricerca della tabella di trasposizione. Non vogliamo che il punteggio di una ricerca parziale sovrascriva una precedente ricerca completa. Usiamo un tasto di posizione diverso in caso di mossa esclusa.

Passaggio 5. Valutare staticamente la posizione e aggiornare le statistiche sui guadagni dei genitori

Passaggio 6. Rasoio (viene omesso nei nodi PV)

Passaggio 7. Potatura statica a spostamento nullo (omessa nei nodi PV). Scommettiamo che l'avversario non ha una mossa che ridurrà il punteggio di più di futility_margin (profondità) se facciamo una mossa nulla.

Passaggio 8. Spostare la ricerca senza spostare la ricerca di verifica

Passaggio 9. ProbCut. Se abbiamo un'ottima acquisizione e una ricerca ridotta restituisce un valore molto superiore alla beta, possiamo (quasi) potare in sicurezza la mossa precedente.

Passaggio 10. Approfondimento iterativo interno.

Passaggio 11. Scorri le mosse. Passa attraverso tutte le mosse pseudo-legali fino a quando non rimangono mosse o non si verifica un taglio beta

Passaggio 12. Estendere i controlli e anche le mosse pericolose

Passaggio 13. Potatura di futilità.

Passaggio 14. Effettuare la mossa

Passaggio 15. Ricerca di profondità ridotta (LMR). Se la mossa fallisce in alto, verrà nuovamente cercata a tutta profondità.

Passaggio 16. Ricerca approfondita, quando LMR viene saltato o fallisce in alto.

Passaggio 17. Annulla spostamento

Passaggio 18. Controlla la nuova mossa migliore

Passaggio 19. Controlla la divisione

Passaggio 20. Verificare la presenza di compagno e stallo

Passaggio 21. Aggiorna tabelle. Aggiorna la voce della tabella di trasposizione, i killer e la cronologia

Cercherò di spiegare di cosa parla la ricerca del professore. Lo stoccafisso crea un albero di ricerca della mossa legale. inserisci qui la descrizione dell'immagine Quindi, inizia a valutare se ogni mossa è buona o cattiva, e quanto è buona o cattiva, eseguendo prima un campo di ricerca superficiale e quindi utilizzando i valori di cut-off alpha / beta risultanti come valori iniziali per una ricerca più approfondita. Anche lo stoccafisso dà la priorità ai pezzi. Ad esempio, i cavalieri avrebbero la priorità al centro, quindi se un cavaliere e un vescovo vengono biforcati al centro, questo sposterà il cavaliere, a meno che non ci siano altri guadagni significativi spostando il vescovo. Mentre questo può sembrare complicato, questa esecuzione è approssimativamente log (numero di mosse possibili), rendendolo quindi piuttosto veloce.


@ user3727079 ti aiuta?
QuIcKmAtHs

1
No Sfortunatamente. Non capisco la tua risposta. Non sembra rispondere alla mia domanda, che era su quale nodo cercare per primo, non come fa lo stoccafisso a prendere le sue decisioni (capisco cosa significa cercare negli alberi).
Allure il
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.