游戏AI遗传算法中的适应度函数

时间:2017-11-28 15:20:44

标签: artificial-intelligence genetic-algorithm minimax game-ai

我使用Alpha-Beta Pruning创建了一个Gomoku(连续5个)AI。它使得动作不是那么愚蠢。首先,让我模糊地描述Alpha-Beta算法的分级功能。

当它收到一块板作为输入时,它首先找到所有重复的石头并根据其作为威胁的有用性给出4个可能值的分数,这取决于长度。它将返回所有重复分数的总和。

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

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

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

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

2.由于Alpha-Beta算法的特性,我需要给胜利条件赋予最大分数,在大多数情况下将其设置为无穷大。但是,因为我不能使用Infinity,所以我只使用了一个荒谬的大数字。我是否还需要将这个分数添加到染色体上?或者因为它无关紧要并且不会改变评分函数的值,所以将其保留为常数?

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

1 个答案:

答案 0 :(得分: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.当最初创建染色体时,随机生成,遵循标准分布被认为是最优的。然而,在我的情况下,基因有很大的偏差。是否可以随机生成染色体?

这与特定的遗传算法有关[&34;味道&#34;你打算用。

标准遗传算法可以更好地工作,而不是完全随机的初始值。

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

还要看一下这个问题/答案:Getting started with machine learning a zero sum game?