1 简介
仅有一个目标函数的最优化问题称为单目标优化问题,目标函数超过一个的最优化问题称为多目标优化问题(Multi-objective Optimization Problems,MOP)。 在解决科学与工程问题时,一般需要考虑多个目标函数,而这几个目标函数通常是相互冲突和相互影响的,一个子目标的改善可能会引起另一个子目标性能的降低,通常不存在唯一的使所有目标函数同时达到最优值的绝对最优解, 而是存在多个相互之间无法比较优劣的 Pareto最优解。 这些解所构成的集合称为 Pareto 最优解集,其对应的目标向量组成的曲线(或曲面)称为 Pareto 前端。多目标旅行商问题是经典 TSP 扩展和延伸,属于典型的多目标组合优化问题。 一般叙述为: 有一旅行商从第一个城市出发,欲遍历其余城市至少一次,最后再回到第一个城市,其中各城市之间距离和花费是已知的,试求解合适的行走路线,使其满足总路程最短、时间最少、费用最省、风险最小等多个目标函数。工程决策中的大量问题可归结为多目标 TSP 问题, 如 生 产 计划、物流调度等,因此寻找适合有效的算法尤为重要。
2 部分代码
% function NSGA_2
clc;clear;
tic;
%% 初始化
PopSize=200;%种群大小
MaxIteration =300;%最大迭代次数
R=50;
% location1=load('location1_100.txt');%优化100个城市
% location2=load('A_location2_100.txt');
location1=load('location1.txt');
location2=load('location2.txt');
end
loc1=min(m1,m2);loc2=max(m1,m2);
scro(1,loc1:loc2)=fliplr(scro(1,loc1:loc2));
% tt=scro(1,m2);
% scro(1,m2)=scro(1,m1);
% scro(1,m1)=tt;
end
if rand<pm%对换变异
m1=randi(CityNum);
m2=randi(CityNum);
while m1==m2
m1=randi(CityNum);
end
tt=scro(2,m2);
scro(2,m2)=scro(2,m1);
scro(2,m1)=tt;
end
scro_cost(1,:)=costfunction(scro(1,:),location1,location2);
scro_cost(2,:)=costfunction(scro(2,:),location1,location2);
offspring_var=[offspring_var;scro];%解
offspring_cost=[offspring_cost;scro_cost];%适应度
end
offspring_chromosome(:,1:V)=offspring_var;
offspring_chromosome(:,V+1:V+M)=offspring_cost;
main_pop = size(chromosome,1);
offspring_pop = size(offspring_chromosome,1);
intermediate_chromosome(1:main_pop,:) = chromosome;
intermediate_chromosome(main_pop + 1 :main_pop + offspring_pop,1 : M+V) = ...
offspring_chromosome;
intermediate_chromosome = ...
non_domination_sort_mod(intermediate_chromosome);
%% 选择
chromosome = replace_chromosome(intermediate_chromosome,PopSize);
index=find(intermediate_chromosome(:,103)==1);
costrep=intermediate_chromosome(index,101:102);
cost=intermediate_chromosome(:,101:102);
if ~mod(Iteration,1)
figure (1)
plot(costrep(:,1),costrep(:,2),'r*',cost(:,1),cost(:,2),'kx');
xlabel('F1');ylabel('F2');
title(strcat('Interaction ',num2str(Iteration), ' Pareto non-dominated solutions'));
% hold on
end
if ~mod(Iteration,MaxIteration)
% if ~mod(Iteration,1)
fun_pf=costrep;
[fun_pf,~]=sortrows(fun_pf,1);
plot(fun_pf(:,1),fun_pf(:,2),'k*-');
title(strcat('Interaction ',num2str(Iteration), ' Pareto non-dominated solutions'));
hold on;
grid on;
end
end
3 仿真结果
4 参考文献
[1]李霄玉, and 姚骏. "解决多目标旅行商问题的改进NSGA-Ⅱ算法." 工业控制计算机 4(2018):103-104.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页