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

Fitness Function altenatives in Genetic Algorithms for game AI

我使用 Alpha-Beta 修剪创建了一个 Gomoku(连续 5 个)AI。它在不那么愚蠢的水平上采取行动。首先,让我模糊地描述一下Alpha-Beta算法的分级功能。

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

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

但是,因为我使用遗传算法来创建评分函数的分数,所以我不确定应该如何实现遗传适应度函数。所以相反,我想到了以下几点:

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

1.Is 这是健身功能的可行替代品吗?

2.Because Alpha-Beta算法的特点,我需要给获胜条件的最大分数,在大多数情况下设置为无穷大。但是,因为我不能使用 Infinity,所以我只使用了一个大得离谱的数字。我是否还需要将此分数添加到染色体中?或者因为它微不足道并且不会改变分级函数的值,所以将其保留为常量?

3.When最初创建染色体,随机生成,遵循标准分布据说是最优的。然而,我的基因有很大的偏差。随机生成染色体还可以吗?

Is this a viable replacement to the Fitness function?

是的,是的。这是为棋盘游戏定义适应度函数的一种相当常见的方法。可能一轮是不够的(但你必须试验)。

一个细微的变体是这样的:

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.Because of the characteristics of the Alpha-Beta algorithm...

不确定这个问题。一个非常大的值是表示获胜条件的静态评估函数的标准方法。

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

3.When initially creating chromosomes, random generation, following standard distribution is said to be the most optimal. However, genes in my case have large deviation. Would it still be okay to generate chromosomes randomly?

这与您将要使用的特定遗传算法"flavor"有些关系。

标准遗传算法可以更好地使用非完全随机的初始值。

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

也看看这个问题/答案:Getting started with machine learning a zero sum game?