游戏AI中遗传算法的适应度函数替代方案

我使用Alpha-Beta剪枝创建了一个五子棋AI,它的移动水平不算愚蠢。首先,让我大致描述一下Alpha-Beta算法的评分函数。

当它接收到一个棋盘作为输入时,它首先会找出所有重复的棋子,并根据其作为威胁的有用性(由长度决定)给出4个可能值中的一个分数。然后,它会返回所有重复分数的总和。

但是,问题是我明确决定了这些分数(总共4个),它们似乎不是最佳选择。因此,我决定实现一个遗传算法来生成这些分数。每个基因将是4个分数之一。例如,硬编码分数的染色体将是:[5, 40000,10000000,50000]

然而,因为我使用遗传算法来创建评分函数的分数,我不确定应该如何实现遗传适应度函数。因此,我考虑了以下方法:

不使用适应度函数,而是将选择过程合并:如果我有两个染色体A和B,需要选择一个,我将使用A和B染色体在每个AI中模拟一场游戏,并选择获胜的染色体。

1.这是否可以替代适应度函数?

2.由于Alpha-Beta算法的特性,我需要为获胜条件赋予最大分数,在大多数情况下设置为无穷大。然而,因为我不能使用无穷大,我只是使用了一个非常大的数字。我也需要将这个分数添加到染色体中吗?还是因为它不重要且不会改变评分函数的值,就保持为常数?

3.在最初创建染色体时,随机生成,遵循标准分布被认为是最优的。然而,在我的情况下,基因有很大的偏差。这样生成染色体仍然可以吗?


回答:

这是否可以替代适应度函数?

是的,可以。这是一种相当常见的定义棋盘游戏适应度函数的方式。可能单轮比赛是不够的(但你需要进行实验)。

一个稍微不同的变体是这样的:

double fitness(Agent_k)  fit = 0  repeat M times    randomly extract an individual Agent_i (i <> k)    switch (result of Agent_k vs Agent_i)      case Agent_k wins:   fit = fit + 1      case Agent_i wins:   fit = fit - 2      case draw:           fit doesn't change  return fit

即一个代理与从种群中随机选择的M个对手(有放回但避免自我对抗)进行比赛。

增加M可以减少噪声,但需要更长的模拟时间(在一些与国际象棋相关的实验中使用M=5)。

2.由于Alpha-Beta算法的特性…

不太确定你的问题。对于静态评估函数来说,使用一个非常大的值来表示获胜条件是标准做法。

确切的值并不重要,可能不应该进行优化。

3.在最初创建染色体时,随机生成,遵循标准分布被认为是最优的。然而,在我的情况下,基因有很大的偏差。这样生成染色体仍然可以吗?

这在某种程度上与你将要使用的特定遗传算法“风格”有关。

标准遗传算法可能更适合使用非完全随机的初始值。

其他变体(例如差分进化)可能对这一方面不太敏感。

也请看一下这个问题/答案:如何开始学习零和游戏的机器学习?

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

发表回复

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