一、硬时间窗配送车辆调度问题的描述与意义
硬时间窗配送车辆调度问题可以描述为:从某个配送中心用多台配送车辆向多个客户送货、每个客户的位置和需求量一定,要求将货物送达的时间窗一定,每台配送车辆的载重量一定,其每次配送的最大行驶距离也一定,要求合理安排配送车辆配送路线和行车时间,使目标函数得到化。
由于物流配送是对顾客服务的重要一环,因此配送的地位十分突出,如何实现快速而准确的物流配送是企业在经营方面必须解决的重要课题。鉴于此,研究运用科学的方法合理组织物流配送,以提高企业的服务质量、减少库存、降低经营成本、增加经济效益是十分必要的。这就需要运用科学、优化的配送调度方案来满足顾客对于服务的高质量需求。随着企业JIT战略的实施,零库存成为许多企业追求的目标,于是客户对货物的送达或取走时间提出了更高的要求。由此可见,研究硬时间窗配送车辆调度问题具有重要的现实意义。
二、硬时闻窗配送车辆调度问题的模型
1.硬时间窗配送车辆调度问题的约束条件
(1)每条配送路径上各客户的货物需求量之和不超过配送车辆的载重量。
(2)每条配送路径的长度不超过配送车辆一次配送的最大行驶距离。
(3)每个客户都能及时得到配送服务,且只能由一辆汽车访问一次。
(4)货物必须在客户指定的时间窗内送达。
2.硬时间窗配送车辆调度问题的数学模型
三、模拟退火算法的原理和实现步骤
模拟退火(Simulated Annealing简称SA)算法,基本思想是模拟金属退火过程。在冷凝物质物理学中,加热固体时,固体粒子的热运动不断增强,当温度升至溶解温度后,固体的规则性被彻底破坏,固体溶解为液体,这个过程的目的是消除系统中原先可能存在的非均匀状态。冷却时,液体粒子运动渐趋有序,每个温度都达到平衡态。当温度徐徐降至结晶温度后,液体凝固成固体的晶态,退火过程完成。
模拟退火算法是一种基于退火原理建立的随机搜索算法,该算法使用基于概率的双方向搜索技术:当基于邻域的一次操作使当前解的质量提高时,模拟退火算法接受这个被改进的解作为新的当前解;在相反的情况下,算法以一定的概率exp(-Δc/T)接受相对于当前解来说质量较差的解作为新的当前解,其中Δc为邻域操作前后解的评价值的差,T为退火过程的控制参数(即温度)。模拟退火算法具有渐进收敛性,理论上被证明是一种以概率1收敛于全局最优解的全局优化算法。
模拟退火算法的实现步骤如下(以求目标函数最小为例)。
四、实例
设配送中心和20个客户分布在一个边长为20 km的正方形地域内,每个客户的货物需求量都在2t以下,配送中心有5台配送车辆,配送车辆的最大载重量为8t,配送车辆一次配送的最大行驶距离均为50 km。利用计算机随机产生了配送中心和20个客户的位置坐标以及各客户的货物需求量,其中配送中心的坐标为(14.5 km,13.0 km),20个客户的坐标及其货物需求量(见表1)。在此条件基础上,可用计算机随机生成20个客户要求将货物送到的时间窗(见表2)。为方便起见,假设各客户相互之间及配送中心与客户之间的距离均采用直线距离,该距离可根据客户与配送中心的坐标计算得到。要求合理安排配送车辆的行车路线,使配送总里程最短。
五、部分源代码
clc
clear
currentDist = 20000; % 当前距离
currentRoute = randperm(20); % 当前路线
bestRoute = currentRoute; % 最佳路线
bestDist = currentDist; % 最佳距离
T_init = 100; % 初始温度
T_final = 0.1; % 最终温度
coolingFactor = 0.99; % 冷却因子
maxIter = 100; % 最大迭代次数
[target,list2] = dolist(currentRoute); % 获取目标和列表
T = T_init; % 当前温度
best = []; % 最佳结果记录
bestRouteCol = []; % 路径变好合集
bestDistCol = []; % 里程数变好合集
xy = [14.5 13;
9.6 14.8;
18.4 3.4;
15.4 16.6;
18.9 15.2;
15.5 11.6;
3.9 10.6;
10.6 7.6;
8.6 8.4;
12.5 2.1;
13.8 5.2;
6.7 16.9;
14.8 2.6;
1.8 8.7;
17.1 11.0;
7.4 1.0;
0.2 2.8;
11.9 19.8;
13.2 15.1;
6.4 5.6;
12.8 8.5;];
tic % 计时开始
while T > T_final
for iter = 1:maxIter
% 随机选择两个客户交换
swapIdx = randperm(20, 2);
newRoute = currentRoute;
newRoute(swapIdx) = newRoute(fliplr(swapIdx));
[newDist,~] = dolist(newRoute); % 计算新路线的距离
deltaDist = newDist - currentDist; % 计算距离变化
if deltaDist < 0 || exp(-deltaDist/T) > rand()
currentRoute = newRoute;
currentDist = newDist;
if currentDist < bestDist
bestRoute = currentRoute;
bestDist = currentDist;
bestRouteCol = [bestRouteCol;bestRoute];
bestDistCol = [bestDistCol;bestDist];
end
best = [best bestDist]; % 记录最佳结果
end
end
T = coolingFactor * T; % 温度降低
end
toc % 计时结束
% 迭代过程
figure
plot(best)
title(‘迭代过程’)
xlabel(‘迭代次数’)
ylabel(‘总吨位公里数’)
% 最优结果和路径
disp(‘模拟退火算法运行结果’)
disp(‘最优总吨位公里数:’);
disp(bestDist)
[~,bestList] = dolist(bestRoute);
disp(‘最优车辆路径:’);
for i=1:4
carlist = bestList{i};
str = sprintf([‘A’ char(‘A’ + carlist) ‘A\r\n’ ]);
fprintf(str)
end
path_plot(bestList,xy,2,1)
链接:https://pan.baidu.com/s/1C5PjaG0Pf12KknTUNhh5ww?pwd=03yu
提取码:03yu
–来自百度网盘超级会员V7的分享
六、运行结果图
七、参考文献
[1]张亚娟,卢新亮.基于模拟退火算法的物流配送车辆调度问题研究[J].现代商业,2008(30):24—25.
[2]王军,高利.基于模拟退火算法的硬时间窗配送车辆调度问题研究[J].佛山科学技术学院学报(自然科学版),2013,31(04):76-79.