遗传算法中的锦标赛评估

Tournament evaluation in genetic algorithm

现在,每个遗传 C# 库(A.Forge、遗传算法框架、GeneticSharp)似乎只评估一个 Chromosome,然后使用各种选择方法中的一种来创建一个新的一代。

由于我的问题涉及两个 AI 相互对抗,因此单独评估它们的适应性有点困难。虽然游戏足够简单,可以创建一些表面障碍(AI 不直接交互,但障碍会发送给其他游戏),这会让我获得一些抽象的适应性,但这不会是 "real"成交

这些库似乎也没有提供我可以实现这种评估方法的另一个接口。是否有其他框架允许这样做,还是我需要从头开始?

每个遗传算法库都应该有一些方法供您定义适应度函数,这正是您要找的。 AForge.NET 公开了 IFitnessFunction interface. GeneticSharp exposes the IFitness 接口。是的,您必须自己编写适合度函数的代码——这是您的问题领域所特有的部分。您可以根据需要将其变得简单或复杂。

每条染色体通过适应度函数并分配一个分数后,系统会使用您喜欢的任何选择标准(锦标赛、轮盘赌等)来选择哪些染色体通过交叉进入下一代 and/or突变.

所以流程不是这样的:

  1. 匹配当前代的染色体
  2. 每对染色体玩一轮
  3. 胜利者创造下一代

遗传算法是这样工作的:

  1. 每条染色体进行一轮比赛并获得分数
  2. 选择算法使用该分数选出总体获胜者
  3. 胜利者创造下一代

从本质上讲,每条染色体都已经在与其他所有染色体竞争,只是比你我玩游戏抽象了一步。

您或许可以操纵适应度函数,将当前种群中的其他随机成员拉入作为对手。最好是用上一代最好的染色体作为整个这一代的对手

为您的染色体分配点数以在游戏中取得进一步进展,并为对手制造障碍奖励点数(如果这是与您游戏中的正常游戏玩法不同的独特动作)。 Return染色体的最终得分作为适应度函数输出。