如何使用遗传算法为 alpha-beta 剪枝生成评估函数的分数?

人工智能 游戏-ai 遗传算法 极小极大 α-β-修剪 适应功能
2021-11-07 14:07:33

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

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

但是,问题是我明确决定了分数(总共 4 个),它们似乎不是最好的选择。

所以,我决定实现一个遗传算法来生成这些分数。每个基因将是 4 个分数之一。因此,例如,硬编码分数的染色体将是[5,40000,10000000,50000].

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

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

  1. 这是对适应度函数的可行替代吗?

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

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

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

当然,胜者的适应度为 1,失败者的适应度为 0。您正在使用某种锦标赛选择。

最好使用更多的染色体,让 A 与 B、C、D... 对战,并将适应度定义为获胜次数。或者不是,因为这样的评估更精确但也更耗时。

  1. ... Infinity ... 我还需要将此分数添加到染色体上吗?

你为什么要?确切的值并不重要(因为它只需要足够大),所以那里没有什么可以发展的。你也不代表玩家的数量,对吧?只需使用常识。

  1. ... 随机生成染色体还可以吗?

我猜是这样,但是提供更接近预期结果的值的分布应该更好。这取决于你如何改变它们(添加一个小的随机值不会让你走得太远,乘以1 + small_random_value会)。

或者,您可以从某个固定间隔生成值并按比例放大它们。

恕我直言,您的价值观太大了。无论您的 5 和 40000 是什么意思,我想,5 和 400 的工作方式相同。