01 代码使用方法


解压压缩包后,在MATLAB中找到解压文件夹,双击并打开PSO_VRPTW.m文件,点击运行此文件。
比如说我是将压缩包PSO求解VRPTW代码(微信公众号:优化算法交流地).zip放在桌面上,其次将该文件夹解压至桌面,然后在MATLAB中找到该文件夹路径,双击打开PSO_VRPTW.m文件即可运行代码。

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java


代码中使用的算例依然是solomon测试算例(公众号后台回复solomon,即可提取数据集),其中以r101算例为例为各位讲解一下r101.txt文件中的数据代表什么含义。

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java_02


这个文件中的数据实际上分为两部分:

1)VEHICLE数据,即配送车辆数据;

2)CUSTOMER数据,即顾客数据。


首先来看VEHICLE数据NUMBER表示车辆最大使用数目,即在r101算例中车辆最大使用数目为25CAPACITY表示每辆车的最大装载量,即在r101算例中每辆车的最大装载量为200;


其次看CUSTOMER数据CUST NO.表示顾客序号,即为第1列数据含义;XCOORD.表示顾客横坐标即为第2列数据含义;YCOORD.表示顾客纵坐标,即为第3列数据含义;DEMAND表示顾客需求量,即为第4列数据含义;READY TIME表示顾客左时间窗,即为第5列数据含义;DUE DATE表示顾客右时间窗,即为第6列数据含义;SERVICE TIME表示对顾客的服务时间,即为第7列数据含义。


02 实验结果展示


分别将c101和r101两组算例作为实验数据的输入,以评估算法设计的优劣,实验结果如下:

r101算例

最优配送方案路线图

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java_03

迭代过程

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java_04

配送方案截图

国际上最优解是车辆使用数目为19,车辆行驶总距离为1645.79。

我们得到的结果为车辆使用数目为19,车辆行驶总距离为1667.58。


c101算例

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java_05

最优配送方案路线图

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java_06

迭代过程

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java_07

配送方案截图

国际上最优解是车辆使用数目为10,车辆行驶总距离为828.94。

我们得到的结果为车辆使用数目为10,车辆行驶总距离为828.94。


粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码_java_08

03 代码设计思路


代码设计思路为在基本PSO框架基础上,重构针对VRPTW问题的编码与解码方式,在每个粒子更新位置过程中嵌入relocate操作,在主循环结束后对全局最优粒子再次进行局部搜索操作。