【路径规划】基于遗传算法求解带时间窗多电动车充电路径规划问题附matlab代码

 1 简介

电动车在物流领域中取代燃油车是一个广泛的发展趋势.但电动车的电池利用率低,充电时间长,相关充电配套设施建设不完善,存在"续驶里程焦虑"等现象成为了电动车推广和应用的重要制约因素,也是一般路径规划模型不适用于电动车的原因.因此,针对电动车的特性研究路径规划问题具有重要的理论研究价值和实用价值.此外,现有的电动车路径规划研究中关于电量消耗模型的构建,大多假设与速度和载重无关.但是,电动车的实际行驶效果和理论研究表明,速度和载重对电动车的电量消耗具有显著的非线性影响,行驶速度每增加或减少10km/h,单位里程电量消耗量变化10%以上,而车辆载重每增加或减少100kg,单位里程电量消耗平均变化约4.2%,这些影响是不可忽略的,在研究路径规划时需加以考虑.本文基于速度和载重对电量消耗的非线性影响以及客户时间窗,车辆载重及电量的约束,以最小化电动车启动成本,充电成本,总行驶里程成本和总时间惩罚成本为目标函数,构建了基于非线性电量消耗的电动车路径规划模型,并采用遗传算法算法分别对问题求解,综合比较选择更优的路径规划结果.​

2 部分代码
clear
clc
close all
tic
%% 用importdata这个函数来读取文件
load('c101');
shuju=c101;
bl=0;
cap=6;                                                        %车辆最大装载量
%% 提取数据信息
E=shuju(1,5);                                                    %配送中心时间窗开始时间
L=shuju(1,6);                                                    %配送中心时间窗结束时间
zuobiao=shuju(:,2:3);                                       %所有点的坐标x和y
customer=zuobiao(2:end-4,:);                                       %顾客坐标
cusnum=size(customer,1);                                         %顾客数
v_num=5;                                                        %车辆最多使用数目
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=squareform(h);    
dist=dist;%距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
%% 遗传算法参数设置
alpha=100000;                                                       %违反的容量约束的惩罚函数系数
belta=15;%违反时间窗约束的惩罚函数系数
belta2=10;%违反系数
chesu=50;
NIND=300;                                                       %种群大小
MAXGEN=500;                                                     %迭代次数
Pc=0.9;                                                         %交叉概率
Pm=0.05;                                                        %变异概率
GGAP=0.9;                                                       %代沟(Generation gap)
N=cusnum+v_num-1;                                %染色体长度=顾客数目+车辆最多使用数目-1
%% 初始化种群
Chrom=InitPopCW(NIND,N,cusnum,a,demands,cap);     %构造初始解
%% 输出随机解的路线和总距离
disp('初始种群中的一个随机值:')
[VC,NV,TD,VCC,GS]=decode(Chrom(1,:),cusnum,cap,demands,a,b,L,s,dist,chesu,bl);
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);             %计算种群目标函数值
preObjV=min(ObjV);
while gen<=MAXGEN
    %% 计算适应度
    ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl);             %计算种群目标函数值
    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,v_num);
    %% 变异
    SelCh=Mutate(SelCh,Pm);
    %% 重插入子代的新种群
    Chrom=Reins(Chrom,SelCh,ObjV);
    %% 打印当前最优解
    ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl);             %计算种群目标函数值
    [minObjV,minInd]=min(ObjV);
    disp(['第',num2str(gen),'代最优解:'])
    [bestVC,bestNV,bestTD,bestVCC,bestGS]=decode(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(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl);             %计算种群目标函数值
[minObjV,minInd]=min(ObjV);
%% 输出最优解的路线和总距离
disp('最优解:')
bestChrom=Chrom(minInd(1),:);
[bestVC,bestNV,bestTD,bestVCC,bestGS]=decode(bestChrom,cusnum,cap,demands,a,b,L,s,dist,chesu,bl);
[sumTD,everyTD,n]=travel_distance(bestVCC,dist);
disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD)]);
disp('-------------------------------------------------------------')
[cost]=costFuction(bestVC,a,b,s,L,dist,demands,cap,alpha,belta,belta2,chesu,bl,bestGS);
%% 画出最终路线图
draw_Best(bestVCC,zuobiao);


%% 计算每辆车配送路线上在各个点开始服务的时间,还计算返回集配中心时间
%输入vehicles_customer:       每辆车所经过的顾客
%输入a:                       最早开始服务的时间窗
%输入s:                       对每个点的服务时间
%输入dist:                    距离矩阵
%输出bsv:                     每辆车配送路线上在各个点开始服务的时间,还计算返回集配中心时间

function bsv= begin_s_v( vehicles_customer,a,s,dist,chesu,bl )
n=size(vehicles_customer,1);
bsv=cell(n,1);
for i=1:n
    route=vehicles_customer{i};
    [bs,back]= begin_s( route,a,s,dist,chesu,bl);
    %%  bs为对每个客户开始服务的开始时间     back返回配送中心的时间
    bsv{i}=[bs,back];
    %% 所有车 bs为对每个客户开始服务的开始时间     back返回配送中心的时间
end
end

3 仿真结果

4 参考文献

[1]谭学怡. 基于重量与速度的非线性电量消耗的电动车配送路径规划研究. 华南理工大学, 2019.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
鲸鱼算法是一种模拟鲸鱼集群捕食行为的优化算法,具有全局搜索、性能稳定等优点。而在车辆路径问题中,时间的开放式问题更加复杂,需要考虑时间限制以及车辆的容量等多个约束条件。 基于matlab鲸鱼算法求解时间开放式车辆路径问题,首先需要确定问题的目标函数以及各个约束条件。目标函数可以设定为最小化总路程或最小化总时间等,约束条件包括时间、容量、出发点和到达点等。 然后,可以利用matlab编写求解程序,采用鲸鱼算法进行全局搜索。具体来说,可以将路线规划问题转化为一个优化问题,使用遗传算法或粒子群算法等优化算法进行求解,同时考虑各个约束条件。 在程序中,可以使用矩阵存储车辆的容量、位置、时间等信息,采用突变、选择、交叉等操作进行遗传变异。在每次迭代中,根据当前种群中每个个体的适应度值对其进行排序,以选择较优的个体进行交叉和变异,从而逐渐优化解决方案。同时,可以设置停止迭代的条件,以保证程序的效率。 最后,需要对求解结果进行评估,并进行可视化展示。评估可以使用各种准则进行,如各辆车的路程、总路程、服务时间等指标。可视化可以使用matlab中的绘图工具进行展示,包括路线图、车辆调度图等。 总之,基于matlab鲸鱼算法求解时间开放式车辆路径问题,需要深刻理解问题本质,熟练掌握编程技能,对算法进行适当优化,并进行评估和可视化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值