如何为一个游戏创建一个好的评估函数?

我有时会编写程序来玩棋盘游戏的变体。 基本策略是标准的 Alpha-Beta 剪枝或类似的搜索,有时会通过常用的残局或开局方法来增强。 我主要玩国际象棋的变体,所以当选择我的评估函数时,我使用了一个基本的国际象棋评估函数。

然而,现在我正在编写一个程序来玩一个全新的棋盘游戏。 我该如何选择一个好的,甚至还算不错的评估函数呢?

主要的挑战是,相同的棋子始终在棋盘上,因此通常的物质函数不会根据位置而改变,并且该游戏已经被玩了不到一千次左右,因此人类不一定能够很好地玩它并提供见解。(PS。我考虑过 MoGo 方法,但是随机游戏不太可能终止。)

游戏细节:该游戏在一个 10×10 的棋盘上进行,每方有固定的六个棋子。 这些棋子具有一定的移动规则,并且以某种方式相互作用,但是没有棋子会被捕获。 游戏的目标是在棋盘上的某些特殊方格中拥有足够多的己方棋子。 计算机程序的目标是提供一个与当前人类玩家具有竞争力或比其更好的玩家。


回答:

为您的评估函数找到一些候选者,例如移动性(可能移动的次数)减去对手的移动性,然后尝试找到每个指标的最佳权重。 遗传算法似乎非常适合优化评估函数中的权重。

创建一个具有随机权重的种群,让他们在有限的深度和回合中相互战斗,用获胜者的随机组合替换失败者,洗牌并重复,并在每一代之后打印出种群平均值。 让它运行直到您对结果满意,或者直到您看到需要调整某些指标的范围并重试,如果某个指标的最佳值可能超出您的初始范围。

后期编辑:一种更被接受、研究和理解的方法(我当时不知道)是所谓的“差分进化”。 后代由 3 个父母而不是 2 个父母创建,以避免过早收敛到平均值的问题。

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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