资源简介
1)本程序主要针对测试函数集ZDT1进行的NSGA-Ⅱ算法的编写;
2)本程序有详细的备注解释;
3)本文件里包含论文《非支配排序遗传算法(NSGA)的研究与应用》.pdf,用来指导学习NSGA-Ⅱ算法

代码片段和文件信息
function NSGAII()
clc;
% format compact;
tic;
% hold on
%--初始化 参数设定
generations=100; %迭代次数
popnum=100; %种群大小(偶数)
poplength=30; %个体长度
minvalue=repmat(zeros(1poplength)popnum1); %个体最小值---B = repmat(A m n) %将矩阵A复制m*n块,即B由m*n块A平铺而成
maxvalue=repmat(ones(1poplength)popnum1); %个体最大值
population=rand(popnumpoplength).*(maxvalue-minvalue)+minvalue; %产生新的初始种群
%--开始迭代进化
for gene=1:generations %开始迭代
%--交叉
newpopulation=zeros(popnumpoplength); %子代种群
for i=1:popnum/2 %交叉产生子代
k=randperm(popnum); %从种群中随机选择出两个父母,不采用二进制联赛方法
beta=(-1).^round(rand(1poplength)).*abs(randn(1poplength))*1.481; %采用正态分布交叉产生两个子代
newpopulation(i*2-1:)=(population(k(1):)+population(k(2):))/2+beta.*(population(k(1):)-population(k(2):))./2; %产生第一个子代
newpopulation(i*2:)=(population(k(1):)+population(k(2):))/2-beta.*(population(k(1):)-population(k(2):))./2; %产生第二个子代
end
%--变异
k=rand(size(newpopulation)); %随机选择要变异的基因位
miu=rand(size(newpopulation)); %采用多项式变异
temp=k<1/poplength & miu<0.5; %要变异的基因位
newpopulation(temp)=newpopulation(temp)+(maxvalue(temp)-minvalue(temp)).*((2.*miu(temp)+(1-2.*miu(temp)).*(1-(newpopulation(temp)-minvalue(temp))./(maxvalue(temp)-minvalue(temp))).^21).^(1/21)-1); %变异情况一
newpopulation(temp)=newpopulation(temp)+(maxvalue(temp)-minvalue(temp)).*(1-(2.*(1-miu(temp))+2.*(miu(temp)-0.5).*(1-(maxvalue(temp)-newpopulation(temp))./(maxvalue(temp)-minvalue(temp))).^21).^(1/21)); %变异情况二
%--越界处理/种群合并
newpopulation(newpopulation>maxvalue)=maxvalue(newpopulation>maxvalue); %子代越上界处理
newpopulation(newpopulation newpopulation=[population;newpopulation]; %合并父子种群
%--计算目标函数值
functionvalue=zeros(size(newpopulation1)2); %合并后种群的各目标函数值,这里问题是ZDT1
functionvalue(:1)=newpopulation(:1); %计算第一维目标函数值
g=1+9*sum(newpopulation(:2:poplength)2)./(poplength-1);
functionvalue(:2)=g.*(1-(newpopulation(:1)./g).^0.5); %计算第二维目标函数值
%--非支配排序
fnum=0; %当前分配的前沿面编号
cz=false(1size(functionvalue1)); %记录个体是否已被分配编号
frontvalue=zeros(size(cz)); %每个个体的前沿面编号
[functionvalue_sortednewsite]=sortrows(functionvalue); %对种群按第一维目标值大小进行排序 则第一行个体p即为种群中支配个体p的数量为零的个体,Np=0
while ~all(cz) %开始迭代判断每个个体的前沿面,采用改进的deductive sort
fnum=fnum+1;
d=cz;
for i=1:size(functionvalue1) %:(1)找到种群中所有n=0的个体,并保存在当前集合F1中;
if ~d(i)
for j=i+1:size(functionvalue1) %判断i对应的所有集合里面的支配和非支配的解,被i支配则为1,不被i支配则为0
if ~d(j)
k=1;
for m=2:size(functionvalue2) %判断是否支配,找到个体p不支配的个体,标记为k=0
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5838 2019-04-12 22:40 NSGA_Ⅱ\NSGAII.m
文件 310 2019-04-12 22:59 NSGA_Ⅱ\备注.txt
文件 1970580 2019-03-15 16:20 NSGA_Ⅱ\非支配排序遗传算法(NSGA)的研究与应用.pdf
- 上一篇:MATLAB2019A官方手册.pdf
- 下一篇:基于matlab的三维地球模型
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论