Come sono migliorati i motori da Deep Blue?


17

I motori di scacchi per computer sono migliorati da quando Deep Blue ha battuto Kasparov nel 1997.

Gli algoritmi sono migliorati o i miglioramenti sono dovuti principalmente agli stessi algoritmi che funzionano più velocemente grazie a hardware più veloce, ecc.?

Se il primo, questi miglioramenti algoritmici sono pubblici?

E se sì, quali sono stati i miglioramenti? Dove posso leggere su di loro?



Come ? Drammaticamente.
Evargalo,

Risposte:


8

Forse puoi dare un'occhiata a TalkChess , un forum dedicato agli scacchi per computer. Ho trovato un thread recente che potrebbe essere interessante per te: progressi in 30 anni con quattro intervalli di 7-8 anni

Un paio di partite tra (ex) top engine sono giocate sullo stesso hardware . Il test suggerisce che negli ultimi anni (2002-2017), il guadagno è ottenuto principalmente dai miglioramenti del software. Nel test, Stockfish (2017) ha segnato un impressionante 94/100 contro RobboLito (2009), mentre RobboLito, a sua volta, ha schiacciato Shredder (2002) con 92/100.

Un'osservazione importante: poiché il calcolo parallelo non è implementato nei motori più vecchi, il test è stato eseguito su un singolo core. Di conseguenza, il guadagno hardware delle macchine parallele non viene misurato. D'altra parte, si potrebbe sostenere che anche il calcolo parallelo sia un vantaggio del software: non è facile progettare e implementare una parallelizzazione efficiente e ben ridimensionata per l'algoritmo di ricerca.

Il motore Stockfish è open source, quindi i miglioramenti algoritmici sono pubblici. Molta documentazione è disponibile su https://chessprogramming.wikispaces.com


Questo risponde alla sua affermazione. Prova a rispondere alla domanda la prossima volta.
Fred Knight,

1
Bene, credo di aver risposto alla domanda: il guadagno è principalmente ottenuto dai miglioramenti dell'algoritmo. Inoltre, ho mostrato dati che supportano questa affermazione (vedi link) e ho sottolineato un possibile difetto (nessuna parallelizzazione misurata).
Maxwell86,

3

Non posso parlare dell'algoritmo usato per Deep Blue, ma cercherò di spiegare i miglioramenti nella programmazione degli scacchi. La velocità è il massimo miglioramento. Deep Blue utilizzava computer dedicati multiprocessore, quindi un confronto non è davvero possibile.

https://chessprogramming.wikispaces.com/ è un'ottima fonte, ma è difficile da navigare.

Ci sono 3 funzioni principali che sono state modificate per migliorare un motore di scacchi: la valutazione, la generazione di mosse e le funzioni di ricerca.

La valutazione è la più difficile da programmare, in quanto vi sono molte eccezioni alle regole. Con lo spazio su disco rigido sempre più economico, la funzione eval consente di valutare più eccezioni.

La generazione di mosse, insieme a fare e non fare una mossa, consuma molta memoria perché deve essere preformata così tante volte. Le funzioni di generazione più comuni sono mailbox, bitboard, 0x88, 8x8, schede estese (10x10, 10x12) e una matrice / tabella di spostamento predeterminata (* utilizzo una tabella di spostamento indicizzata). L'opinione attuale è che i bitboard sono i più veloci e l'utilizzo di bitboard magici lo accelera fino al 30%. Il Dr. Robert Hyatt, professore e creatore del motore di scacchi cratificato, non sostiene un aumento significativo della velocità.

La prima funzione di ricerca era la primitiva funzione min-max. Fondamentalmente stavi cercando di massimizzare il punteggio del lato da muovere e minimizzare il punteggio dell'avversario. Alpha-Beta è stato il primo miglioramento. Hanno ridotto il numero di mosse ricercate per tabella di trasposizione, valori di cut-off, finestre di aspirazione ed euristica della storia. Queste sono ricerche approfondite. C'è anche la ricerca approfondita iterativa interna che cerca di cercare le mosse "migliori" nella speranza più profonda che la ricerca di altre mosse si riveli infruttuosa.

