一、问题概述

随着电动汽车环保和购买使用的经济性,越来越普及到社会生产和生活中,也逐渐成为了科研研究的一大热点。主要包括电动汽车的充换电问题,充电桩换电站选址定容问题,路径规划问题等等。今天,我们主要谈一下电动汽车的路径规划问题。

燃油车的路径规划问题从最简单的TSP问题被提出和解决,演变到VRP问题,以及VRP问题的各种复杂情况,带时间窗的,静态的,动态的等等,不一而论。而电动汽车的路径规划问题因单次行驶里程不长以及充换电消耗路程和时间,成为其路径规划不得不考虑的重要约束条件,其复杂性也体现在此。下面我将重点讨论带时间窗的充电电动汽车的路径规划的求解思路和算法流程。

二、目标函数

首先,带时间窗的充电式电动汽车的路径问题的目标函数主要为一系列成本之和最小,一般包括固定成本,运营成本,充电成本,时间窗惩罚成本等等。其他成本也可以考虑,多目标时也可计算。

三、约束条件

一般包括以下5条。

  1. 单次行驶里程约束
  2. 日最大行驶里程约束(日最大工作时长约束)
  3. 时间窗约束
  4. 载重约束

(1) 单次行驶里程约束
电动汽车满电状态下最多行驶的里程数,一般会参考设计最大行驶里程乘以一个系数求出,一般电动车辆电量降到20%时,容易怠机。因此系数可取80%。

(2) 日最大行驶里程约束(日最大工作时长约束)
为了可持续的使用以及降低车辆的保养维修费,往往每天设定车辆最大的行驶公里数,或者按照司机每天的最大工作时长进行约束。

(3) 时间窗约束
顾名思义,车辆到达配送的客户的时间要满足一定的时间窗约束,否则将会产生等待成本和惩罚成本。

(4) 载重约束
车辆配送的载货量不得超过最大载货量。

四、算法设计

此处,可选择的算法有蚁群算法、粒子群和遗传算法,比较容易实现的算法应该是遗传算法和蚁群算法。下面以遗传算法为例,讲一点干货。

  1. 染色体编码
    遗传算法求解电动汽车的路径规划问题,一般采用自然数编码,通常有随机生成和其他方法生成初始解两种。

    随机生成:通过生成的从1到N(客户数量)的随机自然数排列,表示客户的配送次序,通过载重约束和日最大行驶里程约束,将其划分为若干辆车。生成配送车辆的初始路径。

    初始解:通过最小近邻法或者最短路算法生成路程较少的客户配送次序,通过载重约束和日最大行驶里程约束,将其划分为若干辆车。生成配送车辆的初始路径。

  2. 适应度函数
    适应度函数为总成本的倒数。
    总成本的计算要计算各子成本。
    生成的初始配送路径仍然需要考虑除了载重约束、日最大行驶里程约束以外的其他两个约束。
    需要在满足两个约束的条件下,选择合适的充电桩进行充电,充电时长一般分为固定时长和非固定时长,其难度又大不一样。若为固定时长,则比较容易计算,若为非固定时长,则需要根据配送的成本倒推选择合适的充电时长。

  3. 选择
    选择算子有竞标赛,轮盘赌和精英策略三种,可适当选择一种。

  4. 交叉
    交叉算子有单点交叉,片段交叉和对称交叉等,适当选择即可,同时,要注意交叉后不可行解的复杂处理。

  5. 变异
    变异算子有交换变异和随机变异等,适当选择即可,同时,要注意变异后不可行解的复杂处理。

  6. 重组
    将子代和父代重新组合成新的种群。

  7. 最优解和可视化输出
    输出最优解,并可视化输出配送路径和迭代曲线图。

五 、 举例

(1)总成本计算代码举例:

