目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

首先将一群具有多个目标的个体(解集,或者说线代里的向量形式)作为父代初始种群,在每一次迭代中,GA操作后合并父代于自带。通过非支配排序,我们将所有个体分不到不同的pareto最优前沿层次。然后根据不同层次的顺序从pareto最优前沿选择个体作为下一个种群。出于遗传算法中的“物种多样性”保护,还计算量“拥挤距离”。拥挤距离比较将算法各阶段的选择过程引向一致的前沿。

与单目标(遗传算法)最大的不同就是进行选择操作之前进行快速非支配排序,这一步也是为了选择操作而来的,选择哪些、怎么选是通过非快速支配排序来的。这就不像单目标,挑好的选就行了。
       支配: 在多目标优化问题中,如果个体p至少有一个目标比个体q好,而且个体p中的所有目标都不比个体q差,那么称个体p支配个体q。

序值: 如果p支配q,那么p的序值比q低。如果p和q互不支配,那么p和q有相同的序值。

拥挤距离:用来计算某前端中的某个体与该前端中其他个体之间的距离,用以表征个体间的拥挤程度。希望pareto解出来之后,点与点之间距离是相近的,不要太多的聚集在某个地方。用某个点与前后两个点之间的xy的距离和表示。算法会选择拥挤距离大的去领头。

快速非支配排序:快速非支配排序就是将解集分解为不同次序的Pareto前沿的过程。将一组解分成n个集合:rank1,rank2…rankn,每个集合中所有的解都互不支配,但ranki中的任意解支配rankj中的任意解(i<j).

综上所述,NSGAII的步骤如下所示:

步骤1:编码。遗传算法在进行搜索之前,将变量编成一个定长的编码——用二进制字符串来表示,这些字符串的不同组合,
便构成了搜索空间不同的搜索点。
步骤2:产生初始群体。随机产生N个字符串,每个字符串代表一个个体。
步骤3:按目标函数的个数分割子群体,对每个子群体进行如下操作:
1)计算目标函数值(此步调用ANSYs有限元程序,将ANSYS有限元程序得到的后处理结果传给MATLAB程序作为目标函数值);
2)计算每个个体的适应度,本文中采用线性排序法和选择压差为2估算适应度;
3)用随机遍历抽样方法在每个子种群中选择个体。
步骤4:将每个子种群中选择出的个体进行合并。
步骤5:交叉操作。本文中采用的是单点交叉操作。
步骤6:变异。对个体按给定的概率进行变异,形成新一代群体。
步骤7:将步骤6产生的个体合重复进行步骤3~ 步骤6的操作,直至完成规定的遗传迭代总次数。

2.仿真效果预览

matlab2022a仿真结果如下:

3.MATLAB核心程序


