我可以使用这个健身功能吗?

Can I use this fitness function?

我正在做一个使用遗传算法的项目,我正在尝试制定适应度函数,我的问题是:

What is the effect of fitness formula choice on a GA

适应度函数在指导GA中起着非常重要的作用

良好的适应度函数将有助于 GA 有效且高效地探索搜索 space。另一方面,不良的适应度函数很容易使 GA 陷入局部最优解并失去发现能力。

不幸的是,每个问题都有自己的适应度函数。

对于分类任务,错误度量(欧氏、曼哈顿...)被广泛采用。您还可以使用基于熵的方法。

对于优化问题,您可以使用您正在研究的函数的粗略模型。

有大量关于适应度函数特征的文献(例如 {2}、{3}、{5})。

从实施的角度来看,必须考虑一些额外的机制:线性缩放、sigma 截断、功率缩放...(参见{1}、{2})。

适应度函数也可以是动态的:在进化过程中不断变化以帮助搜索 space 探索。

It is possible to make the fitness function equals directly the number of violation (in case of minimisation)?

是的,这是可能的,但你必须考虑到它可能是一个过于粗粒度的适应度函数。

如果适应度函数太粗糙 (*),它没有足够的表现力来指导搜索,遗传算法将更频繁地陷入局部最小值,并且可能永远不会收敛于解决方案。

理想情况下,一个好的适应度函数应该能够告诉你从给定点出发的最佳方向是什么:如果一个点的适应度很好,它的邻域的一个子集应该更好。

所以没有大的高原(一个宽阔的平坦区域,不提供搜索方向并引发随机游走)。

(*) 另一方面,完美平滑的适应度函数可能表明您使用了错误类型的算法。


一个天真的例子:你寻找参数abc使得

g(x) = a * x / (b + c * sqrt(x))

n 给定数据点 (x_i, y_i)

的良好近似值

你可以最小化这个适应度函数:

        | 0   if g(x_i) == y_i                 
E1_i =  |
        | 1   otherwise

f1(a, b, c) = sum (E1_i)
               i

它可以工作,但搜索不是有针对性的。更好的选择是:

E2_i = (y_i - g(x_i)) ^ 2

f1(a, b, c) = sum (E2_i)
               i

现在你有一个 "search direction" 和更大的成功概率。


更多详情:

  1. Genetic Algorithms: what fitness scaling is optimal? 作者:Vladik Kreinovich、Chris Quintana
  2. 搜索、优化和机器学习中的遗传算法,作者:Goldberg, D.(1989 年,Addison-Wesley)
  3. The Royal Road for Genetic Algorithms: Fitness Landscapes and GA Performance 作者:梅兰妮·米切尔、斯蒂芬妮·福雷斯特、约翰·H·霍兰德。
  4. Avoiding the pitfalls of noisy fitness functions with genetic algorithms 作者 Fiacc Larkin,Conor Ryan(ISBN:978-1-60558-325-9)
  5. Essentials of Metaheuristics 作者:肖恩·卢克