模型

问题假设
在外卖配送过程中,会出现很多种不确定情况导致配送时间的浪费,如配送过程中物品损伤,如果配送车辆装载过多,会导致物品挤压破损;当天天气情况的不稳定导致配送不及时;某交通路段发生交通事故等不可人为控制的情况。为了减少外部因素对本次配送路径优化的影响,针对外卖配送过程中出现上述所描述的情况进行如下问题假设:
(1)一个客户的订单只能由一个配送员配送,且配送员接受一个订单后,先完成该订单才能接另一个客户订单。
(2)每条送餐路径的配送时间小于配送车辆的最大行驶时间。
(3)忽略天气、车祸、配送车辆行驶过程中无法使用等不可控的外界因素。
(4)确保每辆车从配送中心出发,完成配送任务后,最终返回到配送中心。
(5)每个客户仅能服务配送一次。
(6)由于配送车辆在行驶过程中的速度是不可控的,为了可以方便计算路线规划效果,将行驶速度规定为某个固定值。
2.2模型参数
模型主要参数如下:
N = {O}∪N+∪N-:表示所有节点的集合,包括配送中心(O),n个订单中所有餐馆的集合N +以及所有客户的集合N-;
A = { (i,j) | i ∈ N , j ∈ N} : 表示所有弧的集合
R:表示订单集合
其中订单 r = (pr,dr),pr∈N+,dr∈N-
K:配送车辆数;
L:配送车辆最大行驶里程限制
Zrk:表示将订单分派给车辆k时为1,否则为0
Xijk:表示第k辆车从结点i行驶到结点j时为1,否则为0
v: 表示配送速度
dij =|xi-xj|+|yi-yj|:表示两点之间的距离
tij:表示结点i到结点j之间的行驶的时间
C1:单位距离成本(KM)
C2:单位惩罚成本(min)
Wi:配送员在节点i的停留时间
Tick:第k个配送员没有在规定时间到达节点i时受到的惩罚时间
Li:节点i的最晚服务时间
Ti:配送员到达节点i的时间
2.3模型建立
针对本论文的目标,建立如下的模型:
Min Z = ∑k∈K(∑i∈N∑j∈NC1dijXijk) + ∑k∈K (C2 * ∑i∈N Tick) (1)
s.t.
∑k∈K Zrk =1,∀r∈R (2)
确保每一张订单有且只由一辆车来完成

Zrk=∑i∈N Xi(pr)k=X(pr)(dr)k=∑j∈N X (dr)jk ∀k∈K (3)
确保每个订单都能被选中的车进行正确服务

∑k∈K∑j∈N Xijk=1,∀i∈N+∪N- (4)
确保每个结点最多被一辆车访问一次

∑j∈N Xo+jk=∑i∈N Xio-k<= 1,∀k∈K (5)
确保每辆车从配送中心出发,并最终返回到配送中心
可以为0或者1,如果是0说明这辆车没有被使用

∑i∈N Xihk - ∑j∈N Xhjk = 0, ∀k∈K,∀h∈N (6)
确保车辆到达一个结点(非配送中心结点),一定会从该结点离开

∑ Xijk * dij ≦ L ,∀k∈K,∀i∈N,∀j∈N (7)
车辆最大行驶里程约束

∑k∈K∑j∈N Xo+jk ≦ K (8)
确保分派出去的配送员数量小于配送员总数

Ti+Wi+tij = Tj ,∀i∈N,∀j∈N (9)
表示配送员从当前节点行驶到下一节点时,到达下一节点的时间为到达前节点的时间、在前节点停留时间和行驶时间之和

T_ick = {█(T_i - L_(i ),T_i - L_(i )>0@0,其他)┤ (10)
表示判断第k个配送员是否需要接受惩罚

clear
clc
close all
tic
%% 用importdata这个函数来读取文件
% shuju=importdata('cc101.txt');
load('zdz');
shuju=c101;
% bl=importdata('103.txt');
bl=0;
cap=20;                                                        %车辆最大装载量
%% 提取数据信息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=dist./1000;                                               %实际城市间的距离
dist=squareform(h);                                             %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
%% 遗传算法参数设置
alpha=100000;                                                       %违反的容量约束的惩罚函数系数
belta=900;       %违反晚到时间窗约束的惩罚函数系数
belta2=60;%违反早到时间窗约束的惩罚函数系数
chesu=100;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('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
%% 优化
gen=1;
figure;
hold on;box on
xlim([0,MAXGEN])
title('优化过程')
xlabel('代数')
ylabel('最优值')
ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,nn);             %计算种群目标函数值
preObjV=min(ObjV);
while gen<=MAXGEN%% 计算适应度ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,nn);             %计算种群目标函数值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,belta2,chesu,bl);%% 重插入子代的新种群Chrom=Reins(Chrom,SelCh,ObjV);%% 删除种群中重复个体,并补齐删除的个体
%     Chrom=deal_Repeat(Chrom);%% 打印当前最优解ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,nn);             %计算种群目标函数值[minObjV,minInd]=min(ObjV);disp(['第',num2str(gen),'代最优解:'])[bestVC,bestNV,bestTD]=decode(Chrom(minInd(1),:),cusnum,cap,demands,a,b,L,s,dist,chesu,bl,nn);disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD)]);fprintf('\n')%% 更新迭代次数gen=gen+1 ;
end
%% 画出最优解的路线图
ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl,nn);             %计算种群目标函数值
[minObjV,minInd]=min(ObjV);
%% 输出最优解的路线和总距离
disp('最优解:')
bestChrom=Chrom(minInd(1),:);
[bestVC,bestNV,bestTD]=decode(bestChrom,cusnum,cap,demands,a,b,L,s,dist,chesu,bl,nn);
disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD)]);
disp('-------------------------------------------------------------')%% 画出最终路线图
draw_Best(bestVC,zuobiao,nn);
% save c101.mat
% toc

