Sto provando a sviluppare un semplice motore di scacchi, ma sono alle prese con le sue prestazioni. Ho implementato Negamax con potatura alfa-beta e approfondimento iterativo (senza ulteriori euristiche), ma non sono in grado di ottenere tempi di ricerca ragionevoli oltre il 3-4 ° strato. Ecco un estratto dal registro del mio programma dall'inizio del gioco:Scacchi: alto fattore di ramificazione
2013-05-11 18:22:06,835 [9] INFO CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Searching at depth 1
2013-05-11 18:22:06,835 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Leaves searched: 28
2013-05-11 18:22:06,835 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Nodes searched: 28
2013-05-11 18:22:06,835 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Found PV: A4->A6
2013-05-11 18:22:06,835 [9] INFO CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Searching at depth 2
2013-05-11 18:22:06,897 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Leaves searched: 90
2013-05-11 18:22:06,897 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Nodes searched: 118
2013-05-11 18:22:06,897 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Found PV: A2->A3 B7->B6
2013-05-11 18:22:06,897 [9] INFO CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Searching at depth 3
2013-05-11 18:22:08,005 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Leaves searched: 6027
2013-05-11 18:22:08,005 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Nodes searched: 6414
2013-05-11 18:22:08,005 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Found PV: A2->A3 A6->B8 A4->A7
2013-05-11 18:22:08,005 [9] INFO CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Searching at depth 4
2013-05-11 18:22:10,485 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Leaves searched: 5629
2013-05-11 18:22:10,485 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Nodes searched: 6880
2013-05-11 18:22:10,485 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Found PV: D2->D4 A6->B8 C4->C5 A7->A6
2013-05-11 18:22:10,485 [9] INFO CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Searching at depth 5
2013-05-11 18:22:34,353 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Leaves searched: 120758
2013-05-11 18:22:34,353 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Nodes searched: 129538
2013-05-11 18:22:34,353 [9] DEBUG CoevolutionaryChess.Engine.MoveSearchers.NegamaxMoveSearcher [(null)] - Found PV: D2->D4 A6->B8 C4->C5 A7->A6 A4->A6
Essa mostra che ramificazione fattore è di circa 10. Ho letto che con una corretta mossa ordinamento dovrei ottenere qualcosa intorno a 6, quindi ho il sospetto che il mio ordine è sbagliato. Attualmente funziona in questo modo:
- Il nodo dell'albero di gioco ha un elenco collegato dei suoi figli; inizialmente, cattura e le promozioni sono posti prima di mosse tranquille
- Durante la ricerca, bambino che aumenta alfa o cause di taglio è posto all'inizio della lista
- Sulla prossima iterazione di approfondimento fotovoltaico dovrebbe essere cercato prima
È un modo corretto per ordinare i movimenti e il fattore di ramificazione che ottengo è prevedibile? Attualmente sto usando una semplice funzione di valutazione statica che tiene conto solo della differenza materiale della posizione - può essere una ragione per una bassa frequenza di taglio (se si considera anche la mobilità delle cifre, ottengo risultati simili)? Tecniche come la riduzione del movimento nulla o l'euristica killer potrebbero aiutare in modo significativo (non del 10-15%, ma di un ordine di grandezza)? Non mi aspetto che il mio motore sia forte, ma vorrei che il fattore di ramificazione sia circa 6.
È il registro dalla prima mossa? Se è così, quei PV non mi sembrano legali. – TonyK
Claude Shannon è stato il matematico che ha posato il primo algoritmo per la cassa del computer negli anni '50. La sua tesi era la base per il numero di Shannon, che si dice sia il numero di possibili giochi di scacchi (circa 10^120). Nel suo lavoro, è giunto alla conclusione che se un computer potesse valutare 10^6 mosse al secondo, ci vorrebbe un computer più di 10^90 anni per arrivare alla prima mossa (il numero di atomi nell'universo è stimato intorno ai 10^80). – scottb
Questa è una terza mossa. Precedente erano C2-> C4 e D1-> A4. – Matis