【配送路径规划】基于matlab遗传算法求解静态外卖骑手路径规划问题【含Matlab源码 2248期】

news/2024/5/2 18:56:04/文章来源:https://blog.csdn.net/TIQCmatlab/article/details/128069266

⛄一、遗传算法求解静态外卖骑手路径规划问题

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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_37786.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

版本控制利器——changelog

问题描述 当前,我们项目需要进行版本的确定,人工审核代码已接近尾声,但为了防止后续继续出现该问题,我希望能够做到在每次push到master时,更新changelog 将每一个版本的commit记录下来,类似于下列 解决…

C++_串口编程_官方示例:监视通信事件

这是微软官方的一个例子,这个例子中,如果不做修改,那么他是可以异步运行的,会出现一个错误:官方也说了一下,但是不太好懂,我拷贝过来放在这里,作为参考。 如果无法立即完成重叠的操作…

【Canvas】js用Canvas绘制阴阳太极图动画效果

学习JavaScript是否兴趣缺缺,那就需要来一个兴趣学习,问一下有没有兴趣用Canvas画图呢,可以画很多有趣的事物,自由发挥想象,收获多多哦,这里有一个例子,如何用canvas画阴阳太极图动图效果&#…

【博客544】golang pprof性能调试:寻找memory瓶颈

golang pprof性能调试:寻找memory瓶颈 1、前置 pprof的使用与输出列解析看姐妹篇:golang pprof性能调试:寻找cpu瓶颈 2、引入pprof到程序中,以调试memory瓶颈 给程序加入: import _ "net/http/pprof"go…

【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)

需要源码和Jar包请点赞关注收藏后评论区留下QQ~~~ 一、在线语音合成 虽然国产智能机大多集成了中文语音引擎,但是系统自带的语音工具无法满足商用要求,功能单一,所以势必引入第三方的语音引擎,依靠第三方提供的开发包统一支撑语音…

缓存穿透、缓存击穿、缓存雪崩及其解决方案

缓存(cache),大家都非常熟悉,几乎每个系统乃至整个计算机体系中都会用到。在分布式系统架构中,主要用于减轻数据库的压力,提高系统的响应速度和并发吞吐,即空间(内存)换时间。当大量的读、写请求…

2023年天津财经大学珠江学院专升本经济学专业课考试大纲

天津财经大学珠江学院2023年高职升本科专业课考试《经济学》考试大纲一、本大纲系天津财经大学珠江学院2023年高职升本科《经济学》课程考试大纲。所列考试范围出自郑健壮、王培才主编的教材《经济学基础(第二版)》,清华大学出版社&#xff0…

React - Ant Design4.x版本安装使用,并按需引入和自定义主题

React - Ant Design4.x版本安装使用,并按需引入和自定义主题一. 安装使用 antd二.antd 高级配置安装 craco,对 create-react-app 的默认配置进行自定义自定义主题安装 babel-plugin-import ,按需加载组件代码和样式Ant Design官网…

mycat-3-实战篇

1 总结: 1:用的表必须在mycat的配置文件中配置。 2:mycat默认分片策略中,都是针对表的主键,默认是id,如果主键不是id的,请去rule.xml自己复制一份修改 3: 2 注意细讲解 1:schem…

车辆大全和车牌识别系统毕业设计,车牌识别系统设计与实现,车牌AI识别系统论文毕设作品参考

功能清单 【后台管理员功能】 系统设置:设置网站简介、关于我们、联系我们、加入我们、法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息&a…

TypeScript开启

TypeScript是什么? typescript是以JavaScript为基础构建的语言,是一个Javascript的超集,可以在任何支持JavaScript的平台中执行,typescript扩展了JavaScript,并添加了类型。 注意:ts不能被js直接解析执行&…

27个超实用Chrome DevTools 调试技巧 source 全局搜索(持续更新)

谷歌开发者工具提供了一系列的功能来帮助开发者高效 Debug 网页应用,让他们可以更快地查找和修复 bug。在谷歌的开发者工具中,有非常多有用的小工具,但是很多开发者并不知道。通过这篇文章,我把我常用的那些高效 Debug 的 Chrome …

大数据(9f)Flink双流JOIN

文章目录概述开发环境使用状态列表实现 INNER JOIN(双流connect后CoProcessFunction)基于间隔的JOIN(Interval Join)基于窗口的JOIN(Window Join)概述 Flink双流JOIN可用算子或SQL实现,FlinkSQ…

Flutter 5 大本地数据库解决方案

Flutter 5 大本地数据库解决方案 原文 https://levelup.gitconnected.com/top-5-local-database-solutions-for-flutter-development-6351cd494070 前言 这里列出了最流行的数据库解决方案以及代码示例。 选择正确的数据管理系统对于提高效率和可 extension 性以及影响可用性和…

PyQt5学习笔记--摄像头实时视频展示、多线程处理、视频编解码

目录 1--前言 2--基于Qt Designer设计ui文件 3--视频的编解码操作 4--完整代码 5--结果展示 6--存在的问题 7--参考 1--前言 ① 创建两个线程,主线程为ui线程,子线程用于读取摄像头视频,将处理后的图像帧数据(处理操作可以…

JDBC操作数据库实现增、删、查、改

0.JDBC概念 实际开发中,手动的输入SQL语句是少之又少,大多数情况下是通过编译代码进行来控制自动执行. 具体操作如下: 上述展示有一个【自己写的Mysql客户端】,这种操作是非常容易的,因为各种数据库本身就提供一系列的API,可以让用户很方便…

内存一致性,指令重排序,内存屏障,volatile解析

文章目录为什么会存在“内存可见性”问题重排序与内存可见性的关系as-if-serial语义单线程程序的重排序规则多线程程序的重排序规则happen-before是什么解决方案:内存屏障Volatile关键字解决内存可见性问题的实现原理为什么会存在“内存可见性”问题 下图为x86架构…

如何利用快解析远程访问家庭智能网关

随着家庭宽带用户的暴增,涌现出了许多连接家居设备和控制中心的产品,如家庭智能网关。家庭智能网关是家居智能化的心脏,通过它实现系统的信息采集、信息输入、信息输出、集中控制、远程控制、联动控制等功能。 ​ 智能家庭网关具备智能家居控…

3D-SKIPDENSESEG医学图像分割

蓝色三角、黄色三角、红色三角相对应。 得到第三个feature map,反卷积会恢复到原来的尺寸 Dense block,通道增加了 Transition,池化 用正则表达式把里面的h5文件匹配一下吧 os.path.join()把两个部分的路径拼一下 root_path —data_train *.…

day13_面向对象的三大特征之一(封装)

封装概述 为什么需要封装? 现实生活中,每一个个体与个体之间是有边界的,每一个团体与团体之间是有边界的,而同一个个体、团体内部的信息是互通的,只是对外有所隐瞒。例如:我们使用的电脑,内部…