配送路径规划基于matlab遗传算法求解静态外卖骑手路径规划问题含Matlab源码 2248期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配送路径规划基于matlab遗传算法求解静态外卖骑手路径规划问题含Matlab源码 2248期相关的知识,希望对你有一定的参考价值。
⛄一、遗传算法求解静态外卖骑手路径规划问题
1 模型假设
外卖配送的实际运行是一个复杂的过程, 受诸多因素影响, 为了建立调度模型, 本文做如下假设。
(1) 外卖配送更多的是服务特殊群体, 所以本文认为外卖配送是一种预约型配送, 即在进行调度安排前, 己经获取了所有顾客的地理信息。
(2) 在实际运行中, 顾客的出行分布具有很强的时空特征, 但本文更注重方法论的介绍。所以, 假设服务区域内的顾客地理位置分布在时间和空间上都服从均匀分布。
(3) 外卖配送车辆的调度与路网条件息息相关, 为了简化模型以及便于说明设计思路, 忽略路网对调度的影响。Quadrifogli等己经证明“对角”路径能够反映车辆真实的运行情况。本文假设车辆按“对角”路径运行, 即车辆只能沿水平或垂直方向运行。
(4) 可配送车辆常用于低密度区域, 顾客购买总量小, 所以为了简化模型不考虑车辆的容量约束。
2 模型建立
外卖配送的车辆调度是在确定总的配送计划之后, 根据顾客的位置信息, 解决“每个车次服务哪些顾客, 怎么配送”的问题。外卖配送从运营者和顾客角度出发建立双层规划模型, 运营者希望在投入下能够服务更多的顾客, 顾客则希望送达的时间越短越好。
假如有一个取餐地点以及送餐地点n, 配送车辆每经过一段距离的配送成本c, 取餐地点和送餐地点距离dij, 能够参与配送的车辆数量为m, 把表示取餐地点的这个点当作0点, 送餐地点当作1, 2, …, n, 定义变量xijk, Sik为:
3 遗传算法设计
遗传算法是一种解决最优化问题, 得出最优解的方法。该算法是一种高度并行、随即和自适应优化算法, 是J.Holland教授提出的。
遗传算法是随机优化算法, 从一个种群随机开始搜索。该算法模仿了生物进化论过程当中基因 (染色体) 的生存过程, 此过程中的染色体充当了种群当中的个体, 因此每个个体都可以作为是问题的一个解。个体在衍生的过程中不断的复制、交叉和变异, 产生新的个体。通过设定的“适应值”来衡量个体, 并通过“适应值”对新产生的个体进行筛选, 在保持种群数量恒定的同时, 选出最好的个体, 得出问题的最优解。
3.1 算法步骤
遗传算法的流程图如图1所示。
3.2 带有时间窗的外卖车辆调度问题的遗传算法的设计
3.2.1 初始种群的建立
本问题主要为VRPTW问题, 采用自然数进行编码。用0表示餐馆, 用1、2、…、N表示待服务的人员位置。假设餐馆有C台车, 则在配送过程中最多有C条服务路径, 每一台车都始发于餐馆, 最后也终于餐馆。为了能够使染色体中的每一个位置都可以表达一条路径, 因此增加虚拟餐馆数量, 增加个数为C-1个, 虚拟餐馆就可以用N+1、N+2、…、N+C-1表示。则从1、2、…、C+N-1互不重复的自然数的排列就可以构成一个染色体, 并且对应了一种配送方案。
假设, 现在有12位顾客需要外卖配送, 则染色体就可以表示成X=0, 1, 3, 2, 5, 13, 4, 6, 8, 7, 14, 9, 11, 10, 12, 15中, 13, 14, 15为虚拟餐馆, 配送的车辆为3, 配送路径有三条:0-1-3-2-5-0;0-4-6-8-7-0;0-9-11-10-12-0。
3.2.2 适应值筛选
为达到染色体进化过程中染色体的更新换代, 必须对每个染色体进行评价。对此次配送服务主要有两个约束:
(1) 时间窗约束;
(2) 车辆行驶路程能力。
构建出评价函数如下:
3.2.3 交叉、变异操作
基于每次的配送过程中配送任务和虚拟餐馆共同排列进行编码, 所形成的染色体中的相邻元素间都是互不相同的自然数。在遗传算法中的单点和多点交叉, 会造成相关配送任务的遗漏。因此选择部分映射交叉的方法。随机定义两个交叉点, 交换个体交叉点之间的片段。
⛄二、部分源代码
clear
clc
close all
tic
%% 用importdata这个函数来读取文件
% shuju=importdata(‘cc101.txt’);
load(‘c102’);
shuju=c101;
% bl=importdata(‘103.txt’);
bl=30;
cap=1; %车辆最大装载量
%% 提取数据信息
E=shuju(1,5); %配送中心时间窗开始时间
L=shuju(1,6); %配送中心时间窗结束时间
zuobiao=shuju(:,2:3); %所有点的坐标x和y
% vertexs= vertexs./1000;
customer=zuobiao(2:end,:); %顾客坐标
cusnum=size(customer,1); %顾客数
v_num=6; %车辆最多使用数目
demands=shuju(2:end,4); %需求量
a=shuju(2:end,5); %顾客时间窗开始时间[a[i],b[i]]
b=shuju(2:end,6); %顾客时间窗结束时间[a[i],b[i]]
s=shuju(2:end,7); %客户点的服务时间
h=pdist(zuobiao);
% dist=load(‘dist1.mat’);
% dist=struct2cell(dist);
% dist=cell2mat(dist);
%实际城市间的距离
dist=squareform(h); %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
dist=dist*5;
dist=dist./1000;
%% 遗传算法参数设置
alpha=100000; %违反的容量约束的惩罚函数系数
belta=1; %违反晚到时间窗约束的惩罚函数系数
belta2=1;%违反早到时间窗约束的惩罚函数系数
chesu=0.5;
NIND=100; %种群大小
MAXGEN=500; %迭代次数
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
GGAP=0.9; %代沟(Generation gap)
N=cusnum+v_num-1; %染色体长度=顾客数目+车辆最多使用数目-1
n=cusnum/2+v_num-1;
nn=cusnum/2;
% N=cusnum;
%% 初始化种群
% init_vc=init(cusnum,a,demands,cap); %构造初始解
%% 种群初始化
Chrom=InitPop(NIND,n);
% Chrom=InitPopCW(NIND,N,cusnum,init_vc);
%% 输出随机解的路线和总距离
disp(‘初始种群中的一个随机值:’)
[VC,NV,TD]=decode(Chrom(1,:),cusnum,cap,demands,a,b,L,s,dist,chesu,bl,nn);
% disp([‘总距离:’,num2str(TD)]);
disp([‘车辆使用数目:’,num2str(NV),‘,车辆行驶总距离:’,num2str(TD)]);
disp(‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~’)
%% 优化
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]龚艺,冉金超,侯明明.基于遗传算法的多目标外卖路径规划[J].电子技术与软件工程. 2019,(10)
印刷版
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于配送路径规划基于matlab遗传算法求解静态外卖骑手路径规划问题含Matlab源码 2248期的主要内容,如果未能解决你的问题,请参考以下文章
TWVRP基于matlab遗传算法求解带时间窗的载重约束外卖配送车辆路径规划问题含Matlab源码 1417期
配送路径规划基于matlab遗传算法求解带时间窗的配送车辆路径规划问题含Matlab源码 604期
配送路径规划基于matlab遗传算法求解带时间窗的配送车辆路径规划问题含Matlab源码 604期
配送路径规划基于matlab遗传算法求解无人机和货车配送路径规划问题含Matlab源码 361期