NOTA: la mia tabella degli indici. GNUChess e Jester usano entrambi una matrice di indici per generare le loro mosse. Inizializzano il motore riempiendo l'array con possibili mosse. Prende i sei pezzi e calcola le mosse legali disponibili per ogni quadrato. Quindi ogni pezzo aveva un array [64] [8]. Ho preso questa idea e l'ho compressa in due indici e una tabella. La tabella contiene un valore che indica se sono possibili le 16 mosse, un indice contiene l'offset della mossa e l'altro contiene la maschera.

offset [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};

maschera [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ...};

Quindi la generazione di una mossa scorrevole è facile come cercare la validità della sua maschera nei suoi offset consentiti rispetto alla tabella delle mosse.


7
Cerco di non rispondere alle risposte, ma questo è solo ... Alpha-beta e bitboard sono stati inventati LUNGO prima di Deep Blue. Sono anche abbastanza sicuro che board eval non acceda all'HD in nessun motore sano (la latenza è ENORME). In quarto luogo, sono molto scettico sul fatto che la dimensione della RAM faccia davvero la differenza nella normale implementazione della ricerca alfa-beta.
MaxB

Potresti forse aggiungere alcuni collegamenti ipertestuali ad alcuni dei concetti di cui stai discutendo? Come qualcuno che è interessato al concetto, ma non ha familiarità con la terminologia, è difficile da seguire perché non so cosa sia un bitboard o il motore di scacchi Crafty.
Thunderforge,

Pensavo di essere stato chiaro in quanto non stavo paragonando a Deep Blue, ma stavo dando una breve storia. Il disco rigido a cui mi riferivo è il programma stesso. Ogni volta che un nuovo concetto di valutazione è incluso in un motore di scacchi, è necessario più codice e quindi più spazio in HD.
Fred Knight il

@Thunderforge, l'unico link che ho dato spiega ogni aspetto che potresti desiderare di gestire la programmazione degli scacchi, tuttavia ammetto che è difficile navigare. Ho imparato leggendo i codici sorgente degli altri, ma quello che è maggiormente commentato è il motore Crafty del Dr. Hyatt. Ho scelto di non essere troppo completo a causa delle limitazioni di spazio e delle differenze tra piattaforme e compilatori. Se, dopo aver letto la pagina degli scacchi della wiki, sei ancora confuso, fai la domanda e sono sicuro che molti forniranno una risposta migliore.
Fred Knight,

1
Every time that a new eval concept in included into a chess engine, more code, and therefore more HD space is required.Le funzioni di valutazione della scheda sono in genere progettate per adattarsi alla cache della CPU. Cache CPU << RAM << HD. Le dimensioni HD non fanno differenza.
MaxB

2

Gli algoritmi sono migliorati?

Ovviamente sì un pochino.

o i miglioramenti erano dovuti principalmente agli stessi algoritmi che funzionavano più velocemente grazie a hardware e software più veloci?

Minor nit: se gli algoritmi sono migliorati, allora il software sta migliorando, quindi non c'è "o".

La legge di Moore ci dice che la velocità del processore raddoppierà all'incirca ogni 18 mesi. Ciò significa che è raddoppiato circa 13 volte in 20 anni. Ciò rende i processori moderni da qualche parte nella regione di 8000 volte più veloci. Quindi, di gran lunga il più grande miglioramento delle prestazioni del motore è dovuto all'hardware più veloce.

Se il primo, questi miglioramenti algoritmici sono pubblici?

E se sì, quali sono stati i miglioramenti? Dove posso leggere su di loro?

Beh, non era il primo, era il secondo. Tuttavia i miglioramenti sono per lo più open source e liberamente visibili scaricando le fonti per motori come Stockfish . Forse vale anche la pena dare il link per il download generale di Stockfish poiché il link al codice sorgente specifico scadrà probabilmente quando uscirà la versione 9.


