因为毕业设计涉及多目标优化算法,学习一下别人的算法并做个笔记(注:这笔记乱的估计只有我看的懂了吧————╭(╯^╰)╮)
代码来源 --> 多目标优化算法NSGA2–晓风wangchao
NSGA2(非支配排序遗传算法)
:用于解决多目标优化问题
多目标优化问题
:多个目标函数
1.参数的设置
测试函数 存放目标函数目标个数f_num,决策变量个数x_num,决策变量范围x_min,x_max: funfun.m
涉及的参数有
f_num 目标函数个数
fun 问题的名字
gen 进化代数
pc 交叉概率
pm 变异概率
pop 种群
x_max 决策变量的最大值
x_min 决策变量的最大值
x_num 决策变量的个数
yita1 模拟二进制交叉参数
yita2 多项式变异参数
ZDT6 函数公式----《多目标优化算法及其应用》
ZDT6—来源于platEMO
访问不了github可以在码云上搜得到
2.种群的初始化
生成一个300*12的数组chromo(种群大小300 决策变量10 目标2)
3.非支配排序
得到两个数组F1 和chromo_non
F1(每一行存放了这一个pareto等级的个体在chromo中的行号)
chromo_non 在chromo数组的基础上在最后一列(13列)加上了这个个体的pareto的等级
4.拥挤度的计算
箭头所指的列存放了各个个体的拥挤度
并且拥挤度函数对数组根据pareto等级进行了排序
5.循环开始(次数为gen 进化代数)
6.产生两个父代
chromo_parent_1
chromo_parent_2
chromo_parent
7.交叉与变异生成子代chromo_offspring
8.子代和父代的合并
9.再进行非支配排序和拥挤度计算 计算结果存放在combine_chromo2中
10.精英保留策略
%mod 求余 每过10代输出一次提示信息
就这样循环gen(进化代数)次
11.最后画图
与platEMO的图对比一下 (* ̄rǒ ̄)
所有m文件
主函数:nsga2.m
测试函数 存放目标函数目标个数f_num,决策变量个数x_num,决策变量范围x_min,x_max
:funfun.m
种群初始化函数:initialize.m
目标公式函数:object_fun.m
非支配排序函数:non_domination_sort.m
拥挤度计算和排序函数:crowding_distance_sort.m
锦标赛选择函数:tournament_selection.m
交叉变异函数:cross_mutation.m
精英保留函数:elitism.m
算法流程图来源多目标优化算法NSGA2–晓风wangchao
转载:https://blog.csdn.net/weixin_45024240/article/details/104503096