击败极小极大算法对手

我需要创建一个AI来与其他AI竞争。

两个AI将运行在相同的硬件上,拥有相同的时间和内存资源。我知道对手AI将使用带有alpha-beta剪枝的极小极大算法。

我的问题是 – 有什么方法可以击败这样的对手?如果我自己使用极小极大算法 – 那么两个AI都能完美预测对方的行动,游戏的结果将基于游戏的固有属性(如先手必胜等)。

显然的解决方案是设法看到更多可能的走法,这将允许更好的评估 – 由于处理器时间相同,我无法进行更深层次的评估(假设对手的AI代码同样优化)。我可以使用预计算的树来获得额外的优势,但没有超级计算机,我肯定无法“解决”任何非平凡的游戏。

故意选择一个非最优节点,比如alpha-beta会剪枝的节点,这样做是否有价值?这可能会对对手造成CPU时间上的惩罚,因为他们不得不返回并重新评估树。这对我来说也是一种惩罚,因为我必须评估极小极大树+alpha-beta来查看alpha-beta会剪枝哪些节点,而不会直接获得任何好处。

还有哪些其他策略可以针对这样的对手进行优化?


回答:

首先,故意选择非最优路线是没有价值的。假设你的对手会以最优方式进行比赛(这是极小极大搜索的基本假设),你的对手会利用你的错误进行反击。一个好的游戏引擎会有一个哈希反驳表条目,包含针对你的失误的反击棋,所以你通过做出冒险的举动不会节省时间。做出坏的举动只会让电脑对手更快地找到好的举动。

对于像奥赛罗这样的游戏,关键是要认识到,直到游戏后期你才能确定什么是最优的走法。这是因为搜索树几乎总是太大,无法穷尽地搜索所有赢或输的位置,因此极小极大算法无法确定哪些走法会导致胜利或失败。你只能启发式地决定在哪里停止搜索,任意将这些节点称为“终端”,然后运行一个评估函数来猜测一个位置的胜负潜力。

评估函数的任务是评估一个位置的价值,通常使用可以不进一步搜索游戏树就能计算的静态指标。棋子数量、位置特征、残局数据库,甚至对手的心理都可能在这里起作用。你在评估函数中投入的智能越多,通常你的引擎表现就越好。但静态评估的要点是替代那些过于昂贵的搜索。如果你的评估函数做得太多或效率太低,它可能会比获取相同信息所需的游戏树搜索更慢。知道在评估函数中放什么以及何时使用静态评估而不是搜索,是编写一个好游戏引擎的艺术的重要组成部分。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注