我想代表游戏 connect6 wiki(也许谓词石头(P,X,Y),其中 P 是玩家,X,Y 是坐标很好)。我也想用任何好的启发式方法来解决问题(制造对手)。你能给我一些关于 Prolog 中游戏 AI 的文章的提示吗?谢谢
2 回答
如果您在有限板上实现 Connect6,那么该游戏的可能表示形式是变量列表的列表,最初是未绑定的。您可以通过将变量与其中一个原子black
或white
. 然后,您可以使用 测试位置P
是否仍然为空var(P)
。这种表示应该比stone/3
术语列表操作起来要快得多。它之所以有效,是因为在 Connect6 中,您永远无法移除石头。
我假设启发式是指适用于 minimax、negamax 或 alpha-beta 搜索的评估函数。考虑到游戏规则,我建议对于每个玩家,您计算长度为 5 的行数并为那些 5 打分,为长度为 4 的行打分 4 等。这给您两个分数 S 1和 S 2。从 S 1中减去 S 2会产生玩家 1 的相对优势。然后找到某种方法将它们归一化到范围 [-1,1] 或对游戏超过无穷大或负无穷大的情况进行评分。(如何在 Prolog 中表示所有内容留作练习。)
您可能想查找http://en.wikipedia.org/wiki/Minimax游戏树。为了优化搜索,您可能不想考虑所有可能的移动。也许只是与现有棋子一致且距其 6 个或更少空格的动作。
然后你需要一个http://en.wikipedia.org/wiki/Evaluation_function。可能类似于为“我离完成一条线有多近”分配一个分数,总体上正在进行中的线。
构建和优化游戏树更像是一个机械过程。创建评估函数是一个有趣的部分,它会给你的 AI 对手带来独特的风味。
在谷歌搜索“minimax 游戏树序言”出现了一个不错的 powerpoint: http ://staff.science.uva.nl/~arnoud/education/ZSB/2009/