%% Description
%pop_size 染色体的数目
%gen_max  最大遗传代数
%gen_count 目前的迭代数
%M 目标函数的数量
%no_runs 运行次数
%xl,xu为设计变量的下限和上限
%最终的Pareto解在变量’parto_rank1’中,设计变量在coumns(1:V),目标函数在(V+1,V+M)
%约束在(V+M+1),排序在(V+M+2),拥挤距离在(V+M+3)中%% code starts
M=2;
p=2;
pop_size=200;           % Population size
no_runs=1;              % Number of runs
gen_max=500;            % MAx number of generations - stopping criteria
fname='test_case';      % Objective function and constraint evaluationif p==13,  % OSYpop_size=100; no_runs=10;
end;
if (p==2 | p==5 | p==7), gen_max=1000; end;if p<=9     % Unconstrained test functions
tV=[2;30;3;1;30;4;30;10;10];
V=tV(p);
txl=[-5*ones(1,V);zeros(1,V);-5*ones(1,V);-1000*ones(1,V);zeros(1,V);-1/sqrt(V)*ones(1,V);zeros(1,V); 0 -5*ones(1,V-1);zeros(1,V)];
txu=[10*ones(1,V); ones(1,V);5*ones(1,V);1000*ones(1,V);ones(1,V);1/sqrt(V) *ones(1,V);ones(1,V);1 5*ones(1,V-1);ones(1,V)];
xl=(txl(p,1:V));            % lower bound vector
xu=(txu(p,1:V));            % upper bound vectorfor
etac = 20;                  % distribution index for crossover
etam = 20;                  % distribution index for mutation / mutation constant
else         % Constrained test functions
p1=p-9;
tV=[2;2;2;6;2];
V=tV(p1);
txl=[0 0 0 0 0 0;-20 -20 0 0 0 0;0 0 0 0 0 0;0 0 1 0 1 0;0.1 0 0 0 0 0];
txu=[5 3 0 0 0 0;20 20 0 0 0 0;pi pi 0 0 0 0;10 10 5 6 5 10;1 5 0 0 0 0];
xl=(txl(p1,1:V));           % lower bound vector
xu=(txu(p1,1:V));           % upper bound vectorfor i=1:NN
etac = 20;                  % distribution index for crossover
etam = 100;                 % distribution index for mutation / mutation constant
end
pm=1/V;                     % Mutation ProbabilityQ=[];
for run = 1:no_runs%% Initial population
xl_temp=repmat(xl, pop_size,1);
xu_temp=repmat(xu, pop_size,1);
x = xl_temp+((xu_temp-xl_temp).*rand(pop_size,V));
%% Evaluate objective function
for i =1:pop_size
[ff(i,:) err(i,:)] =feval(fname, x(i,:));           % Objective function evaulation
end
error_norm=normalisation(err);                      % Normalisation of the constraint violation
population_init=[x ff error_norm];
[population front]=NDS_CD_cons(population_init);    % Non domination Sorting on initial population%% Generation Starts
for gen_count=1:gen_max
% selection (Parent Pt of 'N' pop size)
parent_selected=tour_selection(population);                     % 10 Tournament selection
%% Reproduction (Offspring Qt of 'N' pop size)
child_offspring  = genetic_operator(parent_selected(:,1:V));    % SBX crossover and polynomial mutationfor ii = 1:pop_size
[fff(ii,:) err(ii,:)]=feval(fname, child_offspring(ii,:));      % objective function evaluation for offspring
enderror_norm=normalisation(err);
child_offspring=[child_offspring fff error_norm];%% INtermediate population (Rt= Pt U Qt of 2N size)
population_inter=[population(:,1:V+M+1) ; child_offspring(:,1:V+M+1)];
[population_inter_sorted front]=NDS_CD_cons(population_inter);              % Non domination Sorting on offspring
%% Replacement - N
new_pop=replacement(population_inter_sorted, front);
population=new_pop;
end
new_pop=sortrows(new_pop,V+1);
paretoset(run).trial=new_pop(:,1:V+M+1);
Q = [Q; paretoset(run).trial];                      % Combining Pareto solutions obtained in each run
end%% Result and Pareto plot
if run==1
plot(new_pop(:,V+1),new_pop(:,V+2),'*')
else
[pareto_filter front]=NDS_CD_cons(Q);               % Applying non domination sorting on the combined Pareto solution set
rank1_index=find(pareto_filter(:,V+M+2)==1);        % Filtering the best solutions of rank 1 Pareto
pareto_rank1=pareto_filter(rank1_index,1:V+M)
plot(pareto_rank1(:,V+1),pareto_rank1(:,V+2),'*')   % Final Pareto plot
A127

4.完整MATLAB

V