function [Cost,costarray]=totalcost(tabu_list,n)
%% 固定成本+变动成本+充电成本+惩罚成本+环境成本PowerConsumption=27;    %百公里耗电量
ChargePrice=1.2;    %充电平均电价
F=100;      %单车固定成本
per_km=5;   %单位公里行驶成本
Chj=0.315;  %元/kg 碳排放环境成本
Hrate=0.72;     %火力发电占比;
Erate=0.94;     %电能转换系数;
Eprice=0.82;    %单位电价
SatiCost=zeros(n,1);
for i=1:nsaticost=0;Satif=cell2mat(tabu_list(i,7));Satif(Satif>1)=0;for j =1:size(Satif,1)saticost=saticost+max(0.7-Satif(j,1),0)*300;endSatiCost(i,1)=saticost;%满意度
end
fixCost=cell2mat(tabu_list(:,5))*F;  % 固定成本
runCost=per_km*cell2mat(tabu_list(:,4));
chargeCost=Eprice*PowerConsumption*cell2mat(tabu_list(:,4))/100;  % 变动成本
punishCost=cell2mat(tabu_list(:,6));                               %充电成本
envCost=PowerConsumption*cell2mat(tabu_list(:,4))/100*Erate*Hrate*Chj;  %环境成本
%Cost=fixCost + runCost + chargeCost + punishCost + envCost + SatiCost;
Cost=fixCost + runCost + chargeCost + punishCost + envCost ;costarray=[fixCost,runCost,chargeCost,punishCost,envCost,Cost];
end

(2)约束处理代码举例

