课题名称:遗模拟退火算法SA求解带容量限制的物流配送车辆路径问题CVRP
版本时间:2024-01-12
代码获取:
QQ:491052175
VX:Matlab_Lover
模型描述:
设某配送中心有K辆车,每辆车的最大载重量为CarLoad,需要对CityNum个客户城市
进行运输配送,每辆车从中心车场出发给若干个城市配送,最终回到配送中心。
每个城市的需求量为demand(i),且demand(i)<CarLoad。记配送中心编号为0,
各城市编号为i=1,2,3……CityNum.各城市及配送中心之间的距离为distance。
求满足车辆最少,车辆行驶路程最短的运送方案。
算法流程:
第一步:设定参数,导入实际问题数据,导入城市位置信息,并计算两两城市之间的距离矩阵
第二步:寻找初始解 对于n个城市的TSP问题,能够得到的解就是对1~n的一个排列,其中每个数字为对应城市的编号,如对14个城市的CVRP问题,则 11|10|2|12|4|5|3|6|14|8|7|9|13|1|15 就是一个合法的解,采用产生随机排列的方法产生一个初始解S。
第三步:解进行变换生成新解:通过对当前解S1进行变换,产生新的路径数组即为新解,这里采用的变换是产生随机数的方法来产生将要交换的两个城市,用二领域变换法产生新的路径,即新的可行解S2。
第四步:Metropolis准则。若路径长度函数f(s),则当前解的路径为f(s1),新解的路径为f(s2),路径插df=f(s2)-f(s1),则Metropolis准则里表示df<0,则以概率1接受新的路径,否则以某种概率接受新的路径
第五步:降温。利用降温速率q进行降温,即T=qT,若T小于结束温度,则停止迭代输出当前状态,否则继续迭代。
特殊说明:
1.VRP问题算是TSP问题的进化版,不仅仅需要遍历所有城市,还需要考虑汽车的载重,城市的配送需求。
2.最终输出的路径是包含了配送中心(编号为0)。
Matlab仿真结果:
模拟退火算法SA求解CVRP的仿真结果:
行驶距离随着迭代次数的变化曲线:
模拟退火算法SA求解CVRP问题的车辆配送路线图:
仿真对比与分析:通过与粒子群算法和遗传算法求解的仿真比较发现,模拟退火算法求解方式简单,收敛速度更快,一般在150次以内就可以找到最短配送路径。