我知道如何使用像minimax这样的算法来玩完美的游戏(在这种情况下,我正在寻找类似于Tic-Tac-Toe的游戏)
然而,我想知道如何创造一个非完美的算法,或者在不同的“技能水平”(简单,中等,硬等)的AI,人类玩家实际上有机会击败
答案 0 :(得分:3)
在不同深度处切断搜索以限制计算机的技能。更改评估功能,使计算机支持不同的策略。
非专业人类玩家采用次优策略和有限策略。这些大致相当于对游戏状态的评价不佳以及思考能力有限。
关于随机性,需要一点点,所以计算机并不总是犯同样的错误,有时可能会比平常更好或更差。为此,不要总是选择最佳路径,而是选择其中的分数加权。通过改进其评估功能,即根据游戏结果更新其权重,您可以使AI更有趣。通过这种方式,它可以通过游戏在有限的搜索深度学习更好的评估功能,就像人类一样。
答案 1 :(得分:0)
我在游戏中使用的一种方法是利用随机值。对于简单的游戏关卡,我会选择一个有利于人类玩家的随机数。例如:
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
我相信有更好的方法,但这可能会给你一个想法
答案 2 :(得分:0)
“最简单”的方法是使用阈值和minmax结果,从那些超过阈值的结果创建一个集合,然后随机选择程序的选择/路径。门槛越低,可能更容易对手。
我说可能是因为即使是纯粹的愚蠢运气也可以选择最好的举动,因此是“初学者的运气”。
基本上,您正在寻求增加可能结果的熵(随机性)。如果你想特别愚弄计算机对手,你可以限制你的minmax算法遍历的水平,或者使算法某些部分的点数贬值。答案 3 :(得分:0)
发动机制造人为错误并不容易。减少搜索深度是一种简单的方法,但它有其局限性。例如,减少到一层的国际象棋引擎经常进行检查,而一个有价值的棋子仍然受到攻击。当对手在反击中为支票辩护时,两件都是奖品。即使是没有经验的人也不太可能因为这个错误而堕落。
也许你可以使用一个名为Phalanx的国际象棋引擎的一些想法: http://phalanx.sourceforge.net/index.html
它是为数不多的具有复杂难度级别(-e选项)的开源引擎之一。如果我没有弄错,它会执行正常搜索,但有时会忽略非显而易见的移动。 evaluate.c
包含一个名为blunder
的函数,用于评估移动是否可能被人忽略。