1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab遗传算法外卖配送优化(新的约束条件)【matlab优化算法十六】

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

时间:2023-04-25 20:57:08

相关推荐

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

模型

问题假设

在外卖配送过程中,会出现很多种不确定情况导致配送时间的浪费,如配送过程中物品损伤,如果配送车辆装载过多,会导致物品挤压破损;当天天气情况的不稳定导致配送不及时;某交通路段发生交通事故等不可人为控制的情况。为了减少外部因素对本次配送路径优化的影响,针对外卖配送过程中出现上述所描述的情况进行如下问题假设:

(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个配送员是否需要接受惩罚

clearclcclose alltic%% 用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; %染色体长度=顾客数目+车辆最多使用数目-1n=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 onxlim([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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。