![b794bdbd0e4b2fcaf66c3ff46ff63adf.png](https://i-blog.csdnimg.cn/blog_migrate/a32430c8259db66918a0641057ba3a36.png)
【导语】车辆路径问题是经典的组合优化问题,通过学习如何编写求解该问题的智能优化算法,可以将该求解思路扩展到类似的组合优化问题,帮助大家更好的理解组合优化问题的求解过程。
1、遗传算法(GA_VRP)求解基本的车辆路径问题,详见文章https://zhuanlan.zhihu.com/p/125779424,Matlab代码链接已上传至【智能优化算法】公众号。
2、考虑到实际中的车辆路径问题较为复杂,约束条件和优化目标往往不同,需要在GA_VRP程序上进行修改,满足你的车辆路径问题的所有约束条件,并更换优化目标。以知友提供的某食品厂配送案例为例(19个客户),采用单车型(最大载重为6吨)车辆进行配送,优化目标为运输成本最低,包括了空载的运输成本及载重的运输成本,修改现有的遗传算法求解该车辆路径问题(GA_VRP_1算法),详见知乎文章https://zhuanlan.zhihu.com/p/141369039,Matlab代码链接已上传至【智能优化算法】公众号。
3、知友提供的某食品厂配送案例第二问题涉及到4吨车辆、6吨车辆两种车型,空载费用分别为0.2吨/公里、0.4吨/公里,其他条件与第一问相同,该如何制定调度方案,确定两种车型的数量及配送路线,使得整个的运输成本最低?
![5af369988147547fd247885d010393d6.png](https://i-blog.csdnimg.cn/blog_migrate/e4657780fea68957c700780896b8461a.jpeg)
一、多车型车辆路径问题
现代物流配送过程中,配送货物种类繁多,配送量增大,使得车型不再是单一的,车辆类型倾向于多样化,这对车辆路线优化提出了新的要求。而在一般车辆路径问题中,通常将为顾客点进行配送任务的车辆假设成具有相同的特征,即具有相同的装载能力、最大行驶距离、固定成本等属性,这与实际问题明显存在着差异。因此多车型车辆路径问题不仅符合实践,而且也是对一般车辆路径问题的拓展,丰富了车辆路径问题理论研究。
多车型车辆路径问题的其他约束条件与基本的车辆路径问题一致,区别在于基本的车辆路径问题将实际问题简化为同一型号的车辆,而多车型车辆路径问题有不同型号的车辆,其最大运载量、最大行驶路程、车辆费用等方面不同。
二、遗传算法求解多车型车辆路径问题
本文求解多车型车辆路径问题的遗传算法是在知乎文章https://zhuanlan.zhihu.com/p/141369039中GA_VRP_1算法基础上修改而来,主要对解码操作、计算目标值函数2个子函数进行修改,满足第二问多车型车辆路径问题的约束条件,同时相应修改了部分主函数代码。
1、遗传操作
为减少工作量,采用模块化编程思想,尽量不修改遗传操作的各子函数,因此仍采用整数编码,交叉操作、变异操作、选择操作因为是在染色体层面通过一系列方法产生新解,不涉及到问题的约束条件和优化目标,因此上述操作的子函数不需要修改。
2、约束条件
基本的车辆路径问题的约束条件为:(1)每条配送路径上各客户的需求量之和不超过配送车辆的载重量;(2)每条配送路径的长度不超过配送车辆一次配送的最大行驶距离;(3)每个客户的需求必须满足,且只能由一台配送车辆送货。
知友案例的约束条件包括①车辆每日的工作时长4小时,该约束在已知车辆的行驶速度时是车辆最大行驶距离约束的等价约束,包括车辆行驶时间和在客户点的卸货时间;②不同车型的最大载重量不同。
3、计算目标值
不同车型的空载费用不同,因此在计算目标值时需要确定车辆的型号,再根据对应的空载费用进行计算。
三、编写GA_MCVRP程序
1、解码操作
因该问题中包含最大载重量4吨/6吨两种车型,需要在第一问GA_VRP_1算法基础上对解码操作进行修改。
本文解码操作的主要思想为,分别安排4吨、6吨车辆进行配送,在满足最大载重量及行驶时间约束前提下,计算在同一配送路径上两种车型的实际运载量,选择实际运载量接近各自车型最大载重量(即闲置载量最低)的车辆进行配送。比如某一配送路径已经确定,若选择4吨车,车辆路径为[7-6],则4吨车的实际运载量为2.5吨,闲置载量=4-2.5=1.5吨;若选择6吨车,车辆路径为[7-6-11],则6吨车的实际运载量为5吨,闲置载量=6-5=1吨;因此为减少车辆的配送次数,降低车辆空载运输成本,因此选择6吨车进行配送。
Matlab编码需要分别根据4吨车/6吨车的最大载重量、车辆运行时间等两条约束进行分段解码,比较两个车型的空载量,选择空载量低的车型,再根据车辆路径中客户编号依次循环解码,具体操作详见解码子函数【decode_MCVRP】。
2、计算目标值
优化目标为运输费用最小,需要进行分段计算,因不同车型的运输费用仅为车辆空载时不同,4吨车空载的费用为0.2元/公里,6吨车空载的费用为0.4元/公里,因此在编写计算目标值子函数【parameter_MCVRP】时,从客户点到客户点的运输费用计算公式不变,仅仅需要判断空载段是哪种车型,空载费用=空载运输距离*不同车型单位距离的空载费用。
3、主函数
设置问题的数据信息与遗传算法的参数,将解码子函数【decode_MCVRP】、计算目标值子函数【parameter_MCVRP】的输入参数进行调整,其他部分不需要修改,点击运行即可求出多车型车辆路径问题的最优路径,再对该最优路径执行一次解码操作【decode_MCVRP】,参见文章【如何将遗传算法的染色体映射为车辆路径问题的解 - 南柯一梦的文章 - 知乎https://zhuanlan.zhihu.com/p/149503847】,最终求得此次运输费用最低的车辆调度方案。
四、优化结果
通过遗传算法求解多车型车辆路径问题(GA_MCVRP)得到最优路径为【13-19-14-11-12-8-1-4-6-5-7-2-9-3-10-17-15-16-18】,解码操作得到的车辆调度方案为:
- 4吨车【0-13-19-14-0】
- 4吨车【0-11-12-0】
- 6吨车【0-8-1-0】
- 4吨车【0-4-6-5-0】
- 4吨车【0-7-2-0】
- 4吨车【0-9-3-0】
- 4吨车【0-10-17-0】
- 4吨车【0-15-16-0】
- 4吨车【0-18-0】
4吨车共计8趟次、6吨车1趟次,运输费用最小为【849.2元】。
![b650df95edcfcbe8c9e98f301ba0e680.png](https://i-blog.csdnimg.cn/blog_migrate/cd2bc8ccbbb4d6adc3ab97f7df3393a0.jpeg)
本文在求解单车型车辆路径问题的遗传算法基础上,修改现有的GA_VRP程序来求解多车型车辆路径问题(GA_MCVRP算法,已上传至公众号:【智能优化算法】)。【以上内容仅供交流,于2020年11月28日】
如有疑问请及时交流,后面我也会将大家的疑问整理出来,或者有更好的建议也请提给我,最后谢谢大家阅读。欢迎大家关注微信公众号:【智能优化算法】,也是希望能有一个平台分享优化算法,希望能得到大家的关注。有问题及时私信我,我尽可能及时回复,谢谢大家。