创建不完美的游戏算法



我知道如何使用Minimax之类的算法来玩完美的游戏(在这种情况下,我正在寻找类似于TIC-TAC-TOE的游戏)

但是,我想知道如何创建一种不完美的算法,或者是不同的"技能水平"(简单,中等,硬)的AI,以至于人类玩家实际上有机会失败。

切断各个深度的搜索以限制计算机的技能。更改评估功能以使计算机偏爱不同的策略。

非专业人类玩家的玩家具有亚最佳策略和有限的策略。这些大致对应于对游戏状态的评估不良,思考能力有限。

关于随机性,需要一点,因此计算机并不总是会犯同样的错误,有时可能会比平常做得更好或更糟。为此,不要总是选择最佳路径,而要选择它们的分数加权。您可以根据游戏的结果来完善其评估功能,即更新其权重,从而使AI变得更加有趣。这样,它可以像人类一样在有限的搜索深度学习更好的评估功能。

我在游戏中使用的一种方式是使用随机值。对于简单的游戏水平,我让选择一个随机数的几率以支持人类玩家。示例:

Easy level: only beat the human if you can randomly select a value less than 10 from the range of 1 to 100
Medium level: beat the human if you can select a random value which is less than 50 from a range of 1 to 100
Hard level: beat the human if you can randomly select a value less than 90 from a range of 1 to 100

我确定有更好的方法,但这可能会给您一个想法

"最简单"的方法是使用阈值以及您的minmax结果,创建超过阈值的结果的集合,然后随机选择程序的选择/路径服用。阈值越低可能更容易对手。

我可能是因为即使是纯粹的愚蠢运气也可以选择最好的举动,因此"初学者的运气"。

本质上,您正在寻求增加可能结果的熵(随机性)。如果要专门愚弄计算机对手,则可以限制MinMax算法遍历的级别,或者将算法某些部分的点贬值。

引擎犯人类错误并不容易。减少搜索深度是一种简单的方法,但它具有限制。例如,将其降低到一个层的国际象棋发动机经常给予支票,而一件有价值的作品仍受到攻击。当对手用反击捍卫支票时,这两块都是奖项。即使是没有经验的人类,也不太可能因这个错误而陷入困境。

也许您可以使用名为Phalanx的国际象棋引擎中的一些想法:http://phalanx.sourceforge.net/index.html

这是少数具有复杂难度级别(-e选项)的开源引擎之一。如果我没记错的话,它会执行正常的搜索,但有时会忽略非明显的动作。evaluate.c包含一个称为blunder的函数,该函数评估了人类是否可能忽略了一个动作。

最新更新