【问题标题】:Tournament evaluation in genetic algorithm遗传算法中的比赛评估
【发布时间】:2015-11-10 01:56:31
【问题描述】:

目前,每个遗传 C# 库(A.Forge、Genetic Algorithm Framework、GeneticSharp)似乎只评估单个 Chromosome,然后使用各种选择方法之一来创建新一代。

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

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

【问题讨论】:

  • 当谈到 C# 中的 GA 时,我通常自己编写。无论如何,适应度评估始终是最难编写的部分。
  • 与其从头开始,不如分叉其中一个项目并帮助他们实现您需要的功能。
  • 您能展示一下到目前为止您使用GeneticSharp 尝试过的代码吗?

标签: c# genetic-algorithm geneticsharp


【解决方案1】:

每个遗传算法库都应该有一些方法可以让您定义适应度函数,这正是您正在寻找的。 AForge.NET 公开了IFitnessFunction 接口。 GeneticSharp 公开了IFitness 接口。是的,你必须自己编写适应度函数——这是你的问题领域独有的部分。您可以根据需要使其简单或复杂。

在每个染色体通过适应度函数并被分配一个分数后,系统会使用您喜欢的任何选择标准(比赛、轮盘赌等)来选择哪些染色体通过交叉和/或突变传递给下一代.

所以不是这样的流程:

  1. 匹配当前一代的染色体
  2. 每对染色体进行一轮
  3. 赢家创造下一代

遗传算法是这样工作的:

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

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

您可能可以操纵适应度函数来随机拉入当前人口中的其他成员作为对手。最好是用上一代最好的染色体作为整个当代的对手。

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

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 2014-05-04
    • 2010-11-12
    • 2016-02-02
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2014-07-24
    • 2012-09-21
    相关资源
    最近更新 更多