有能力约束的车辆路径调度(Capacitated Vehicle Routing Problem,CVRP)
车辆路径问题是指为服务于需求已知的一组客户的车队,设计从中心仓库出发并返回的最小费用路径,约束条件包括客户只能被服务一次,且车辆的载重能力有限,或具有时间窗限制等,并随约束条件的拓展可以衍生出许多新的问题,VRP自从1959年由DANTZIG和 RAMSER提出以来,迅速成为运筹学\物流管理\交通规划管理\地理区位等领域的研究热点VRP的研究属于组合优化中的NP难问题,即随着问题的规模增加,计算机求解所耗费的时间迅速增加。针对 VRP的特点,国内外学者引入各种优化算法对其进行求解,其中应用较多的是各种智能算法,如遗传算法、进化计算等。
遗传算法(Genetic Algorithm,GA)是一种以自然选择和遗传理论为基础,将生物进化过程中适者生存规则与染色体的随机信息变换机制相结合的全局搜索算法,它对优化对象既不要求连续,也不要求可微,并具有极强的鲁棒性。但遗传算法本身存在一些问题,如容易出现“早熟”、收敛速度慢等,因此,在解决车辆路径问题时需要加以改进。
本文用遗传算法求解有能力约束的VRP,遗传算法的交叉算子采用顺序交叉算子,变异算子采用随机变异算子。
参考文献:
[1] 梁勤.欧基于改进免疫算法的有能力约束车辆路径问题[J].武汉理工大学学报
[2] 梁勤欧,周晓艳.基于免疫遗传算法的设备布局问题研究[J]. 武汉理工大学学报
部分代码:
% Author: 怡宝2号
% Use: 基于遗传算法求解CVRP问题,交叉采用的是顺序交叉方法;变异采用交换变异:随机选择串中的两点,交换其基因值。
% 输入变量(可修改量): demand.mat:每个客户的需求量
% distance.mat:距离矩阵
% const:客户的个数
% MAXGEN:遗传算法的遗传代数,视具体情况改变
%
%
% 输出: trace:每一代的最优个体
% Remark: 代写程序qq:778961303,如有疑问请咨询
clc
clear all
close all
NIND=20; %种群大小
const=29; %客户个数
carload=25; %车的载重限制
MAXGEN=100; %遗传代数
GGAP=0.9; %代沟
PC=0.8; %交叉概率
PM=0.1; %变异概率
trace=[]; %结果存储数组
% demand=ceil(rand(29,1)*9);
% save demand
load demand %每个客户点的需求
% distance=xlsread(‘distance.xlsx’);
% save distance
load distance %距离矩阵
%—————–初始化种群——————-%
for i=1:NIND
chrom(i,:)=randperm(const);
end
%—————–计算目标函数——————-%
visited=[];
route=ones(NIND,64)*Inf;
% route=[];
for i=1:NIND
temp=0;
j=1;
while j<=const
temp=temp+demand(chrom(i,j));
visited=[visited chrom(i,j)]; %没有超重,则按种群运货
if temp>carload
temp=0;
visited(1,size(visited,2))=0; %如果超重则回到原点
j=j-1;
end
j=j+1;
if j==const+1
visited(1,size(visited,2)+1)=0; %使最后一点回到原点
end
end
route(i,2:size(visited,2)+1)=visited; %每个种群的行驶路线
visited=[];
end
route(:,1)=0; %使所有路线都出原点出发
%—————-计算目标函数的值———————%
length=zeros(NIND,1); %保存路线的长度变量
for i=1:NIND
temp=0;
updimension=find(route(i,:)