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

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

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

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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