matlab多目标遗传算法ga工具箱_修改GA_VRP程序求解其他的车辆路径问题

87983903d012e8aa7ac853cf37e49607.png

导语:基本的车辆路径问题在前文已经进行了问题分析,并采用Matlab编程实现了求解基本车辆路径问题的遗传算法(GA_VRP),相信大家已经掌握了如何编程求解基本的遗传算法(详见文章https://zhuanlan.zhihu.com/p/125779424)。但实际中的车辆路径问题较为复杂,约束条件和优化目标往往不同,需要在GA_VRP程序上进行修改,满足你的车辆路径问题的所有约束条件,并更换优化目标。

一、如何修改现有的GA_VRP程序来求解你的车辆路径问题呢?

  1. 遗传操作。遗传算法仍采用整数编码,交叉操作、变异操作、选择操作因为是在染色体层面通过一系列方法产生新解,不涉及到问题的约束条件和优化目标,因此上述操作仍可不进行修改。
  2. 约束条件。基本的车辆路径问题的约束条件为:(1)每条配送路径上各客户的需求量之和不超过配送车辆的载重量;(2)每条配送路径的长度不超过配送车辆一次配送的最大行驶距离;(3)每个客户的需求必须满足,且只能由一台配送车辆送货。你的车辆路径问题(以下简称新VRP问题)在满足上述约束条件外,可能还存在其他新的约束条件,比如客户的服务时间窗约束、工作时间约束等,该部分内容体现在解码操作中,可以根据新VRP问题的约束条件逐项进行修改。
  3. 计算目标值。根据新VRP问题给定的优化目标进行编程,一般需要修改解码操作来配合完成,遗传算法的优化思想就是根据目标值的优劣来进行优胜劣汰,目标值的计算对算法优化方向的影响较大。

二、手把手教你实现求解新VRP问题的遗传算法?

前段时间收到某位知友的私信,详细描述了他需要求解的问题(详见下图),可以清楚的看到该问题就是一种车辆路径问题,但又与基本的车辆路径问题存在差异,不能直接在GA_VRP算法中代入问题数据进行求解,而是需要对GA_VRP算法做一定的修改。现在我们手上有求解基本车辆路径问题的遗传算法Matlab代码及新VRP问题,那么我们如何下手呢?

17a4762f4f43316cb447a9cc4fd25d10.png

a8d83c4cf972d262c9fb37e91006497f.png
  • 问题1:需要从1个仓库出发将食品运至19个销售点,车辆载重量为6吨,车辆每日工作4小时
  • 分析1:车辆从1个物流中心运输货物到19个客户,编码方式仍采用整数编码,遗传算法的1条染色体为客户编号1-19的一种排列,需要在程序中修改客户数量【Customer_num=19】,将问题数据进行更新:1、物流中心到客户间的距离【X】;2、客户的需求【Demand】;3、车辆容量【capacity_max=6】;4、车辆数量【car_num】未给定,该变量取消。
  • 问题2:假定街道方向均为平行于坐标轴,任意两站点间都可以通过一次拐弯到达。
  • 分析2:题目中给定了各客户的横纵坐标【coordinate】,需要计算各客户间的距离【D】;车辆的行驶距离为两坐标点的曼哈顿距离,标明两个点在标准坐标系上的绝对轴距总和:d(i,j)=|xi-xj|+|yi-yj|。

abea5cd5753dd6e929af7d76192aa740.png
红色为曼哈顿距离、绿色为欧式距离

代码:

function
  • 问题3:每天车每日工作4小时,运输车平均速度为50公里/小时,每个销售点需要5分钟的卸货时间
  • 分析3:本题中未直接说明车辆的最大行驶距离,而是给定了车辆每日的工作时长4小时【distance_max=4】;GA_VRP算法中解码操作需要判断车辆是否满足车辆容量约束及车辆行驶距离约束,而本题需要将最大行驶距离约束更改为车辆工作时长约束,因此需要修改子函数:解码操作<decode>。将每辆车的行驶距离修改车辆工作时间a2=行驶时间+卸货时间。

代码:

a2
  • 问题4:运输车载货运费2元/(吨·距离),空载费用0.4元/公里
  • 分析4:优化目标为运输费用最小,需要进行分段计算,假设1条运输路径为【0-9-1-3-0】,则该车辆从物流中心需要载满客户9/1/3需要的货物量【5.4】:

备注:客户的需求量【Demand】/客户间的距离【D】/物流中心到客户间的距离【X】)


①路径0-9的费用=(车辆满载的货物量)*(0-8的距离)*(车辆载货的单价)=5.4*8*2=86.4元;

②路径9-1的费用=(车辆在客户9卸货后剩余的货物量)*(9-1的距离)*(车辆载货的单价)=(5.4-1.4)*7*2=56元;

③路径1-3的费用=(车辆在客户1卸货后剩余的货物量)*(1-3的距离)*(车辆载货的单价)=(5.4-1.4-2.5)*4*2=12

④路径3-0的费用(车辆在客户3卸货后为空载)=(3-0的距离)*(车辆空载的单价)=11*0.4=4.4元。

该趟运输【0-9-1-3-0】的总费用=86.4+56+12+4.4=158.8元。


根据以上思路编写子函数:计算目标值程序<parameter>。

主函数<GA_VRP_1>设置问题的数据信息与遗传算法的参数,其他内容不需要更改,子函数<decode>/<parameter>需要修改,增加子函数<Distance>计算客户间的曼哈顿距离。通过遗传算法求解该车辆路径问题(GA_VRP_1)得到最优解为【7-4-2-5-9-1-3-6-11-12-13-19-14-8-10-15-16-18-17】,运输费用最小为【856.2】,解码操作得到的车辆路径为【0-7-4-2-5-0】、【0-9-1-3-0】、【0-6-11-12-0】、【0-13-19-14-0】、【0-8-10-0】、【0-15-16-18-0】、【0-17-0】。

本文在求解基本车辆路径问题的遗传算法基础上,结合题目的约束条件和优化目标,修改现有的GA_VRP程序来求解其他的车辆路径问题(GA_VRP_1算法,已上传至公众号:【智能优化算法】)。【以上内容仅供交流,于2020年5月16日】


如有疑问请及时交流,后面我也会将大家的疑问整理出来,或者有更好的建议也请提给我,最后谢谢大家阅读。欢迎大家关注微信公众号:【智能优化算法】,也是希望能有一个平台分享优化算法,希望能得到大家的关注。有问题及时私信我,我尽可能及时回复,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值