【发布时间】:2009-10-19 13:41:49
【问题描述】:
我有一个关于 Minimax 算法的简单问题:例如对于井字游戏,我如何确定每个玩家玩的效用函数?它不会自动执行此操作,是吗?我必须对游戏中的值进行硬编码,它不能自己学习它们,是吗?
【问题讨论】:
标签: language-agnostic artificial-intelligence minimax
我有一个关于 Minimax 算法的简单问题:例如对于井字游戏,我如何确定每个玩家玩的效用函数?它不会自动执行此操作,是吗?我必须对游戏中的值进行硬编码,它不能自己学习它们,是吗?
【问题讨论】:
标签: language-agnostic artificial-intelligence minimax
不,MiniMax 不会学习。它是蛮力树搜索的更智能版本。
【讨论】:
通常您会直接实现实用程序函数。在这种情况下,算法不会学习如何玩游戏,它会使用您在实现中明确硬编码的信息。
但是,可以使用genetic programming (GP) 或一些等效技术来自动导出实用函数。在这种情况下,您不必编码任何显式策略。相反,进化会发现自己的游戏玩法。
您可以将您的极小极大代码和 GP 代码组合成一个(可能非常慢)自适应程序,或者您可以先运行 GP,找到一个好的实用函数,然后像您一样将这个函数添加到您的极小极大代码中任何手动编码的功能。
【讨论】:
井字游戏足够小,可以将游戏运行到最后,并指定 1 为赢,0 为平局,-1 为输。
否则,您必须提供一个以启发式方式确定位置值的函数。例如,在国际象棋中,一个重要因素是材料的价值,还有谁控制中心或棋子移动的容易程度。
在学习方面,你可以在位置的不同方面添加权重因子,并尝试通过反复玩游戏来优化它们。
【讨论】:
如何确定每次播放的效用函数?
小心 ;-) 这个article 显示了一个有轻微缺陷的评估函数(例如,一个在可能的层数树中向前看时不够“深入”,或者未能捕捉到一些棋盘位置的相对强度)导致整体上的算法很弱(一个更经常失败的算法)。
它不能自己学习,是吗?
不,它没有。然而,有一些方法可以让计算机了解棋盘位置的相对强度。例如,通过查看Donald Mitchie and his MENACE program,您将了解如何在没有任何先验知识但游戏规则的情况下使用随机过程来学习棋盘。有趣的是,虽然这可以在计算机中实现,但由于游戏空间相对较小,而且由于各种对称性,所以只需要几百个彩色珠子和火柴盒。
在学习了这么酷的教电脑玩游戏的方法之后,我们可能不会像应用井字游戏那样对回到 MinMax 感兴趣。毕竟 MinMax 是一种比较简单的修剪决策树的方法,在井字游戏的小游戏空间中几乎不需要这种方法。但是,如果我们必须 ;-) [回到 MinMax]...
我们可以查看与下一场比赛相关的“火柴盒”(即根本不深入),并使用与每个方格相关的珠子百分比作为附加因素。然后,我们可以评估一棵传统的树,但只进行 2 或 3 次深度移动(通常以失败或平局告终的浅预测深度)并根据简单的 -1(损失),0(平局/未知),+1(获胜)评级。然后通过结合珠子百分比和简单评级(比如加法,当然不是乘法),我们能够以更类似于在无法评估的情况下使用的方式有效地使用 MinMax游戏树到尽头。
底线:在井字游戏的情况下,MinMax 只有在我们消除游戏的确定性时才会变得更有趣(例如帮助我们探索特定效用函数的有效性),与简单评估整棵树。让游戏[数学上]有趣的另一种方法是与犯错误的对手一起玩......
【讨论】: