如何为井字游戏变体创建评估函数

我正在开发一个井字游戏的变体棋盘游戏。其具体规则如下:

1. 游戏在一个 nxn 的棋盘上进行,n 是可变的。

2. 如果玩家成功地首先放置 k 个对齐,玩家获胜,k 是可变的。

3. 对齐由 l 个标记(XO)组成,可以是水平、垂直或对角线,l 是固定的。

4. 如果 nxn 的网格已满(没有玩家可以添加 XO 的标记),且没有玩家成功放置 k 个对齐,那么游戏平局。

我正在使用带有 alpha-beta 剪枝minmax 算法。这是我的第一个包含人工智能的程序,我不太确定如何创建算法使用的评估函数。我在网上看到了一些使用材料加权来评估位置的例子,但这些在我这里不适用。目前,我使用了一个随机评估函数,返回一个介于 -100100 之间的值。

    float Conf_eval(Configuration c)       {         return (rand()%201)-100;       }

对于给定的棋盘配置,您有何评估建议?


回答:

这在书籍 人工智能 – 现代方法 中有详细讨论

还有基于该书系列的优秀实现(这是 Java 版本,也有 Python 版本,您可以 Google 搜索更多),包括井字游戏(和 alpha-beta 剪枝代理)。

如果您使用的是带有 alpha-beta 剪枝min-max 算法,您可以使用排序的“动作”列表来提高性能,同时使用您的启发式函数(一个简单的效用函数可以将胜利赋值为 1,平局赋值为 0,失败赋值为 -1 – 这些都是 min-max 扩展树的叶节点)。

为了排序动作,您可以优先选择那些将您的符号(XO)添加到明确胜利路径的动作。这最终应该会导致更好的剪枝。

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

发表回复

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