【问题标题】:Linear fitness scaling in Genetic Algorithm produces negative fitness values遗传算法中的线性适应度缩放产生负适应度值
【发布时间】:2023-03-16 05:49:01
【问题描述】:

我有一个带有适应度函数的 GA,它可以评估为负值或正值。为了这个问题,让我们假设函数

u = 5 - (x^2 + y^2)

在哪里

x in [-5.12 .. 5.12]
y in [-5.12 .. 5.12]

现在在 GA 的 selection phase 中,我使用的是 simple roulette wheel。由于能够使用simple roulette wheel,我的适应度函数必须对群体中的具体案例是积极的,我开始寻找扩展解决方案。最自然的似乎是linear fitness scaling。它应该非常简单,例如查看this implementation。但是,我即使在线性缩放之后也得到了负值

例如对于上述函数和这些适应度值:

-9.734897  -7.479017 -22.834280  -9.868979 -13.180669   4.898595

线性缩放后我得到这些值

-9.6766040 -11.1755111  -0.9727897  -9.5875139  -7.3870793 -19.3997490

相反,我想将它们缩放为正值,以便在下一阶段进行轮盘赌选择。

我在这里肯定做错了什么。我应该如何解决这个问题?

【问题讨论】:

  • u = 5 - (2*5.12^2) 的最小可能值。为什么不把这个添加到你的 u 中?
  • 据我了解,这样做会破坏种群内的适应度分布,并且会为下一代挑选不同/错误的染色体。来自我帖子中的链接:“我们希望在种群中的最大适应度个体与平均种群适应度之间保持一定的关系。”
  • 您是否完全使用了您链接到的页面中的代码?如果你仔细阅读,他们会说这段代码确实会产生负值,你仍然需要调整 f'_min 的偏移量。
  • 是的,我使用了我链接到的页面中的算法,但是将其翻译为 R。据我了解,在该算法中,else 子句(/* 如果 smin 在缩放时变为负数 */ ) 已经应该处理这个了,不是吗?
  • 好吧,“f'_min 的变化”就是我的建议。

标签: algorithm optimization genetic-algorithm


【解决方案1】:

主要错误是线性缩放的输入必须已经是正数(根据定义),而我获取的也是负值。

关于负值的讨论不是关于算法的输入,而是关于算法的输出(缩放值)。检查是处理这种情况,然后更正它,以免产生负缩放值。

  if(p->min > (p->scaleFactor * p->avg - p->max)/
     (p->scaleFactor - 1.0)) { /* if nonnegative smin */
    d = p->max - p->avg;
    p->scaleConstA = (p->scaleFactor - 1.0) * p->avg / d;
    p->scaleConstB = p->avg * (p->max - (p->scaleFactor * p->avg))/d;
  } else {  /* if smin becomes negative on scaling */
    d = p->avg - p->min;
    p->scaleConstA = p->avg/d;
    p->scaleConstB = -p->min * p->avg/d;
  }

在下图中,如果 f'min 为负数,则转到 else 子句并处理这种情况。

那么解决方案是对上述函数进行预缩放,因此它只给出正值。正如 Hyperboreus 建议的那样,这可以通过添加最小的可能值来完成

u = 5 - (2*5.12^2)

最好将我们试图最大化的真实适应度值与输入到selection phase GA 的缩放适应度值分开。

【讨论】:

    【解决方案2】:

    我同意前面的回答。线性缩放本身试图保持平均适应度值,因此如果函数为负,则需要进行偏移。有关详细信息,请参阅 Goldberg 的遗传算法一书 (1989),第 7 章,第 76-79 页。

    【讨论】:

      【解决方案3】:

      u = 5 - (2*5.12^2) 的最小可能值。为什么不直接把它加到你的身上呢?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-12
        • 1970-01-01
        • 2023-02-20
        • 2017-12-16
        • 2020-10-14
        • 2017-09-26
        • 2011-04-07
        • 2011-10-07
        相关资源
        最近更新 更多