遗传算法 目标函数,遗传算法python实现
在进行多目标优化时,经常会面临多个目标函数不能同时优化的情况。为了解决这一矛盾,引入了帕累托最优的概念。
参数化
通常,多目标优化的常见形式有:
经过治疗,它可以采取以下形式。
在…之中
f1(x),f1(x),f1(x)).
是目标函数,都是最小值的形式。
引入了以下两个目标函数:
有的目标函数是维度空间,两个目标函数是时间(f1) x)、成本(F2) x),
您可以绘制图像:
然后,介绍了一些概念。
非支配解:对于S1和S2的任何两个解,如果S1优于S2,那么S1支配S2。如果S1的解不为其他解所支配,则称S1解为非支配解(non-dominated solution),也称为帕累托解。
解决方案:当解决方案S2的所有目标都比S1差,S1比S2好,S1统治S2。
S2是主要的解决方案。
因此,当前的首要任务是找到解空间中的所有帕累托解。找到所有的帕累托解后,这些解形成的平面称为非支配前沿。当函数较多时,前面通常是超曲面。
非支配排序(非支配排序)。
1.设所有解的集合为S,找出非劣解集,设为F1。
设S=S-F1,从S中找出非劣解集,记为F2。
3.重复步骤2,直到S变成空集。
将每次找到的非劣解排序如下。
{F1,F2,…,Fn}
通过绘制并连接Fi集中的对应点的一半,形成N个pareto曲面,它们是非定义域的顶1和非定义域的顶2…
以上表中的数据为例,F1={A,B,D,F},F2={C,E,D},F3={H,I}
绘制适当的图形:
第一个前脸的解适应度最大,序数越大适应度越小。阶值小的边界上的解可以支配阶值大的边界上的解。
相同正面上解的排序——拥挤距离))))))))))。
关于第一个前脸,有A、B、D、f四种方案,如何评价这四种方案的适合度?因此,引入了拥塞的概念。
拥塞计算:
1.只考虑同一前端面上的解,设位于前端面两端的边界点的拥挤度为。
2.至于不在两端的点,拥挤程度主要与其相邻两点有关。
拥堵越小,越重要。
一般理解:拥挤度越小,解与其他解的相似性越小,留下一个小的拥挤点,相当于保存了理解的多样性。
因此,为了确定解的适应度的顺序,首先确定解位于哪个边界上,如果位于同一边界上,则计算拥挤度来做出判断。
结合遗传算法
使用与普通遗传算法相同的步骤,随机选择几个解进行初始化、编码、交叉交换和变异。
生成子项
但后代生成后,需要与父代混合,选择适应度高的解进行新的迭代。
示例:
1.对于一个双目标优化问题,初始化后随机取出10个解作为F,计算出的后代作为p。
此时,p和f混合形成新的解集S.
2.对于S,对上述非支配解进行排序,计算拥挤度,最后找出这12个解的适应度的顺序,从中选出10个适应度大的点,生成新的后代(保持与父代相同的数目),带入算法进行新的迭代。
把孩子和父母混在一起,筛选出来创造新的孩子,这叫精英策略。
启发式算法包括两个方面:加速收敛操作和在收敛过程中保持解的多样性。这两种操作相互作用,找到合适的收敛速度,缩短计算时间,避免陷入局部最优。
对NSGA来说,规则遵循这两条准则。
1.该算法不仅取最佳前端面,而且考虑所有前端面,以体现解的多样性,防止陷入局部最优。
2.计算拥挤度,保留相似度低的解,保持解空间的多样性。
3.精英策略用于加速收敛和更快地消除老化。
作家(author的简写)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。