据我了解,最简单形式的Minimax算法以下列方式工作:自下而上遍历游戏树,如果是玩家轮流,则指定所有孩子的最高分数节点到当前节点,否则为最低分数。叶子根据比赛输出得分,让我们说赢得+1,抽签0,丢失-1。最后选择导致得分最高的节点的移动。
当然,遍历整个游戏树是不切实际的,因此使用启发式算法。但假设我们即将结束比赛。然后我发现这个简单方法存在一些问题。
例如,我们正在下棋,而玩家(白人玩)已达到这个位置:
是球员转身。所以Qg7中有一个配偶,因此Qg7的节点得分为1.但是,例如,Ke1也是一个合法的举动。唯一的答案是c5,然后Qg7#仍然可用。而且因为Qg7得分为1,所以c5得分,Ke1也得分。
所以我们至少有两个得分为1的动作(Ke1和Qg7)。让我们说算法先考虑王移动,然后选择得分最高的第一步。这意味着,在这个位置上,玩家不会对抗对手,但会做随机的King移动,直到对手实际上可以阻止将死(与棋子进行控制)。
根本问题是,一个(Qg7)中的将军与两个(Ke1)中的将死分数相同,所以没有理由让玩家真正选择一个将军。
通过对Minimax算法的简单修改可以防止这种情况:在得分相等的情况下,选择具有此分数的较短路径。因此,首选一名将死的人。
我的问题是:我没有在任何Minimax相关来源中发现任何提及,所以我对Minimax有一些误解吗?如果没有,这是解决这个问题的常用方法还是有更好的方法?
答案 0 :(得分:1)
我很确定你能正确理解minimax。
我可能会做的是简单地传递minimax函数中的当前距离,并根据该权重对胜负进行加权。通常应首选更快的胜利(以减少看不见的情况的可能性)和更慢的损失(以允许对手的错误)。无论胜利是1,还是任何正值,都没有太大关系 - 它仍然会被选为优于0或-1。
如果你的胜利是你的启发式中最大的可能值 - 你仍然可以做类似的事情 - 只需通过增加或减少它来加权它,但仍然比其他所有非赢的值都大。< / p>
对于你的例子,它可能并不重要,因为当pawn接近推广时,你会发现抽签即将到来,然后你就会获胜。但如果出现这种情况肯定会成为一个问题: