据我所知,极小的算法在最简单的形式下工作如下:遍历游戏树自下而上,如果是玩家的回合,将所有子节点的最大得分分配给当前节点,否则最小得分。叶子是根据游戏的输出来评分的,比如说+1代表胜利,0代表平局,-1代表失败。最后选择移动到得分最高的节点。
当然,遍历整个博弈树是不切实际的,所以使用启发式方法。但假设我们快结束比赛了。然后我发现这个简单的方法有一些问题。
例如,我们正在下国际象棋,而玩家(白棋)已到达以下位置:
轮到球员了。所以在QG7中有一个配偶,QG7的节点得到1分。但举例来说,ke1也是一项法律行动。唯一的答复是c5,那么Qg7仍然可用因为QG7得1分,C5也得1分,Ke1也得1分。
所以我们至少有两个动作得分为1(ke1和qg7)。假设算法首先考虑king移动,然后选择得分最高的第一个移动。这意味着,在这个位置上,玩家不会将对手将死,而是随机地进行国王移动,直到对手能够真正阻止将死(用皇后的棋子)。
最根本的问题是,一中的一个棋子(qg7)和二中的一个棋子(ke1)有相同的分数,所以玩家没有理由真的去一中的一个棋子。
对Minimax算法进行简单的修改就可以防止这种情况:在得分相等的情况下,选择到该得分位置的较短路径所以最好是一个将死。
我的问题是:我没有在任何与Minimax相关的资料中发现任何提及这一点的地方,那么我对Minimax有什么误解吗如果不是,这是通常的解决方法还是有更好的方法?

最佳答案

我很确定你对minimax的理解是正确的。
我可能会做的事情是简单地在minimax函数中传递当前距离,并根据它来加权得失。通常应优先考虑更快的胜局(以减少出现不可见情况的可能性)和更慢的失利(以允许对手犯错)无论胜负是1,还是任何正值,都无关紧要-它仍然会被选为优于0或-1。
如果你有一个赢的可能是最大的价值在你的启发-你仍然可以做类似的事情-只是增加或减少一点它的重量,但仍然有它比所有其他非赢的价值观。
举你的例子来说,这可能并不重要,因为,当棋子接近升职时,你会察觉到一场平局即将来临,然后你会做出制胜的举动但如果:
在搜索深度之外,有一系列不可避免的动作会给你带来最坏的结果(这是极大极小的一个非常普遍的问题,但是如果它是可以避免的,显然最好这样做)。
你这边有时间限制
你不能满足所有的抽签条件(例如3个重复的位置)

关于algorithm - Minimax:如何在残局中获得相等的分数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22607715/

10-11 15:22