2
That means it has doubled roughly 13 times in 20 years.Penso che stai citando male la Legge di Moore. Non dice nulla sulla velocità del processore. In effetti, non è raddoppiato da un po '.
MaxB

hardware and softwareIntendevo software come nell'implementazione dell'algoritmo (ASM vs C ++), ma posso vedere come sia confuso. Fisso.
MaxB

1
La legge di He Moore è corretta, tranne per il fatto che include la frase "nel prossimo decennio". Questo sarebbe stato nel 1975, ed aveva ragione.
Fred Knight,

-1 perché la risposta è errata: sullo stesso hardware, i motori attuali continuano a schiacciare i motori precedenti.
Allure il

0

Si tratta di algoritmi.

Affrontare un giocatore di scacchi umano ha preso uno dei computer più potenti del mondo in quel momento. Questo approccio informatico alla forza bruta ha permesso a Deep Blue di guardare avanti dalle sei alle otto mosse. In una gara combattuta da vicino, la macchina alla fine sconfisse Kasparov di 3 1/2 partite a 2 1/2.

Sei anni dopo, Kasparov fu coinvolto in un altro concorso tra uomo e macchina. Questa volta ha giocato contro il successore di Deep Blue, Deep Junior. Il risultato è stato una serie disegnata in tre partite tutte. La differenza più grande era che Deep Junior correva su una macchina con circa l'uno percento della potenza di calcolo di Deep Blue. Gli algoritmi di gioco degli scacchi erano migliorati al punto da raggiungere praticamente lo stesso risultato con una potenza di calcolo cento volte inferiore.


4
Benvenuti a scacchi! Hai scritto la parte principale della tua risposta come se fosse una citazione; potresti per favore fornire una fonte?
Glorfindel

0

Disclaimer: non un esperto.

Gli algoritmi sono migliorati e i migliori motori di oggi funzionanti con l'hardware del 1995 (ricordati che Deep Blue era il 1999) batteranno Kasparov. A quanto ho capito, ci sono due aspetti degli algoritmi:

Cerca . Se per esempio prendo la tua regina con la mia regina, un avversario umano guarderà automaticamente per primo alla riconquista. Per un computer, tuttavia, valuterà ogni possibile risposta a QxQ. Quasi sempre, si tratta di una potenza di elaborazione sprecata. Un buon algoritmo di ricerca abbatte tutti questi "rami" poiché sono comunque irrilevanti.

L'algoritmo di ricerca standard è la potatura alfa-beta ed è stato utilizzato nei primi computer di scacchi. Non so se Deep Blue abbia usato la potatura alfa-beta, ma i motori moderni no. Di conseguenza, le loro ricerche sono "non sicure": ad esempio, possono mancare che alcune mosse diverse dalla riconquista della regina avrebbero vinto la partita. Tuttavia, è raro che ciò accada, e in cambio spingono molto in profondità. ("Profondità" è un termine tecnico che indica la profondità con cui il motore cerca, quindi ad esempio un motore che cerca fino alla profondità 30 è in grado di battere uno che cerca solo fino alla profondità 20, a parità di altre condizioni).

Valutazione . Questo è l'altro polo del codice motore. Data una posizione particolare, è meglio per bianco, nero o uguale? Ciò può comportare ogni tipo di funzione, ad es

  • Se un lato ha materiale / spazio extra, dagli un bonus da valutare.
  • Se il bianco ha un cavaliere avanzato supportato da una pedina, dai al bianco un bonus da valutare.
  • Se il re del nero è in stallo, dai al bianco un bonus per valutare.
  • Se il bianco ha una torre nel 7 ° grado, dai al bianco un bonus da valutare.
  • Se si tratta di un endgame (e ci sono algoritmi per decidere se la posizione è un endgame) ed entrambe le parti hanno vescovi di colore opposti, imporre una penalità per valutare (cioè spingerlo verso 0,00).

I motori di oggi valutano le posizioni molto meglio di Deep Blue.

Per quanto riguarda se gli algoritmi sono pubblici, Stockfish è attualmente il motore più potente del mondo ed è open source. Puoi scaricare tu stesso il codice da Github .

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.