1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJaVlpZw
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。
4.部分源码
%% TSP
addpath 'TSP\';
%初始化
CityNum=size(City,1)-1; %需求点个数
NIND=60; %种群大小
MAXGEN=100; %最大遗传代数
GGAP=0.9; %代沟概率
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
mindis = zeros(1,MAXGEN);
bestind = zeros(1,CityNum+2);
%初始化种群
Chrom=InitPop(NIND,CityNum);
%迭代
gen=1;
while gen <= MAXGEN
[ttlDistance,FitnV]=Fitness(Distance,Chrom);
[mindisbygen,bestindex] = min(ttlDistance);
mindis(gen) = mindisbygen;
bestind = Chrom(bestindex,:);
%选择
SelCh=Select(Chrom,FitnV,GGAP);
%交叉操作
SelCh=Crossover(SelCh,Pc);
%变异
SelCh=Mutate(SelCh,Pm);
SelCh=Reverse(SelCh,Distance);
Chrom=Reins(Chrom,SelCh,FitnV);
gen=gen+1;
end
%历史最短距离
mindisever = mindis(MAXGEN);
bestroute = bestind;
disp('TSP最优路径')
disp('TSP最优路径')
disp('TSP最优路径')
TextOutput(bestroute,mindisever)
figure
subplot(121)
plot(mindis,'LineWidth',2)
xlim([1 gen-1])
set(gca, 'LineWidth',1)
xlabel('Num of Iterations')
ylabel('Min Distance(km)')
title('TSP')
subplot(122)
DrawPath(bestroute,City)
Err1=mindis;
%% DVRP
addpath 'DVRP\';
%初始化
CityNum=size(City,1)-1;
NIND=60; %种群大小
MAXGEN=100; %最大遗传代数
GGAP=0.9; %代沟概率
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
mindis = zeros(1,MAXGEN);
bestind = zeros(1,CityNum*2+1);
%初始化
Chrom=InitPop(NIND,CityNum,Distance,Travelcon);
...........................................................
%% CVRP
addpath 'CVRP\';
%初始化
CityNum=size(City,1)-1; %需求点个数
NIND=60; %种群大小
MAXGEN=100; %最大遗传代数
GGAP=0.9; %代沟概率
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
mindis = zeros(1,MAXGEN);
bestind = zeros(1,CityNum*2+1);
%初始化
Chrom=InitPop(NIND,CityNum,Demand,Capacity);
.....................................................................
figure
subplot(121)
plot(mindis,'LineWidth',2) %展示目标函数值历史变化
xlim([1 gen-1]) %设置 x 坐标轴范围
set(gca, 'LineWidth',1)
xlabel('Iterations')
ylabel('Min Distance(km)')
title('CVRP')
subplot(122)
DrawPath(bestroute,City)
Err3=mindis;
%% CDVRP
addpath 'CDVRP\';
%初始化问题参数
CityNum=size(City,1)-1;
%遗传参数
NIND=60; %种群大小
MAXGEN=100; %最大遗传代数
GGAP=0.9; %代沟概率
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
mindis = zeros(1,MAXGEN);
bestind = zeros(1,CityNum*2+1);
%初始化种群
Chrom=InitPop(NIND,CityNum,Distance,Demand,Travelcon,Capacity);
.............................................
figure
subplot(121)
plot(mindis,'LineWidth',2)
xlim([1 gen-1])
xlabel('Iterations')
ylabel('Min Distance(km)')
title('CDVRP')
subplot(122)
DrawPath(bestroute,City)
Err4=mindis;
%% VRPTW
addpath 'VRPTW\';
%初始化问题参数
CityNum=size(City,1)-1;
%遗传参数
NIND=60; %种群大小
MAXGEN=100; %最大遗传代数
GGAP=0.9; %代沟概率
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
............................................................
figure
subplot(121)
plot(mindis,'LineWidth',2) %展示目标函数值历史变化
xlim([1 gen-1]) %设置 x 坐标轴范围
set(gca, 'LineWidth',1)
xlabel('Iterations')
ylabel('Min Distance(km)')
title('VRPTW')
subplot(122)
DrawPath(bestroute,City)
disp('VRPTW最优路径')
disp('VRPTW最优路径')
disp('VRPTW最优路径')
fprintf('总路程 = %s km \n',num2str(mindisever))
TextOutput(bestroute,Distance,TravelTime,Demand,TimeWindow,Capacity) %显示最优路径
Err5=mindis;
figure
plot(Err1,'LineWidth',2)
hold on
plot(Err2,'LineWidth',2)
hold on
plot(Err3,'LineWidth',2)
hold on
plot(Err4,'LineWidth',2)
hold on
plot(Err5,'LineWidth',2)
hold on
xlim([1 gen-1])
xlabel('Iterations')
ylabel('Min Distance(km)')
legend('TSP','DVRP','CVRP','CDVRP','VRPTW')
A460