1.算法简介

          NSGA-II在引入算术交叉算子的同时,提出并引入累积排序适应度赋值策略。实验表明,INSGA具有更高的收敛速度和更好的种群多样性。

2.部分核心代码

clc;
clear;
close all;
warning off;
addpath 'func\'

%% parametres setting

nvar=3; % number of variable
lb=[-4 -4 -4]; % lower bound
ub=[4 4 4]; % upper bound

npop=40; % number of population


pc=0.7; % percent of crossover
ncross=2*round(npop*pc/2); % number of crossover offspring

pm=0.3; % percent of mutation
nmut=round(npop*pm); % number of mutation offspring


maxiter=150;


%% initialization

empty.pos=[];
empty.cost=[];
empty.dcount=[]; % dominate count
empty.dset=[]; % dominate set
empty.rank=[];
empty.cdis=[]; % crowding distance


pop=repmat(empty,npop,1);

for i=1:npop
pop(i).pos=lb+rand(1,nvar).*(ub-lb);
pop(i).cost=fitness(pop(i).pos);
end

[pop F]=non_dominated_sorting(pop);
pop=calculated_crowding_distance(pop,F);
pop=sorting(pop);

%% main loop

for iter=1:maxiter

% crossover
crosspop=repmat(empty,ncross,1);
crosspop=crossover(crosspop,pop,ncross,F,nvar);

% mutation
mutpop=repmat(empty,nmut,1);
mutpop=mutation(mutpop,pop,nmut,lb,ub,nvar);

[pop]=[pop;crosspop;mutpop];

[pop F]=non_dominated_sorting(pop);
pop=calculated_crowding_distance(pop,F);
pop=sorting(pop);

pop=pop(1:npop);

[pop F]=non_dominated_sorting(pop);
pop=calculated_crowding_distance(pop,F);
pop=sorting(pop);


C=[pop.cost]';

figure(1)
plotpareto(F,C)



disp([ ' iter = ' num2str(iter) ' BEST F1 = ' num2str(min(C(:,1))) ' BEST F2 = ' num2str(min(C(:,2))) ' NF1 = ' num2str(length(F{1})) ])





end

%% results

pareto=pop(F{1},:);



3.仿真演示

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

 

4.相关参考文献

[1]刘旭红, 刘玉树, 张国英,等. 多目标优化算法NSGA-II的改进[J]. 计算机工程与应用, 2005, 41(15):3.

C82