Dav*_*ave 6 algorithm evaluation artificial-intelligence minimax
一个学校项目让我用C++编写一个日期游戏(例如http://www.cut-the-knot.org/Curriculum/Games/Date.shtml),其中计算机玩家必须实现具有alpha-beta修剪的Minimax算法.到目前为止,我理解算法背后的目标是在最大化潜在收益方面,同时假设对手将其缩小.
但是,我读过的资源都没有帮助我理解如何设计评估函数,minimax基于它的所有决策.所有示例都为叶节点分配了任意数字,但是,我需要为这些节点实际分配有意义的值.
Intuition告诉我,对于win leaf节点来说它会是+1,对于一个丢失节点会是-1,但是中间节点如何评估呢?
非常感激任何的帮助.
最基本的minimax仅评估叶节点,标记胜利,损失和绘制,并在树上备份这些值以确定中间节点值.在游戏树难以处理的情况下,您需要使用截止深度作为minimax函数的附加参数.达到深度后,您需要为不完整状态运行某种评估函数.
minimax搜索中的大多数评估函数都是特定于域的,因此找到特定游戏的帮助可能很困难.请记住,评估需要返回某种特定玩家获胜位置的百分比预期(通常是最大值,但不是在使用negamax实现时).几乎没有研究过的游戏会与另一个更加研究的游戏非常相似.这个与游戏拾音棒紧密相连.仅使用minimax和alpha beta,我猜这个游戏很容易处理.
如果你必须为非终端位置创建一个评估函数,这里有一些帮助分析棒游戏,你可以决定它是否对日期游戏有用.
通过查看终端位置以及可能导致该位置的所有移动,开始寻找强制结果的方法.在棒球游戏中,终端位置在最后一次移动时剩余3根或更少的棒.因此,立即进入该终端位置的位置将留下4支给你的对手.现在的目标是让你的对手无论如何都会留下4支球,这可以通过留给你的5,6或7支球来完成,并且你想强迫你的对手离开你进入其中一个位置.你的对手需要在5,6或7中所需的位置是8.继续这个逻辑并且模式变得非常快.总是给你的对手留下一个可以被4整除的数字而你赢了,其他任何东西都输了.
这是一个相当简单的游戏,但确定启发式的方法很重要,因为它可以直接应用于您的任务.由于最后一次移动是第一次,并且你一次只能改变1个日期属性,你知道赢得那里需要剩下2个移动......依此类推.
祝您好运,让我们知道您最终在做什么.