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


    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
    🍎个人主页:海神之光
    🏆代码获取方式:
    海神之光Matlab王者学习之路—代码获取方式
    ⛳️座右铭:行百里者,半于九十。

    更多Matlab仿真内容点击👇
    Matlab图像处理(进阶版)
    路径规划(Matlab)
    神经网络预测与分类(Matlab)
    优化求解(Matlab)
    语音处理(Matlab)
    信号处理(Matlab)
    车间调度(Matlab)

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

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

    🍅 仿真咨询
    1 各类智能优化算法改进及应用

    生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

    2 机器学习和深度学习方面
    卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

    3 图像处理方面
    图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

    4 路径规划方面
    旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

    5 无人机应用方面
    无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

    6 无线传感器定位及布局方面
    传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

    7 信号处理方面
    信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

    8 电力系统方面
    微电网优化、无功优化、配电网重构、储能配置

    9 元胞自动机方面
    交通流 人群疏散 病毒扩散 晶体生长

    10 雷达方面
    卡尔曼滤波跟踪、航迹关联、航迹融合

  • 相关阅读:
    IDEA远程连接服务器Java程序进行断点调试(对Docker中Tomcat容器,jar,Tomcat的远程调试看这篇就够了)
    ECCV 2022|文本图像分析领域再起波澜,波士顿大学联合MIT和谷歌提出全新多模态新闻数据集NewsStories
    J2EE基础:maven(1)
    61-Java-分布式开发框架Dubbo
    Azure - 自动化机器学习AutoML Azure使用详解
    我的网站每个月给我带来了6W美元收入
    矩阵分析与应用+张贤达
    Java学习笔记3.11.1 垃圾回收 - 垃圾回收的作用
    Spring Security—OAuth 2.0 资源服务器的多租户
    铁威马NAS如何开启二次验证提高系统安全性
  • 原文地址:https://blog.csdn.net/TIQCmatlab/article/details/128069266