如需帮助V:zhangshu2274

matlab遗传算法外卖配送优化(新的约束条件)【matlab优化算法十六】相关推荐

  1. 【生产优化】基于matlab遗传算法求解帐篷工序问题【含Matlab源码 2145期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [生产优化]基于matlab遗传算法求解帐篷工序问题[含Matlab源码 2145期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  2. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  3. matlab求解外卖配送路径优化

    模型限制条件 1.先取后送 2.多骑手 3.载重限制 如需帮助请私聊 tic clear clc %% 用importdata这个函数来读取文件 data=importdata('data3.mat' ...

  4. 【GA三维路径规划】基于matlab遗传算法无人机三维路径规划【含Matlab源码 1268期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  5. 【GA三维路径规划】基于matlab遗传算法无人机三维路径规划【含Matlab源码 1526期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  6. 【无人机编队规划】基于matlab遗传算法无人机编队位置规划【含Matlab源码 1987期】

    ⛄一.遗传操作简介 1 选择 由于遗传操作只在邻居之间进行, 对于每一个中心元胞, 只在它的邻居元胞内选择个体遗传到下一代.在此, 使用轮盘赌的方式进行个体选择, 对于每一个邻居元胞内的个体, 分别计 ...

  7. ga tsp matlab,遗传算法(GA)求解TSP问题MATLAB程序

    本程序求解常见的组合优化问题TSP问题,如果仅仅是用一个程序去求解一个优化问题,显然这样的工作意义并不大.主要是因为求解的好坏往往是很难评价的,另外尤其对于遗传算法来说,遗传算法交叉 变异方法不同,交 ...

  8. Matlab遗传算法与TSP问题的结合

    Matlab遗传算法与TSP问题的结合 目录 Matlab遗传算法与TSP问题的结合 准备 遗传算法+TSP问题 TSP问题 邻接矩阵 遗传算法 种群初始化和计算初始种群适应度 计算适应度 个体选择 ...

  9. 人工智能算法在外卖配送系统中的应用和前景

    随着人们对于外卖服务需求的增加,外卖配送系统的效率和精确度成为了重要的考虑因素.而人工智能算法的出现,则为外卖配送系统提供了更好的解决方案. 一.应用场景 1.1 路线规划 在外卖配送过程中,路线的规 ...

最新文章

  1. jupyter读取图片并展示的两种方法
  2. 借助C/C++进行Android开发:NDK的配置与使用
  3. .net页面数据传递
  4. 【数据平台】pandas将一列中的文本拆分成多行
  5. html通过php获取mysql数据_怎样借助PHP从HTML网页中获取phpmyadmin数据库里数据表的内容...
  6. [MATLAB学习笔记]matlab结构体A.B
  7. VTK:PolyData之ImplicitSelectionLoop
  8. pytorch | transpose、permute、view、contiguous、is_contiguous、reshape
  9. SQL统计指定的一列多少种取值
  10. 日本画风超级“诡异”毕业典礼上线,网友:有被吓到,谢谢!
  11. JQuery实现广告效果(滚动切换)
  12. pycharm 怎么快速生成文件夹结构_为什么Python代码能运行但是PyCharm给我画红线?...
  13. redis 公网 安全_请务必注意 Redis 安全配置,否则将导致轻松被入侵
  14. nginx 负载均衡+keepalived实现双机热备
  15. 写一个Windows上的守护进程(7)捕获异常并生成dump
  16. PGM:部分有向模型之条件随机场与链图模型
  17. MVC3升级到MVC4模型验证信息显示为英文问题及解决方案
  18. 双鉴探测器是哪两种探测方式结合_报警的基本知识
  19. VL1_四选一多路器(完整RTL、Testbench和覆盖率)
  20. 汉语言文学如何利用计算机思维,计算机在应用于汉语言文学时产生的优势与局限.PDF...

热门文章

  1. 计算机win10分区软件,简单易用的win10分区软件:分区助手
  2. ZYNQ入门,EBAZ4205开发平台从头开始搭建
  3. mysql 1273错误
  4. html页面表格字体,如何在移动设备html页面的表格单元格中设置相同的字体大小...
  5. golang 内存管理
  6. AHRS和INS的区别
  7. Android中Fragment的分屏显示处理横竖屏显示
  8. 计算机机械硬盘系统安装,电脑硬盘安装图解,机械硬盘安装-
  9. pad看linux源码,在 iPad和 iPhone的浏览器上查看网页源代码
  10. 高德离线地图瓦片坐标偏移纠偏