我想了解基本的國際象棋算法。我沒有深入閱讀文獻還沒有,但經過一番這裏cogitating是我的嘗試:國際象棋算法概述
1)分配權重值,以件(即主教比棋子更有價值)
2)定義啓發式功能將值附加到特定的移動
3)構建極大極大樹來存儲所有可能的移動。通過alpha/beta修剪修剪樹。
4)遍歷樹找到每個玩家
這是核心的國際象棋的算法「大局」思想的最好的舉動?有人能夠指出我更深入地瞭解國際象棋算法的資源嗎?
我想了解基本的國際象棋算法。我沒有深入閱讀文獻還沒有,但經過一番這裏cogitating是我的嘗試:國際象棋算法概述
1)分配權重值,以件(即主教比棋子更有價值)
2)定義啓發式功能將值附加到特定的移動
3)構建極大極大樹來存儲所有可能的移動。通過alpha/beta修剪修剪樹。
4)遍歷樹找到每個玩家
這是核心的國際象棋的算法「大局」思想的最好的舉動?有人能夠指出我更深入地瞭解國際象棋算法的資源嗎?
以下是國際象棋引擎開發概述。
1.創建董事會代表。
在面向對象的語言中,這將是一個代表內存中棋盤的對象。在這個階段的選項是:
位棋盤的原因是多方面的推薦方式。
2.創建一個評估函數。
這隻需要一個董事會和邊評估作爲agruments並返回一個分數。方法簽名將如下所示:
int Evaluate(Board boardPosition, int sideToEvaluateFor);
這是您使用分配給每件的權重的位置。如果你願意,這也是你可以使用任何啓發式方法的地方。一個簡單的評估函數將增加sideToEvaluateFor的棋子的權重,並減去對方棋子的權重。這樣的評估功能對於真正的國際象棋引擎來說當然太天真了。
3.創建搜索功能。
這就像你說的那樣,用Alpha-Beta修剪技術進行MiniMax搜索。一些流行的搜索算法是:
基本想法是嘗試各種不同的變化,以一定的最大深度,並選擇推薦的舉動通過導致得分最高的變化。每種變化的分數是評估方法在最大深度處的棋盤位置返回的分數。
對於C#中的國際象棋引擎的例子看看我最近放在一起的https://github.com/bytefire/shutranj。要看的更好的開源引擎是用C++編寫的StockFish(https://github.com/mcostalba/Stockfish)。
官方的stockfish repo在這裏:https://github.com/official-stockfish/Stockfish – Matteo
您的問題可能過於寬泛,但A.I. Russell和Norvig的書是一篇很棒的介紹。 – sdasdadas
在您決定沿樹遍歷足夠多之後,您需要採用某種啓發式方法來評估董事會。 –
這裏有一個很好的資源:http://chessprogramming.wikispaces.com/ – harold