资源简介
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的三维地球模型
- MATLAB2019A官方手册.pdf
- 自动驾驶matlab
- 利用MATLAB画简单的路线图
- 核密度估计matlab程序
- 全面详解LTE:MATLAB建模、仿真与实现
- MATLAB编程(第二版)-菜鸟入门教材
- 基于MATLAB实现图片透视效果矫正
- 机械振动系统的matlab模拟程序
- 7站定位,基于matlab声源定位
- 基于matlab的cdma通信系统的仿真
- 遗传算法 -- matlab ga工具箱
- QFT-Matlab设计工具箱
- 卫星位置计算器实验材料.zip
- matlab mean shift EDISON Wrapper 图像分割
- MATLAB小波变换图像处理总结
- 基于MATLAB的JPEG的编码和解码
- matlab 2014a中文帮助文档pdf
- MATLAB车辆工程应用实战程序
- matlab基于颜色的车牌识别程序
- MATLAB神经网络30个案例分析源代码.r
- 基于MATLAB的人脸五官识别184027
- 基于matlab的数字图像处理实验设计完
- 基于神经网络的人脸识别代码
- A*路径规划算法
- 基于MATLAB GUI的PCA人脸识别门禁系统
- matlab实现的sift的图像拼接
- field ii 教程
- 能量检测、匹配滤波器检测、合作式
- matlab音乐混响器app
评论
共有 条评论