我正在阅读关于这个website的非常一般的遗传算法的例子,我有一些问题。
如何处理负面健身值?如果某些染色体具有负面适应性,我不确定轮盘选择是如何工作的。我是否将所有健身值标准化?规模吗?是否存在处理负面适应性的一般方程式?
将最小化问题转换为最大化问题的适应度函数为F(x) = 1 / (1 + f(x))
。我在某地读到1是为了防止F(x)进入无穷大。但是如果f(x)变成-1呢?那么,我如何防止f(x)变为负面?
如果其中一条染色体产生不可行的解决方案,会发生什么?举个简单的例子,max(f(x) = x) where f(x) < 10
。
如果其中一条染色体有11的溶液怎么办?我拒绝它,选择第二个最大值并结束迭代吗?或者我拒绝它并使用剩余的染色体并继续复制?
这些都是非常非常普遍的问题,因为我刚开始研究遗传算法。我希望有人能帮助我,或者给我一个处理上述所有3种情况的简单例子。
答案 0 :(得分:1)
所以,一次一个:
如果您使用轮盘赌(或类似的比例)选择策略,则负面适应性只是 的问题。如果你真的想要使用这样的策略,那么你需要以某种方式获得积极的健身价值。并且有几种可能性。
如果您知道原始适应度值的范围,例如从-10到+2(我只是凭空画出来),您可以将此范围缩放到另一个范围内正。
如果您的范围不受限制,例如从-infinity到+ infinity,或者你真的不知道范围,那么你不能只是缩放,因为结果可能是负面的。但是,您可以使用与线性缩放不同的单调变换。例如,双曲正切将这样的范围映射到范围-1到+1。然而,这种转变的缺点是原始适应度从零开始,更低的分辨率&#34;这种转变(当然,它将无限范围映射到有限范围内)。
第三,也是我认为最优雅的解决方案是使用排名来改变健身 - 你根据他们从最差到最好的原始健康状况对人群进行排序,他们的新健身状况只是在这个顺序,即最差的个体将具有1的变换适合度,第二个到最差的个体将具有2个等等。然后,您具有具有相同&#34;分辨率的正适应值&#34;无论个人到底在哪里。然而,它也可能是一个缺点,因为你将原始的适应值抛出窗口,所以如果有一个人与其他人相比具有非常大的原始适应值,在排名之后它将只有1个以上第二个是最好的个人。
最后但并非最不重要的&#34;解决方法&#34;不是使用轮盘赌选择策略而是使用不同的策略,例如锦标赛选择你不需要健身价值但只能比较两个人并说出哪一个更好。它与我上面描述的排名非常相似。
您描述的转变是一种可能的转变。基本上任何递减函数都可以作为这样的转换,因此选择一个可以提供所需属性的函数。这些可能是转换的范围(例如,您可能需要正值),函数的域(例如,您不想除以零)等等......
此外,如果您使用锦标赛选择,您根本不需要修改适合度值,只需翻转比较运算符(或者您不要翻转它,只需将原始适应度乘以 - 1)。
进化计算中的约束满足是其自身的一个主题。但是,有三种主要方法:
惩罚不良解决方案 - 如果某个解决方案违反约束条件,则会对其进行处罚。最简单的情况是&#34;死刑&#34;,即这种解决方案接收到最差的适应性,因此从未选择它(即它被杀死)。如果您可以衡量违反约束的数量,您可以将惩罚与此成比例。然而,主要的缺点是,尤其是在死刑的情况下,违反某些约束的解决方案实际上可能包含良好的构建块,但由于他们不幸违反约束条件而被杀死。但实施起来通常很简单。
安全编码/更正操作符
一个。 安全编码 - 使用解决方案的此类编码,以便在对其进行解码以进行评估时,您始终可以获得可行的解决方案。排列问题有一个很好的例子:你需要解决方案来表示元素的排列,即每个元素必须只存在一次。而不是将元素直接用于进化,而是在[0,1]范围内进化一系列十进制数。解码解决方案时,您可以从原始顺序对数字及其索引进行排序,然后表示排列。示例 - [0.33, 0.12, 0.77, 0.69]
将被翻译为[1, 0, 3, 2]
。
但是,设计此类编码通常非常困难,并且完全取决于域。
湾更正操作符 - 如果某个解决方案违反约束条件,请对其进行修改,使其不受约束。在您的情况下,如果您在允许的最大值为10时有11的解决方案,只需修改它以使其为10,如果您的编码允许的话。
通常很好地尽可能少地修改解决方案,以便保留其构建块。可能会发生没有(简单)方法来设计校正算子 - 荒谬,夸大的例子:你进化出一个大的神经网络,你希望输出函数有2个局部最优;你将如何修改权重以使它们具有权重?这不是简单的可能。
多目标优化 - 您可以从约束中创建新目标。而不是通过目标函数驱动演化,而是通过目标函数和同时遵守约束的程度来驱动它。这可能超出了您的范围,因此我会将您引导至其他来源。您想要寻找多目标进化算法。一种非常受欢迎的算法是NSGA-II。
正如@IkechiMichael所说,进化算法并不准确。最后,它完全取决于您的应用程序什么有效。如果你有足够的时间,只要尝试一下你的想法,你就会看到。
答案 1 :(得分:0)
对于您的第一个和第二个问题,您可以完全控制您的适合度如何表示。如果Normalization适合你,那很酷!如果你可以扩展到0到1之间,这可以解决你的问题,太棒了!!用于查找适合度值的等式通常以适合值在0到1范围内的方式建模。但这不是强制性的。很多NP问题的上限和下限尚未确定,因此难以用这种方式表示它们的适应值。
有多种方法可以处理染色体,从而产生不可行的解决方案。可以忽略解决方案,或者在获得可行解决方案之前重复生成它的操作,或者甚至可以使用不可行解决方案以希望在比以前探索的更有利的区域中重新进入解空间。
进化算法提供了一般规则。你如何实现它们完全取决于你。