我已经创建了一个Gomoku(连续5) AI使用阿尔法-贝塔剪枝。它在一个不那么愚蠢的层面上做出了一些举动。首先,让我模糊地描述α-Beta算法的分级函数.
当它收到一个板作为输入,它首先发现所有重复的石头,并给它一个分数的4个可能的值取决于它的有用性作为一个威胁,这是由长度决定的。它将返回所有重复分数的总和。
但是,问题是我明确地决定了分数(总共4分),而且他们似乎不是最好的选择。所以我决定用遗传算法来生成这些分数。每一个基因都将是4个分数中的一个。例如,硬编码分数的染色体是: 5,400,10,000,50000。
然而,由于我使用遗传算法来创建评分函数的分数,我不知道该如何实现遗传适应度函数。因此,我想到了以下几点:
而不是使用适应度函数,我只是将选择过程合并在一起,如果我有2条染色体,A和B,并且需要选择一条,我将模拟一个游戏,在每个AI中同时使用A和B染色体,然后选择获胜的染色体。
1.这是否是替代健身功能的可行办法?
2.由于Alpha-Beta算法的特点,我需要给出获胜条件的最大得分,在大多数情况下,该条件被设置为无穷大。然而,由于我不能使用无限,我只是使用了一个荒谬的大数字。我还需要把这个分数加到染色体上吗?或者因为它是微不足道的,不改变评分函数的值,把它作为一个常量?
3.在最初创建染色体时,随机产生、遵循标准分布被认为是最优的。然而,在我的例子中,基因有很大的偏差。随机产生染色体还可以吗?
发布于 2017-11-30 09:47:46
这是一个可行的替代健身功能吗?
是的,是这样的。这是一个相当常见的方式来定义一个健身功能的棋盘游戏。也许一轮是不够的(但你必须做实验)。
一个微小的变体类似于:
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.在最初创建染色体时,随机产生、遵循标准分布被认为是最优的。然而,在我的例子中,基因有很大的偏差。随机产生染色体还可以吗?
这在某种程度上与您将要使用的特定遗传算法“味道”有关。
一个标准的遗传算法可以更好地工作在不完全随机初始值的情况下。
其他变体(如差异进化)对这方面可能不那么敏感。
还请看一下这个问题/答案:Getting started with machine learning a zero sum game?
https://stackoverflow.com/questions/47535008
复制相似问题