如何影响极小化-极大化算法偏好即时奖励?

我在实现一个斯特拉特戈游戏的极小化-极大化算法(其中计算机对所有棋子的位置有完全的了解)。然而,我发现计算机常常不会攻击它可以轻易摧毁的棋子。据我所知,极小化-极大化算法的得分来自于移动树的叶节点(每一层代表一个回合,每个叶节点的得分通过评估函数计算该位置的棋盘状态)。所以如果我的搜索深度是3层,计算机可以在第一步攻击或第三步攻击。根据极小化-极大化算法,这两种情况的得分是相同的(结果棋盘位置的得分相同)。那么,我如何影响极小化-极大化算法偏好即时奖励而不是最终奖励呢?即,我希望得分随时间衰减,但按照极小化-极大化算法的工作方式,我看不出这是可能的。极小化-极大化算法总是使用叶节点来确定中间节点的得分。


回答:

正如评论中其他人提到的,极小化-极大化算法应该能够自动注意到延迟捕获棋子是否存在危险,改变评估函数以强制其偏好早期捕获可能会损害游戏表现。

不过,如果你真的想这样做,我认为唯一的方法是开始在你的游戏状态中存储额外的信息(不仅仅是棋盘)。你需要在内存中为每个游戏状态存储时间戳,以便事后仍然能够准确知道某个棋子是在哪个回合被捕获的。利用这些信息,你可以在搜索树的叶节点使用的评估函数中实现一个衰减因子。

另一种解决方案可能是确保你搜索到一个偶数深度层;2或4而不是3。这样,你的算法将始终评估对手最后移动的游戏状态,而不是你的计算机玩家。所有评估将变得更加悲观,这在某些情况下可能会鼓励你的代理偏好早期奖励。

这种奇数搜索深度通常会导致与偶数搜索深度不同的评估效果,被称为奇偶效应。你可能有兴趣进一步了解这一点(尽管通常讨论的原因与你的问题不同)。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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