【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」车辆路径问题(VRP)最早是由Dantzig和Ramser于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。2.1带有容量约束的车辆路径问题(CVRP)该模型很难拓展到VRP的其他…

大家好,欢迎来到IT知识分享网。

车辆路径问题(VRP)最早是由 Dantzig 和 Ramser 于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

2.1 带有容量约束的车辆路径问题(CVRP)

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

该模型很难拓展到VRP的其他场景,并且不知道具体车辆的执行路径,因此对其模型继续改进。

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

问题属性与常见问题

车辆路径问题的特性比较复杂,总的来说包含四个方面的属性:\ (1)地址特性包括:车场数目、需求类型、作业要求。\ (2)车辆特性包括:车辆数量、载重量约束、可运载品种约束、运行路线约束、工作时间约束。\ (3)问题的其他特性。\ (4)目标函数可能是总成本极小化,或者极小化最大作业成本,或者最大化准时作业。

“`

tic clear clc %% 用importdata这个函数来读取文件 data=importdata(‘rc208.txt’); cap=1000; %% 提取数据信息 vertexs=data(:,2:3); %所有点的坐标x和y customer=vertexs(2:end,:); %顾客坐标 cusnum=size(customer,1); %顾客数 vnum=25; %初始车辆使用数目 demands=data(2:end,4); %需求量 h=pdist(vertexs); dist=squareform(h); %距离矩阵 %% 遗传算法参数设置 alpha=10; %违反的容量约束的惩罚函数系数 NIND=50; %种群大小 MAXGEN=200; %迭代次数 Pc=0.9; %交叉概率 Pm=0.05; %变异概率 GGAP=0.9; %代沟(Generation gap) N=cusnum+vnum-1; %染色体长度=顾客数目+车辆最多使用数目-1 %% 种群初始化 Chrom=InitPop(NIND,N); %% 输出随机解的路线和总距离 disp(‘初始种群中的一个随机值:’) [currVC,NV,TD,violatenum,violatecus]=decode(Chrom(1,:),cusnum,cap,demands,dist); %对初始解解码 currCost=costFuction(currVC,dist,demands,cap,alpha); %求初始配送方案的成本=车辆行驶总成本+alpha*违反的容量约束之和 disp([‘车辆使用数目:’,num2str(NV),’,车辆行驶总距离:’,num2str(TD),’,违反约束路径数目:’,num2str(violatenum),’,违反约束顾客数目:’,num2str(violatecus)]); disp(‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~’) %% 优化 BestCost=zeros(MAXGEN,1); %记录每一代全局最优解的总成本 gen=1; while gen<=MAXGEN %% 计算适应度 ObjV=calObj(Chrom,cusnum,cap,demands,dist,alpha); %计算种群目标函数值 FitnV=Fitness(ObjV); %% 选择 SelCh=Select(Chrom,FitnV,GGAP); %% OX交叉操作 SelCh=Recombin(SelCh,Pc); %% 变异 SelCh=Mutate(SelCh,Pm); %% 局部搜索操作 SelCh=LocalSearch(SelCh,cusnum,cap,demands,dist,alpha); %% 重插入子代的新种群 Chrom=Reins(Chrom,SelCh,ObjV); %% 删除种群中重复个体,并补齐删除的个体 Chrom=dealRepeat(Chrom); %% 打印当前最优解 ObjV=calObj(Chrom,cusnum,cap,demands,dist,alpha); %计算种群目标函数值 [minObjV,minInd]=min(ObjV); BestCost(gen)=minObjV; disp([‘第’,num2str(gen),’代最优解:’]) [bestVC,bestNV,bestTD,bestvionum,bestviocus]=decode(Chrom(minInd(1),:),cusnum,cap,demands,dist); disp([‘车辆使用数目:’,num2str(bestNV),’,车辆行驶总距离:’,num2str(bestTD),’,违反约束路径数目:’,num2str(bestvionum),’,违反约束顾客数目:’,num2str(bestviocus)]); fprintf(‘\n’) %% 更新迭代次数 gen=gen+1 ; end %% 打印外层循环每次迭代的全局最优解的总成本变化趋势图 figure; plot(BestCost,’LineWidth’,1); title(‘全局最优解的总成本变化趋势图’) xlabel(‘迭代次数’); ylabel(‘总成本’); %% 打印全局最优解路线图 drawBest(bestVC,vertexs); toc “`

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

【VRP问题】基于遗传算法求解带容量的VRP问题「终于解决」

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25737.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信