我正在设计一款国际象棋游戏,游戏中将包含一个AI对手供玩家对战。用户还可以创建自定义的棋子作为起始阵容,通过组合他们已解锁的当前棋子的行为(例如,一个“女英雄”,是王后和马的混合体)以及全新的棋子。游戏还将引入不同于传统8×8的新的棋盘形状。
那么,问题在于如何设计AI。我决定从简单开始,尝试使用带有alpha-beta剪枝的极小极大算法,但问题在于如何评估位置。
评估具有新棋子和新棋盘形状的位置(这些在编译时无法预先确定)是很少有人提到的,我不知道如何着手。简单地将每颗棋子的价值进行点数总和并不奏效,因为无法为自定义棋子评分。我知道Alpha Zero和其他国际象棋引擎使用大型神经网络来评估他们的位置。
编辑:我与一位朋友讨论了可能的架构,我们考虑了一个理论架构,其中每个自定义棋子的行为被编码成一个二进制字符串,然后与棋盘布局(这也将是一个二进制字符串)结合,创建评估函数的MLP的第一输入层,该评估函数将有一个单一的输出神经元,输出一个数字,表示位置的评估(如常规,积极数表示白方,负数表示黑方)。
然后将评估函数放入极小极大算法中,创建一个AI机器人,并使用它让其自战,以训练评估函数,我们获取游戏的结果(白方胜利为1,黑方胜利为0),并用此创建一个成本函数——如果白方胜利,那么白方的评估函数应该大多数时间评估位置为正数。
当然,这并不能防止对手可能突然犯错,从而完全改变游戏的潮流,即使他们大多数时间可能处于领先地位。为了纠正这一点,我们让同一个模型多次对战自己,重复同一场游戏,但每次都给移动添加随机噪声。
我不知道这是否可行,我希望一些AI专家能指出任何缺陷或替代方案。
回答:
通用游戏玩法(GGP)是一个AI领域,其中的规则在游戏开始前是未知的。因此,如果玩家解锁了新的自定义棋子移动,你可以将这些编码成游戏描述语言(GDL)并让其进行游戏。有许多开源玩家可用,比如Cadiaplayer、Sancho和其他一些。