【问题标题】:Fitness function健身功能
【发布时间】:2019-03-01 20:38:25
【问题描述】:

在 Google 上搜索遗传算法时,我遇到了 OneMax 问题,我的搜索表明这是应用遗传算法的第一个问题。但是,我不确定 OneMax 问题是什么。谁能解释一下。

感谢任何帮助

【问题讨论】:

    标签: java algorithm genetic-algorithm


    【解决方案1】:

    One-Max 问题的目标是创建一个长度为n 的二进制字符串,其中每个基因都包含一个 1。适应度函数非常简单,您只需遍历二进制字符串,计算所有的值。这就是您在帖子中提供的公式中的总和。它只是二进制字符串中的个数。您还可以将适应度表示为百分比,方法是将个数除以 n * 0.01。更高的适应度将具有更高的百分比。最终,你会得到一串n 在某一代的适应度为 100% 的字符串。

    double fitness(List<int> chromosome) {
      int ones = chromosome.stream().filter(g -> g == 1).count();
      return ones / chromosome.size() * 0.01;
    }
    

    【讨论】:

    • 我建议使用 Java 8 流会更清楚:int ones = chromosome.stream().filter(g -&gt; g == 1).count();
    • 感谢您的提示,我不是 Java 开发人员,所以我不知道组合子的确切措辞。我确实编辑了 sn-p。
    • @kreide 您好,感谢您的详细解释。我有一个问题,染色体代表什么?例如,它是否包含随机数?
    • 这里染色体的每个基因都不包含0或1。有n基因。最初,每个基因都是随机生成的,即。 e.一个基因有 50/50 的机会被创建为 0 或 1。在初始阶段之后,您应用遗传算子,例如交叉和突变,以创建具有更高适应度的新染色体。这样,您将获得越来越多的包含大量染色体的染色体。最终,如果创建了 100% 的染色体,或者在达到某一代之后,您将停止 GA。
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2012-09-24
    • 2022-11-09
    • 2023-03-10
    相关资源
    最近更新 更多