国际象棋编程中递归的良好应用?

6
作为一项作业任务,我需要用Java编写一个简单的国际象棋游戏。我想利用这个机会尝试递归算法,不知道在国际象棋中是否有明显的递归代码应用场景?

我在1998年写的第一个Java程序是一个下棋程序,使用Laplace在下面提到的递归极小化算法。这绝对是一个有趣的项目,可以学习Java和递归。 - Jesper
6个回答

7

我甚至认为,如果想开发人工智能,递归minmax没有替代方案。 - Andreas Dolk
这个链接也很有用,它解释了alpha-beta算法http://www.fierz.ch/strategy1.htm - Martin Smith
哇,这是一篇很棒的文章。看起来这是一种在不同阶段使用不同的方法。也许会有一个版本用于对手,另一个版本用于其他目标(例如,夺取棋子),每个版本深度不同。嗯……很有趣。 - JDelage

3

是有的。如果你有一个函数来评估某个位置对于白方玩家的“力量”,那么你可以移动一枚棋子并递归调用该函数来评估移动的价值并选择最佳的移动。

你应该为黑方玩家调用同样的函数,交换黑色和白色的角色,以此评估对手移动的“危险”。

然后再为白方调用相同的函数,以此类推。

但要注意不要递归过深,否则会非常耗时。


谢谢。我只需要找到每个动作价值的好逻辑。 - JDelage

1

深度优先搜索是递归的一个重要应用。因此,如果你正在为作业编写人工智能程序,AI 的前瞻算法尝试确定最佳下一步将是一个不错的选择。

但要小心 - 你很容易就会耗尽内存。您可能希望限制 AI 可以查看的棋步数。


1

谨记动态规划,由于有多种组合可以导致相同的结果,您应该记得缓存移动以避免重复计算

如果您检测到递归只是将您带到了已经存在的地方,请中断该调用。这被称为回溯


0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接