程序DNSGA-II
内容包括
其中
DNSGAII.m 为主函数程序,包括相关参数赋值,环境的循环,每个环境的进化操作,性能指标的计算,绘制真实的前沿和优化前沿的图像,在环境变化时进行响应,主要包括DNSGAII(直接利用上一时刻最优解),DNSGAII-AA(重新初始化部分个体),DNSGAII-BB(变异部分个体)。最后输出相关统计数据。
pop = round(pop); %种群大小
gen = round(gen); %进化次数
[nObj,xbounds,ybounds]= objective_description_function(name,nVar); %获取目标函数的目标个数,变量范围和指标参考点
M=nObj; %目标个数
evaluate_objective.m 包括FDA系列测试函数的定义
%% FDA系列
%% *********************** FDA1测试函数*****************
case{'FDA1'}
Gt = sin(0.5*pi*t);
g_xm=1+sum((x(2:nVar) - Gt).^2);
f1=x(1);
h=1-sqrt(f1./g_xm);
f2=g_xm*h;
f(1)=f1;
f(2)=f2;
genetic_operator.m 为进化操作,主要包括交叉和变异
HV.m和IGD.m为性能指标计算
initialize_variables.m为初始化种群
min = min_range;
max = max_range;
K = M + V;
%% 初始化种群
for i = 1 : N
for j = 1 : V
f(i,j) = (min(j) + (max(j) - min(j))*rand(1));
end
f(i,V + 1: K) = (evaluate_objective(name,f(i,:), M, V, t, g1, g2));
end
end
main.m为运行文件,包括参数赋值,环境设置,结果保存等
%% FDA1
clear;clc;
name='FDA1';
method = 'BB';
num_of_runs=1; %设置总的运行次数
tt=0:0.1:10; %时间变量的取值范围,为向量
g1=[2:15];g2=[];
group1=g1;group2=[1 g2];
pop=100;gen=5;
nVar=size(group1,2)+size(group2,2); %自变量维数
for runs = 1:num_of_runs %独立运行num_of_runs次
fprintf('总循环次数:%d\n',runs)
[metric_staticIP,archive_staticIP]=DNSGAII(name,tt,g1,g2,nVar,pop,gen,runs,method);
staticIP_metric(runs,1)=metric_staticIP;
staticIP_archive(runs,1).staticIP=archive_staticIP;
end
str = strcat(name,'_metric_staticIP','_',method,'.mat');
save(str,'staticIP_metric');
str=strcat(name,'_archive_staticIP','_',method,'.mat');
save(str,'staticIP_archive');
non_dominationsort_mod.m 为种群个体的非支配排序操作
objectivedescriptionfunction.m为定义相关测试函数目标个数,指标参考点,变量界限等
case {'FDA1'}
nObj=2;
xbounds(1:nVar,1) = [0;-1*ones(nVar-1,1)];
xbounds(1:nVar,2) = ones(nVar,1);
ybounds=[5,5];
plot_figure.m为绘制图像
predict_1.m为环境响应方式
ptrue.m为FDA系列真实前沿
case 'FDA1'
x=[0:0.001:1]';
f1=(x(:,1));
f2=(1-(f1.^0.5));
fit(:,1)=(f1);
fit(:,2)=(f2);