300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】

【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】

时间:2020-01-24 12:37:56

相关推荐

【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】

一、简介

1 VRP问题

车辆路径规划问题(Vehicle Routing Problem,VRP)一般指的是:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。

2 VRPTW问题

带时间窗的车辆路径规划问题(Vehicle Routing Problem with Time Window,VRPTW)是在VRP基础上添加配送时间约束条件产生的一个新问题。在这类问题中,给定车辆到达目的地的最早时间和最晚时间,要求车辆必须在规定的时间窗内到达,早于最早时间或晚于最晚时间都要产生额外的惩罚费用。此时,决策如何规划调度车辆使得配送的总费用最小化。

3 VRP与VRPTW对比:

4 问题描述

本文将要研究的问题参考自文章《Fruit and Vegetable Agricultural Products Logistics Transport Routing Optimization - A Case Study of Qingdao blueberries distribution》。

某果蔬农产品运输配送中心 C0 (Center)。该配送中心有足够的能力满足顾客所有对果蔬农产品数量的要求。同时该配送中心有足够多且完全相同的车辆 J 能够完成配送活动的需要,运输车辆的最大容量为 V(Volume),配送车辆在配送活动过程中均能一次到达,中间不会出现任何阻碍和特殊情况。C={C0 ,C1 ,C2 ……Cn }。其中 C0 代表配送中心。Ci (i=1,2, ……,n)(Consumer)表示有需求的客户的需求数量;n 表示有需求的客户数量。Dik (Distance):表示顾客 Ci 到顾客 Ck 的距离(其中i不等于k);Qdi (Quantity Demanded):表示顾客 Ci 的需求量;Qg (Quality good):表示果蔬农产品刚刚采摘完,完好时的果蔬农产品的质量;[ETi ,LTi ]表示客户 Ci 对某类产品的时间窗约束。

在已知以上的条件情况下,合理安排最优的配送路线使得配送过程中满足所有条件情况下,各个费用之和最少。

5 数学模型

(具体模型参见(三)中文献)

6 算法设计

个体编码

遗传算法求解VRPTW的文献中有多种编码方式,这里对于个体采用自然数编码,代表配送中心,代表顾客;不同车辆的配送路线之间用0分隔(即每辆车都从仓库出发);对于有个顾客,辆车的VRP问题来说,染色体长度为。

例如配送中心有3辆车为8个客户服务,一条可能的染色体如下:

0, 7, 0, 1, 2, 3, 5, 0, 8, 4, 6, 0

这条染色体表示的三辆车的行驶路线为:

第一辆车:0-7-0

第二辆车:0-1-2-3-5-0

第三辆车:0-8-4-6-0

惩罚

在交叉和突变产生的子代中,可能会有两种违反约束的形式:

车辆超载

不能在时间窗口约束给出的最晚时间点内到达指定顾客处

对这两种违反约束的情况采用静态惩罚,考虑到时间窗口更容易被违反,对其施加较大的惩罚因子。对这两种约束违反的惩罚因子分别设置为10和500。

交叉

这里参考《基于电动汽车的带时间窗的路径优化问题研究》中给出的交叉操作

突变

对选中的个体中各条子路线用2-opt算法优化

选择

育种选择:binary锦标赛选择

环境选择:采用精英保留策略,合并子代和父代后,选择数量等同于族群规模的个体

%

二、部分源代码

clearclcclose alltic%% 用importdata这个函数来读取文件c101=importdata('c101.txt');vehicle_info = [2 435050;3635050;615450100;1017550110;1330650140;1540650140;2550850180];cap=200;%车辆最大装载量%% 提取数据信息E=c101(1,5); %配送中心时间窗开始时间L=c101(1,6); %配送中心时间窗结束时间vertexs=c101(:,2:3); %所有点的坐标x和ycustomer=vertexs(2:end,:); %顾客坐标cusnum=size(customer,1); %顾客数v_num=21;%车辆最多使用数目demands=c101(2:end,4); %需求量a=c101(2:end,5); %顾客时间窗开始时间[a[i],b[i]]b=c101(2:end,6); %顾客时间窗结束时间[a[i],b[i]]s=c101(2:end,7); %客户点的服务时间h=pdist(vertexs);dist=squareform(h);%距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]%% 遗传算法参数设置alpha=10;%违反的容量约束的惩罚函数系数belta=100; %违反时间窗约束的惩罚函数系数NIND=100;%种群大小MAXGEN=100; %迭代次数Pc=0.9; %交叉概率Pm=0.05;%变异概率GGAP=0.9;%代沟(Generation gap)N=cusnum+v_num-1; %染色体长度=顾客数目+车辆最多使用数目-1%% 初始化种群init_vc=init(cusnum,a,demands,cap); %构造初始解Chrom=InitPopCW(NIND,N,cusnum,init_vc);%% 输出随机解的路线和总距离disp('初始种群中的一个随机值:')[VC,NV,TD,violate_num,violate_cus]=decode(Chrom(1,:),cusnum,cap,demands,a,b,L,s,dist);% disp(['总距离:',num2str(TD)]);disp(['车辆使用数目:',num2str(NV),',车辆行驶总距离:',num2str(TD),',违反约束路径数目:',num2str(violate_num),',违反约束顾客数目:',num2str(violate_cus)]);disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')%% 优化gen=1;figure;hold on;box onxlim([0,MAXGEN])title('优化过程')xlabel('代数')ylabel('最优值')ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta); %计算种群目标函数值preObjV=min(ObjV);while gen<=MAXGEN%% 计算适应度ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta); %计算种群目标函数值line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001)preObjV=min(ObjV);FitnV=Fitness(ObjV);%% 选择SelCh=Select(Chrom,FitnV,GGAP);%% OX交叉操作SelCh=Recombin(SelCh,Pc);%% 变异SelCh=Mutate(SelCh,Pm);%% 局部搜索操作SelCh=LocalSearch(SelCh,cusnum,cap,demands,a,b,L,s,dist,alpha,belta);%% 重插入子代的新种群Chrom=Reins(Chrom,SelCh,ObjV);%% 删除种群中重复个体,并补齐删除的个体Chrom=deal_Repeat(Chrom);%% 打印当前最优解ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta); %计算种群目标函数值[minObjV,minInd]=min(ObjV);disp(['第',num2str(gen),'代最优解:'])[bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(Chrom(minInd(1),:),cusnum,cap,demands,a,b,L,s,dist);disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD),',违反约束路径数目:',num2str(best_vionum),',违反约束顾客数目:',num2str(best_viocus)]);fprintf('\n')%% 更新迭代次数gen=gen+1 ;end%% 画出最优解的路线图ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta); %计算种群目标函数值[minObjV,minInd]=min(ObjV);%% 输出最优解的路线和总距离disp('最优解:')bestChrom=Chrom(minInd(1),:);[bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(bestChrom,cusnum,cap,demands,a,b,L,s,dist);disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD),',违反约束路径数目:',num2str(best_vionum),',违反约束顾客数目:',num2str(best_viocus)]);disp('-------------------------------------------------------------')%% 判断最优解是否满足时间窗约束和载重量约束,0表示违反约束,1表示满足全部约束flag=Judge(bestVC,cap,demands,a,b,L,s,dist);%% 检查最优解中是否存在元素丢失的情况,丢失元素,如果没有则为空DEL=Judge_Del(bestVC);%% 画出最终路线图draw_Best(bestVC,vertexs);save c101.mattoc

三、运行结果

四、matlab版本及参考文献

1 matlab版本

a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。