function [Weight_remainder2,Max_remainder_dis2,Charge_remainder_dis2]=ThreeRestrain(current,remainder,Max_remainder_dis,Charge_remainder_dis,Weight_remainder,S)
%找到满足三约束的点:满足车载容量(<=40),剩余电量续驶里程(已行驶距离要小于7),最剩余单车日行驶里程(<=15)
% [n,B,XY,dis,tw1,tw2,Q,QQ,per_km,max_hour,v,F,P_max,P0,W,...
%     PowerConsumption,ChargePrice,s,Charge_station,D]=data();
%%
% global n B XY dis tw1 tw2 Q QQ per_km max_hour v F P_max P0 W PowerConsumption ChargePrice s Charge_station %计算选择剩余未选点后的三个状态变量
%%
n=S.n;    %客户数量
B=S.B;   %充电桩数量
NV=S.NV; %所有点的个数:客户+充电桩+1
XY=S.XY;  %所有点坐标
tw1=S.tw1 ;    %时间窗
tw2=S.tw2;W=S.W;      % 需求量
Set=S.Set;          % 服务时长
disXY=S.dpXY;   %配送中心坐标
csXY=S.csXY;   % 充电桩坐标
Charge_station=S.Charge_station;     %充电桩对应编号 22:25
dis=S.dis;
Q=S.Q;       %最大载重量
QQ=S.QQ;
per_km=S.per_km;      %单位公里行驶成本
max_hour=S.max_hour;     %一天最大行驶时长(小时)
v=S.v;     %平均车速
F=S.F;    %单车固定成本
P_max=S.P_max;     %单车日行驶里程
P0=S.P0;      %单次充电续驶里程
%
PowerConsumption=S.PowerConsumption;       %百公里耗电量
ChargePrice=S.ChargePrice;            %充电平均电价
%% Weight_remainder2=(Weight_remainder-W(remainder));
Max_remainder_dis2=Max_remainder_dis-dis(current,remainder)-dis(1,remainder);if sum(Max_remainder_dis2>=0)<length(remainder)%表示不都是第一种三约束,即存在小于0的点[rol_1,col_1]=find(Max_remainder_dis2<0);%找到第二种三约束的点[rol_2,col_2]=min(dis(remainder(col_1),Charge_station)');%找到距离最近的充电桩编号Max_remainder_dis2(col_1)=Max_remainder_dis2(col_1)+dis(1,remainder(col_1))-min(dis(remainder(col_1),Charge_station)')-dis(1,Charge_station(col_2));
endCharge_remainder_dis2=Charge_remainder_dis-dis(current,remainder)-min(dis(remainder,Charge_station)');

(3)输出结果举例

六 、总结展望

有任何问题请留言或者私信咨询,一起学习进步加油!

带时间窗的电动汽车路径规划(智能算法求解)相关推荐

  1. 【TWVRP】基于matlab遗传算法求解多车场开放式多商品带时间窗的车辆路径规划问题【含Matlab源码 1849期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  2. 【TWVRP】基于matlab模拟退火算法结合狼群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1075期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  3. 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  4. 转 | 禁忌搜索算法(Tabu Search)求解带时间窗的车辆路径规划问题详解(附Java代码)

    以下文章来源于数据魔术师 ,作者周航 欲下载本文相关的代码及算例,请关注公众号[程序猿声],后台回复[TSVRPJAVA]不包括[]即可 前言 大家好呀! 眼看这9102年都快要过去了,小编也是越来越 ...

  5. 【TWVRP】基于matlab粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  6. 【TWVRP】基于matlab蚁群算法求解带时间窗的车辆路径规划(成本最低)【含Matlab源码 2514期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  7. 【路径规划】基于粒子群算法求解带时间窗的车辆路径规划问题VRPTW模型matlab源码

    1 模型简介 将粒子群算法(PSO)应用于带时间窗车辆路径优化问题(VRPTW),构造车辆路径问题的粒子表达方法,建立了此问题的粒子群算法,并与遗传算法作了比较.实验结果表明,粒子群算法可以快速,有效 ...

  8. 【VRP问题】基于模拟退火遗传实现带时间窗的车辆路径规划问题

    模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...

  9. 【TWVRP】粒子群算法求解带时间窗的车辆路径规划问题【含Matlab源码 334期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  10. 【TWVRP】粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

最新文章

  1. linux命令关闭电脑,SELinux关闭命令详解linux操作系统 -电脑资料
  2. 如何0代码、快速定制企业级NLP模型?百度技术大咖在线解析,可报名
  3. 倾斜模型精细化处理_万能三维模型修复神奇——模方
  4. 计算机组成要素三:时序逻辑:构建计算机随机存取单元RAM及计数器PC
  5. C#2.0新特性探究之模拟泛型和内置算法
  6. 作为程序猿必须了解的生产者与消费者
  7. OSPF NSSA forwarding address   深度解析
  8. 极简桌面 android 2.3,极简桌面(手机桌面)V3.1 for android 免费版
  9. EasyStack郭长波连任OpenStack基金会独立董事
  10. vue-cli 做前端+ nodejs做服务端的 IIS部署
  11. 为什么安监控需要公网ip_为什么这些重要场所需要安装电气火灾监控系统
  12. python核心编程第13章答案
  13. 小度wifi的使用说明
  14. 【python】一键修改小米运动步数,同步微信、支付宝 运动步数
  15. win10打开视频显示服务器运行失败,apache启动失败,详细教您快速解决Win10系统apache启动失败...
  16. 多 UI 版本网页五子棋实现
  17. 35岁鹅厂员工失业后嚎啕大哭...年轻新鹅分享省钱秘诀,每月除了房租水电,其他吃喝玩乐基本白嫖公司......
  18. java graphics2d renderinghints_java - Graphics2D错误 - 堆栈内存溢出
  19. html5网页中用video标签无法播放MP4视频的解决方法
  20. LC Uniboot相比于常规的LC光纤连接器有什么特点?

热门文章

  1. MSN在线代码|QQ在线客服代码|SKYPE 贸易通在线代码
  2. shapefile文件格式转inp文件格式
  3. 中西医结合耳鼻咽喉科疾病 100254
  4. jenkins(六):Jenkins节点管理
  5. 2020 智慧城市解决方案(智慧城市系统及相关技术)
  6. Ubuntu下VSCode使用等宽字体设置
  7. 基于springboot房屋租赁管理系统 (源代码+数据库)
  8. CAD中级的考证费用是多少?
  9. 什么是NP完全问题?
  10. 华为安装gsm框架_华为Mate20手机怎么下载安装谷歌服务助手,GMS框架安装教程