我想了解基本的国际象棋算法。我没有深入阅读文献还没有,但经过一番这里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