用于评估带有自定义棋子和不同棋盘形状的国际象棋位置的算法

我正在设计一款国际象棋游戏,游戏中将包含一个AI对手供玩家对战。用户还可以创建自定义的棋子作为起始阵容,通过组合他们已解锁的当前棋子的行为(例如,一个“女英雄”,是王后和马的混合体)以及全新的棋子。游戏还将引入不同于传统8×8的新的棋盘形状。

那么,问题在于如何设计AI。我决定从简单开始,尝试使用带有alpha-beta剪枝的极小极大算法,但问题在于如何评估位置。

评估具有新棋子和新棋盘形状的位置(这些在编译时无法预先确定)是很少有人提到的,我不知道如何着手。简单地将每颗棋子的价值进行点数总和并不奏效,因为无法为自定义棋子评分。我知道Alpha Zero和其他国际象棋引擎使用大型神经网络来评估他们的位置。

编辑:我与一位朋友讨论了可能的架构,我们考虑了一个理论架构,其中每个自定义棋子的行为被编码成一个二进制字符串,然后与棋盘布局(这也将是一个二进制字符串)结合,创建评估函数的MLP的第一输入层,该评估函数将有一个单一的输出神经元,输出一个数字,表示位置的评估(如常规,积极数表示白方,负数表示黑方)。

然后将评估函数放入极小极大算法中,创建一个AI机器人,并使用它让其自战,以训练评估函数,我们获取游戏的结果(白方胜利为1,黑方胜利为0),并用此创建一个成本函数——如果白方胜利,那么白方的评估函数应该大多数时间评估位置为正数。

当然,这并不能防止对手可能突然犯错,从而完全改变游戏的潮流,即使他们大多数时间可能处于领先地位。为了纠正这一点,我们让同一个模型多次对战自己,重复同一场游戏,但每次都给移动添加随机噪声。

我不知道这是否可行,我希望一些AI专家能指出任何缺陷或替代方案。


回答:

通用游戏玩法(GGP)是一个AI领域,其中的规则在游戏开始前是未知的。因此,如果玩家解锁了新的自定义棋子移动,你可以将这些编码成游戏描述语言(GDL)并让其进行游戏。有许多开源玩家可用,比如Cadiaplayer、Sancho和其他一些。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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