NSGA2多目标优化算法的MATLAB仿真相关推荐

  1. 【NSGAII】基于NSGAII的多目标优化算法的MATLAB仿真

    1.软件版本 matlab2021a 2.本算法理论知识 NSGA-II适合应用于复杂的.多目标优化问题.是K-Deb教授于2002在论文:A Fast and Elitist Multiobject ...

  2. 基于NSGAII的多目标优化算法的MATLAB仿真

    1.算法简介 NSGA-II在引入算术交叉算子的同时,提出并引入累积排序适应度赋值策略.实验表明,INSGA具有更高的收敛速度和更好的种群多样性. 2.部分核心代码 clc; clear; close ...

  3. 基于NSGAII的多目标遗传优化算法的matlab仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 在遗传算法在解决多目标优化遇到瓶颈时,许多学者花费了不少时间和精力在多目标优化的遗传算法上,Goldberg首先将Pareto ...

  4. 基于免疫算法的认知无线电资源分配优化算法的matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 认知无线电(CR)的概念来自Joseph Mitolo博士1999年的开创性工作.它自适应地调整内部 ...

  5. 基于VAGWO速度辅助灰狼优化算法的matlab仿真

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 .......... ...

  6. 基于PSO的运输优化算法的MATLAB仿真

    假设有一个收集轨道,上面有5个采集堆,这5个采集堆分别被看作一个4*20的矩阵(下面只有4*10),每个模块(比如:A31和A32的元素含量不同),为了达到采集物品数量和元素含量的要求(比如:需采集5 ...

  7. python多目标优化_多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码...

    前言:最近太忙,这个系列已经很久没有更新了,本次就更新一个Deb大神的NSGA2的"升级版"算法NSGA3.因为multi-objective optimization已经被做烂了 ...

  8. 多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码

    前言:最近太忙,这个系列已经很久没有更新了,本次就更新一个Deb大神的NSGA2的"升级版"算法NSGA3.因为multi-objective optimization已经被做烂了 ...

  9. MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)

    前言 NSGA-Ⅱ是最流行的多目标遗传算法之一,它降低了非劣排序遗传算法的复杂性,具有运行速度快,解集的收敛性好的优点,成为其他多目标优化算法性能的基准. NSGA-Ⅱ算法是 Srinivas 和 D ...

最新文章

  1. Mysqli的批量CRUD数据
  2. 开源 java CMS - FreeCMS2.8 数据对象 applyopen
  3. C++ 中的左值(Lvalues)和右值(Rvalues)
  4. java 矩阵求逆_java实现的顺时针/逆时针打印矩阵操作示例
  5. 三维CNN:收集一些最近的3d卷积网络PointNet++
  6. oracle dba 手动创建数据实例
  7. JavaFX自定义控件– Nest Thermostat第2部分
  8. Java拦截器和过滤器
  9. 遥感植被指数128个
  10. [WIFI]破解工具-BT4+unetbootin+spoonwep/wpa
  11. 仿豌豆荚实现android连接pc方法
  12. 微型计算机nuc 6i5syk,Intel Skylake NUC迷你机性能实测:15W的神器
  13. 淘宝/天猫API接口,买家卖家订单信息获取
  14. 2019年东南大学蒙纳士553C++编程题
  15. 电子学会青少年软件编程 Python编程等级考试一级真题解析(选择题)2022年3月
  16. matlab中h无穷状态反馈控制,求教 :用LMI方法求倒立摆H无穷状态反馈控制器程序...
  17. OpenCV实现PS2018中的SmartBlur美颜算法
  18. Hype教程:设置字体样式
  19. kafka Java客户端之 consumer API 消费消息
  20. 留学生怎么找IT名企实习拿毕业offer?

热门文章

  1. 认真的雪歌词的c语言编码,认真的雪(C调演奏版,薛之谦)钢琴谱简谱数字谱双手简谱.pdf...
  2. 【CentOS7(Linux)保姆级详细安装过程】
  3. linux系统LVM磁盘扩容
  4. 港科夜闻|央视网专访香港科大(广州)(筹)校长倪明选教授,谈香港科技大学在科研及知识转移方面成就...
  5. VSCode智能补全代码片段技巧
  6. vscode自动补全
  7. Python中的惊喜彩蛋
  8. 怎么有趣的介绍计算机,有趣的电脑自我描述
  9. winform中自定义控件里面的控件随着自定义控件的改变而改变
  10. 亚马逊运营遭遇guanggao暂停后表现更差时该如何应对?