我想開發一個簡單的國際象棋引擎,但我正在努力與它的表現。我已經實施了alpha-beta修剪和迭代深化(沒有任何額外的啓發式)的Negamax,但我無法獲得超過第3-4層的合理搜索時間。下面是我的程序日誌摘錄從遊戲的開頭:國際象棋:高分支因子
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
它表明分支因子是10左右。我已經閱讀了正確的舉動排序我應該得到的東西約6,所以我懷疑我的訂購是錯誤的。它目前的工作方式如下:
- 遊戲樹節點有一個鏈接的子節點列表;最初,捕獲和促銷安靜的移動之前放置
- 在搜索中,孩子增加字母或導致截止放置在列表
- 關於深化PV的下一個迭代的開始要搜索的第一個
這是一個合適的方式來訂購移動和我得到的分支因素是可以預料的嗎?目前我正在使用一個簡單的靜態評估函數,它只考慮位置的材料差異 - 是否可以成爲低截止率的原因(如果還考慮數字的移動性,我會得到類似的結果)?諸如零移動減少或啓發式殺手這樣的技術是否會顯着幫助(不是10-15%,而是一個數量級)?我不希望我的引擎強大,但我希望分支因子大約爲6.
這是您第一次搬家的日誌嗎?如果是這樣,那些PV對我來說不合法。 – TonyK 2013-05-11 19:19:07
Claude Shannon是數學家,他在1950年代提出了第一種計算機胸部算法。他的論文是香農數字的基礎,據說是可能的國際象棋遊戲數量(大約10^120)。在他的工作中,他得出的結論是,如果一臺計算機可以每秒鐘評估10^6次可能的移動,那麼需要一臺計算機超過10^90年才能達到第一步(宇宙中的原子數目是估計在10^80左右)。 – scottb 2013-05-11 19:21:30
這是第三步。以前是C2-> C4和D1-> A4。 – Matis 2013-05-11 19:22:09