algorithm - 极小极大评价函数

标签 algorithm tree minimax

我正在使用 Unity3D 开发《最终幻想 VIII》中的迷你游戏 Triple Triad。

基本游戏是一个 3x3 的网格,玩家和 NPC 手中各有 5 张牌。目标是在棋盘填满时持有最多的牌。卡片的上、下、左、右各有 4 个数字。一个玩家将一张牌放在网格上,另一位玩家可以在它旁边放置一张牌,然后比较牌上的数字(例如,如果一张牌在中间,而对手在它的左边打了一张牌,对手牌的右侧值将与已有牌的左侧值进行比较)。如果一张牌比另一张牌大,那么玩家将“拿走”对手的牌。

有关 Triple Triad 的更多详细信息,请参见:http://finalfantasy.wikia.com/wiki/Triple_Triad

我目前正在设计供单人游戏使用的 AI,以便人类可以与 NPC 对抗。我决定开发 AI 的最佳方法是使用带有 alpha-beta 剪枝的 Minimax 算法,以便为 AI 找出轮到他们时可能采取的最佳行动。

我遇到的问题是,我在互联网上看到的大多数示例都显示了 tic-tac-toe 的评估器函数。这比三元组评估器要简单得多,因为该函数必须考虑卡牌上的值以及它正在玩的位置(例如,拿走敌人的卡牌)。

有人对我如何编写这个评估器函数有任何建议吗?或者至少我如何才能将该网站的代码改编为可以评估我的主板的三元组的代码?

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html

最佳答案

评估函数有两种风格:如果您可以看到游戏的结局(就像您在井字游戏中总是可以看到的那样,即使您在 Commodore 64 上运行),您可以将结果纯粹基于结果是否成功。然后,游戏引擎将只选择获胜的 Action (或者,如果可能的话,平局)。

如果您看不到残局(这在任何有趣的游戏中都很常见),您需要一个函数来对中间棋盘位置进行评分,以衡量它对每个玩家的有利程度。例如,在国际象棋中,您可以为每个棋子分配分值,并将每边有多少 Material 相加并减去。因此,人工智能将有利于更大的物质优势。然后你给评估者奖励分,以奖励对手,等等。

如果你不太了解如何玩游戏(我不止一次为我不知道如何玩的游戏编写了 AI!)那么你可以简单地调整你的 AI 以对抗人类或其他 AI 玩家直到表现良好为止。我专门编写了一个程序来对抗 7th Guest 中的显微镜谜题(它是 Ataxx 的变体)。我必须写它,因为我和我的室友无法通关游戏!很明显,棋盘覆盖的某些功能是正确的功能,我尝试了连接组的奖金等等,直到我的人工智能可以击败游戏的人工智能。我自己仍然无法击败Ataxx,而且我自己的AI更加无情,很快就会屠杀我。

关于algorithm - 极小极大评价函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389155/

相关文章:

java - 这个java while循环在合并排序中做什么?

artificial-intelligence - 我们如何确定 minmax 的时间和空间复杂度?

tree - 如何获取n叉树中节点的路径?

python - Mastermind 极小极大算法

c# - Pentago AI算法如何实现

python - 排列和索引,python

javascript - 对数复杂度 : Either the book has a typo or what's happening here?

algorithm - 从边列表(节点对)构建二叉树

C++ 库对于制作树很有用

java - 使用java插入二叉树不起作用