matlab遗传算法多配送中心路径优化(带时间窗)【matlab优化算法】
问题描述
问题描述
本文主要是在某个区域的背景下,该区域内有s个门店,以每个门店为圆心,3公里为半径的范围内进行配送服务,假设不存在重叠区域,客户下单遵循就近原则,首先选择距离自己最近的门店,然后进行选择商品进行下单,若客户所在最近的门店缺货,需要客户自行选择是否同意其他门店调货,可选择调货到最近门店且自行取货,或等待调货成功后再进行配送;若是选择调货并配送,那么基础配送时间以及配送费用可能会相应增加。门店是即时配送平台合作,对客户在线上下单的订单进行派送;门店在实时接收订单需求,进行订单拣选打包,等待骑手来取货。根据订单配送数量、重量、配送要求、取送货地点以及配送员位置信息和移动速度等信息,合理规划配送路径,使骑手依次经过取货点、客户点,在客户要求的时间内送达客户指定地点,时间大致在30分钟到120分钟。若未能在客户的预计时间内送达会产生惩罚成本,提前送达没有惩罚成本,该惩罚成本根据超时时间以及客户进行计算。
本文在各门店配送范围不存在交叉重叠的假设下,以区域内某个门店作为主要研究对象,具体问题分析:
该区域G内的M个连锁门店S1,S2,S3,S4,同时对周围线上下单,线下配送的顾客进行配送服务,顾客选择距离自己最近的门店,因为即时配送下单时间比较集中,所以选定在某一段时间,有数量为n的配送目标,即顾客数,我们将这 n 个配送订单分分布在M个门店。各个门店同时对本店订单配送到要求地点,满足路径优化目标函数最小和多个约束条件,要求即时物流平台对该区域骑手从该店出发,把订单集合中的所有商品送到客户指点的目标地点,使得店面的所有订单,每一个顾客所在的目标地点都能被该店的同一辆物流配送车辆所配送。在这个过程中,车辆不会中途返回门店,问题优化的关键在于如何门店的多个车辆进行配送路线规划,以优化这个过程中存在的问题,使得整体的配送总成本最小。
模型假设
针对该问题,便于模型的建立和求解,模型遵循下列假设:
(1)已知每一个顾客的地理位置、时间窗、车辆最大的配送距离,车的载重量和骑手停留服务时间也都是固定的;
(2)实时更新骑手的地理位置取送货状态
(3)订单中的货物数量、体积和重量不会超过配送车辆的最大载重要求,取送货距离不会超过车辆最大行驶距离,
(4)骑手都是从门店出发配送,完成所有订单后不需返回门店;
(5)不考虑温度条件、骑手遵守交通状况,行驶速度为匀速行驶,行驶过程中不会发生扰乱配送的不可控因素;
(8)每一个订单只能被一个骑手服务,一个骑手可以服务多个订单
模型构建
主程序展示
clear
clc
close all
tic
%% 用importdata这个函数来读取文件
% shuju=importdata('cc101.txt');
load('cc101');
shuju=c101;
% bl=importdata('103.txt');
bl=3;
cap=60; %车辆最大装载量
%% 提取数据信息E=shuju(1,5); %配送中心时间窗开始时间
L=shuju(1,6); %配送中心时间窗结束时间
zuobiao=shuju(:,2:3); %所有点的坐标x和y
pszx=zuobiao(1:4,:);
customer=zuobiao(5:end,:); %顾客坐标
cusnum=size(customer,1); %顾客数
v_num=20; %车辆最多使用数目
demands=shuju(5:end,4); %需求量
a=shuju(5:end,5); %顾客时间窗开始时间[a[i],b[i]]
b=shuju(5:end,6); %顾客时间窗结束时间[a[i],b[i]]
s=shuju(5:end,7); %客户点的服务时间
h=pdist(zuobiao);
dist=squareform(h);
% dist=load('dist.mat');
% dist=struct2cell(dist);
% dist=cell2mat(dist);
dist=dist./1000;%距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
%% 遗传算法参数设置
alpha=100000; %违反的容量约束的惩罚函数系数
belta=90;%违反时间窗约束的惩罚函数系数
belta2=60;
chesu=20;NIND=300; %种群大小
MAXGEN=1000; %迭代次数
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
GGAP=0.9; %代沟(Generation gap)
N=cusnum+v_num-1; %染色体长度=顾客数目+车辆最多使用数目-1
% N=cusnum;
%% 初始化种群
% init_vc=init(cusnum,a,demands,cap);
dpszx = struct('ps',[], 'Chrom',[]);
dpszx.Chrom=InitPopCW(NIND,N,cusnum,a,demands,cap); %构造初始解
ps=pszxxz(dpszx.Chrom,cusnum);
%% 输出随机解的路线和总距离
disp('初始种群中的一个随机值:')[VC,NV,TD,violate_num,violate_cus]=decode(dpszx.Chrom(1,:),cusnum,cap,demands,a,b,L,s,dist,chesu,bl);
% [VC,NV]=cls(dpszx.Chrom(1,:),cusnum);% [~,~,bsv]=violateTW(VC,a,b,s,L,dist,chesu,bl);
% disp(['总距离:',num2str(TD)]);
disp(['车辆使用数目:',num2str(NV),',车辆行驶总距离:',num2str(TD)]);
disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
%% 优化
gen=1;
figure;
hold on;box on
xlim([0,MAXGEN])
title('优化过程')
xlabel('代数')
ylabel('最优值')
ObjV=calObj(dpszx.Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,ps); %计算种群目标函数值
preObjV=min(ObjV);
%%
while gen<=MAXGEN%% 计算适应度ObjV=calObj(dpszx.Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,ps); %计算种群目标函数值line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001)%画图 最优函数preObjV=min(ObjV);FitnV=Fitness(ObjV);%% 选择[SelCh,psc]=Select(dpszx.Chrom,FitnV,GGAP,ps);%% OX交叉操作[SelCh,psc]=Recombin(SelCh,Pc,psc,cusnum);%% 变异[SelCh,psc]=Mutate(SelCh,Pm,psc,cusnum);%% 重插入子代的新种群[dpszx.Chrom,ps]=Reins(dpszx.Chrom,SelCh,ObjV,psc,ps);%% 打印当前最优解ObjV=calObj(dpszx.Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,ps); %计算种群目标函数值[minObjV,minInd]=min(ObjV);disp(['第',num2str(gen),'代最优解:'])[bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(dpszx.Chrom(minInd(1),:),cusnum,cap,demands,a,b,L,s,dist,chesu,bl);disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD)]);fprintf('\n')%% 更新迭代次数gen=gen+1 ;
end
%% 画出最优解的路线图
ObjV=calObj(dpszx.Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,ps); %计算种群目标函数值
[minObjV,minInd]=min(ObjV);
%% 输出最优解的路线和总距离
disp('最优解:')
bestChrom=dpszx.Chrom(minInd(1),:);
bestps=ps(minInd(1),:);
[bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(bestChrom,cusnum,cap,demands,a,b,L,s,dist,chesu,bl);
disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD)]);
disp('-------------------------------------------------------------')
% [cost]=costFuction(bestVC,a,b,s,L,dist,demands,cap,alpha,belta,belta2,chesu,bl,);
%% 画出最终路线图
draw_Best(bestVC,zuobiao,bestps);
% save c101.mat
% toc
如需帮助:VX:zhangshu2274
结果
最优解:
车辆使用数目:20,车辆行驶总距离:186.7797
配送路线1:2->62->61->60->59->56->54->2
配送路线2:2->39->83->7->5->40->2
配送路线3:1->3->2->1->108->19->12->1
配送路线4:2->80->79->42->2
配送路线5:1->94->58->57->63->73->71->1
配送路线6:4->105->104->103->102->4
配送路线7:4->38->31->30->29->87->86->89->88->4
配送路线8:1->106->70->69->68->67->65->91->1
配送路线9:2->16->15->14->13->98->2
配送路线10:3->53->6->66->78->3
配送路线11:1->77->76->75->1
配送路线12:1->92->90->85->84->82->1
配送路线13:1->95->93->101->100->34->28->27->26->25->1
配送路线14:1->33->32->1
配送路线15:3->23->22->21->20->45->44->43->3
配送路线16:2->52->51->50->49->48->2
配送路线17:4->74->72->97->24->4->18->46->96->4
配送路线18:1->107->11->10->1
配送路线19:4->99->41->35->37->36->4
配送路线20:3->47->55->9->8->64->17->81->3
matlab遗传算法多配送中心路径优化(带时间窗)【matlab优化算法】相关推荐
- 【路径规划】Matlab 遗传算法求解多式联运问题(带时间窗、配送成本,中转成本总成本最低)
集装箱多式联运定义 集装箱多式联运作为一种新型多式联运方式,将多式联运和集装箱运输高效地结合在一起,集两者的优势于 一身,与传统的运输方式相比具有更高效.更灵活.更低成本.更高安全性诸多优势.正是由于 ...
- 0x80070035找不到网络路径_蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题...
蚁群算法求解VRPTW问题https://www.zhihu.com/video/1235315908018298880 今天为大家讲解使用蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题. ...
- 【TWVRP】基于matlab遗传算法求解带时间窗且车辆速度车辆路径规划问题【含Matlab源码 2094期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【路径规划】基于头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题附matlab代码
1 内容介绍 本文主要研究广州番禺配送中心的车辆路径规划问题,首先针对之前车辆运行中的先送货后取货模式,产生车辆运行路线的迂回,以及车辆在回程中的空载,路径规划不合理,送货时间长的问题,采用集成的观点 ...
- 【路径规划】基于遗传算法求解带时间窗车辆路径规划问题(VRPTW)matlab源码
1 简介 有时间窗的车辆路径问题(Vehicle Routing Problem with Time Windows,VRPTW)因为其有重要的现实意义而备受关注.其时间窗即为客户接受服务的时间范围, ...
- 【TWVRP】基于matlab遗传算法求解多车场开放式多商品带时间窗的车辆路径规划问题【含Matlab源码 1849期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】基于matlab粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】基于matlab模拟退火算法结合狼群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1075期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】基于matlab蚁群算法求解带时间窗车辆路径规划问题【含Matlab源码 1930期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
最新文章
- Linux 下mysql 安装完成后,输入mysql 无法进入问题
- 代谢组学的相关分析数据库,MetaboAnalyst 5.0 使用指南
- 带你攀顶云端高级认证,有这回事?
- 在js中实现邮箱格式的验证
- IMU-Allan方差分析
- android 4.3版本应用使用内网,Android Studio 在内网的使用方法(离线使用gradle)
- Oracle数据库学习笔记(一)
- extjs java 教程_[Java教程]ExtJS 第一个程序
- AIROBOT系统 之 私人存储 和 DLNA 智能电视云
- 用Python求解拿鸡蛋问题
- whale 帷幄:crm客户管理营销系统全称是什么
- git重新设置用户名密码
- Unity小游戏之闯关小游戏
- 超低功耗研发-STM32L151C8T6芯片(三)RTC自动唤醒机制
- buuctf 荷兰带宽数据泄露
- 遗传算法求解TSP旅行商问题
- 国际表征学习会议ICLR 2020共计198篇开源代码论文目录
- PSpice受控源设置增益参数
- 解析蓝牙模块的运用方案
- js高级jQuery框架easyUI框架