【路径规划】基于nsga-II求解tsp问题matlab代码

322 阅读2分钟

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代码与数据下载地址

见博客主页