1

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

当它接收到一个棋盘作为输入时,它首先找到所有重复的棋子,并根据其作为威胁的有用性,从 4 个可能的值中给它打分,这取决于长度。它将返回所有重复分数的总和。

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

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

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

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

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

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

4

1 回答 1

1

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

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

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

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.当最初创建染色体时,随机生成,遵循标准分布据说是最优化的。然而,就我而言,基因有很大的偏差。随机生成染色体还可以吗?

这与您将要使用的特定遗传算法“风味”有些相关。

标准遗传算法在初始值不完全随机的情况下可以更好地工作。

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

还请看一下这个问题/答案:开始使用机器学习零和游戏?

于 2017-11-30T09:47:46.960 回答