求解带时间窗车辆路径问题的多目标模因算法
1.问题描述和数学建模建立 多目标模因算法
解的构造 自适应局部搜索链
(1)多方向局部搜索策略 (2)强化的局部搜索链技术 (3)自适应局部搜索链过程 (4)存档更新策略 参考文献 源码下载
1.问题描述和数学建模建立
带时间窗的车辆路径问题(vehicle routing problem with time window,VRPTW)是一个经典的组合优化问题。它涉及到一组客户的服务呼叫及车辆的调度分配,表现出多目标的性质。在车辆路径问题的众多变种问题中,带时间窗的车辆路径问题是在车辆路径问题中为服务的客户添加交付时间约束。其被定义为:创建一个从车场到地理位置分散的客户的可用路径集,使分配策略有最低的成本。对于每个客户,服务在它的时间窗上进行。也就是,每个客户的服务应该在给定的时间窗内开始。如果车辆在客户点的最早开始服务时间之前到达,车辆必须等待,且等待期间不能为客户提供服务。相反,如果车辆的到达时间违反了它的时间窗约束,会产生延迟时间。由于带时间窗的车辆路径问题是车辆路径问题的一个特例,因此它也是一个NP难问题。 综上所述,多目标带时间窗的车辆路径问题数学模型可以表述为: 公式(1)是一个有五个目标的多目标带时间窗的车辆路径问题。第一个目标函数为公式(2),表示尽量减少车辆的数量。第二个目标函数为公式(3),表示最小化总行程距离。第三个目标函数为公式(4)表示最小化最长路线的行驶时间。第四个目标函数为公式(5),表示尽量减少因提早到达而造成的总等候时间。第五个目标函数为公式(6),表示尽量减少因迟到而造成的总延误时间。第一个约束为公式(7),表示确保每条路线的总需求不超过车辆的最大容量。第二个约束条件公式(8),表示每个客户点的延迟时间不能超过允许的最大延迟时间。第三个约束条件公式(9),表示每辆车应在关闭时间前返回车场(注意:车场也有一个时间窗口
(
0
,
e
0
)
(0,{e_0})
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">(</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord mathdefault">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span>。</p>
多目标模因算法
本文提出了一种求解带时间窗车辆路径问题的多目标模因算法,以便能够有效地、充分地利用在局部搜索过程中获得的有潜力的解,从而引导搜索向最优的帕累托前沿方向前进。多目标模因算法的总体框架如算法1所示,它是在面向多目标带时间窗的车辆路径问题的基于局部搜索的多目标优化算法(LSMOVRPTW)[1] 启发下设计的,克服了基于局部搜索的多目标优化算法在局部搜索过程中对生成的有潜力的解不能充分搜索的缺点。 如算法1所示,多目标模因算法由解的构造、自适应局部搜索链和存档更新策略三个主要组件组成。具体来说,在多目标模因算法开始时,首先,构建一个初始种群,并将其存储在一个外部存档中;然后,从外部存档中选择一个解,去执行由面向目标的局部搜索算子组成的自适应局部搜索链,并在局部搜索期间,用生成的解更新外部存档。 在下面的小节中,将给出这三个组件的详细信息。
解的构造
解的构造方法如算法2所示。在构建解决方案时,首先,从未被服务的客户中随机选择一个客户来创建一条路径。然后,使用FIRST策略[2] 将其他没有服务的客户插入到所创建的路径中。具体来说,在FIRST策略中,每个客户被插入到第一个可插入的合法位置。如果没有合法的插入位置,则用这个客户创建新路径。利用该方法,可以在较短的时间内构造出满足约束条件的多样化解。在本研究中,当新解被构造后,使用存档更新策略将其存储到外部存档中。解决方案的构建过程直到档案的大小等于目标的数量为止。
自适应局部搜索链
在自适应局部搜索链(ALSC)中,有两个关键的组成部分:多方向局部搜索策略(MD-LS)和强化的局部搜索链技术(eLS-Chain)。多方向局部搜索策略引入不同的面向目标的局部搜索算子,面向问题的知识进行多方向搜索,而强化的局部搜索链技术则选择多方向局部搜索策略过程中产生的有潜力的解,以基于链的方式继续搜索。
(1)多方向局部搜索策略
正如基于局部搜索的多目标优化算法[1] 中所讨论的,不同的目标具有不同的特性,如:物理意义、规模和优化难度。因此,设计不同的面向目标的局部搜索算子对于优化多目标带时间窗的车辆路径问题是必不可少的。由于基于局部搜索的多目标优化算法中使用的面向目标的局部搜索算子表现出了良好的性能,本算法也使用了其中的局部搜索算子,来进行链式的搜索。算法3简要描述了不同目标的多方向局部搜索策略。在算法3中,
f
1
f_1
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span style="margin-right: 0.10764em;" class="mord mathdefault">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>的局部搜索过程不同于<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
2
f_2
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span style="margin-right: 0.10764em;" class="mord mathdefault">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>-<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
5
f_5
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span style="margin-right: 0.10764em;" class="mord mathdefault">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>。为了优化f1 ,首先使用轮盘赌的选择方法从X<sub>cur </sub>中选择一条路径,其中路径的选择概率与路径上的客户点数量成反比。然后,将选择路径中的每个客户插入到其它路径中第一个遍历到的合法位置。如果选择路线上的所有客户都成功插入到其它路径,解中使用的车辆数量将减1。<br> <img src="https://img-blog.csdnimg.cn/20200505111317267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5na2tpdA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><img src="https://img-blog.csdnimg.cn/20200505111456989.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5na2tpdA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>
(2)强化的局部搜索链技术
为了进一步利用MD-LS生成的有潜力的解来指导搜索,将局部搜索链[3] 的概念引入到MMA中。正如Molina等人[3] 所描述的,局部搜索链的目标是“将连续局部搜索算法集中作用于有希望得到改进的地方”。为了使用局部搜索链,强化的局部搜索链技术被提出,并与多方向局部搜索策略相结合。 在强化的局部搜索链技术中,需要解决两个关键问题:怎样使用面向目标的局部搜索来构造局部搜索链,和怎样选择强化的局部搜索链技术中的解,以便用不同的局部搜索算子优化。 为了解决第一个问题,eLS-Chain根据目标的顺序依次执行局部搜索算子。也就是说,局部搜索链是通过执行如下面向目标的局部搜索来构建的: 如公式(10)所示,首先对选择的解执行 的局部搜索,生成一个新的解,然后对目标
f
2
f_2
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span style="margin-right: 0.10764em;" class="mord mathdefault">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>、<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
3
f_3
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span style="margin-right: 0.10764em;" class="mord mathdefault">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> 、<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
4
f_4
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span style="margin-right: 0.10764em;" class="mord mathdefault">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>和<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
5
f_5
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span style="margin-right: 0.10764em;" class="mord mathdefault">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> 进行局部搜索。注意,局部搜索链也可以用这五个局部搜索算子以不同顺序来构造。根据我们的初步测试,在多目标模因算法中,采用以目标的顺序构造或以随机顺序构造的局部搜索链之间没有显著差异。因此,为了简单起见,本算法使用以目标次序构造而成的局部搜索链。在未来的工作中,我们将全面评估不同顺序的局部搜索链的有效性。<br> <img src="https://img-blog.csdnimg.cn/20200505131503397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5na2tpdA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><img src="https://img-blog.csdnimg.cn/20200505184549981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5na2tpdA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> <img src="https://img-blog.csdnimg.cn/20200505131809120.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5na2tpdA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><img src="https://img-blog.csdnimg.cn/20200505131834499.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5na2tpdA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>
(3)自适应局部搜索链过程
自适应局部搜索链结合了多方向局部搜索策略和强化的局部搜索链技术两种机制,如算法4所示。其中, |LSChains|表示局部搜索链执行的次数, |A| 是当前存档的规模。从算法4中,多方向局部搜索策略和强化的局部搜索链技术以一种交替的方式从步骤1执行到步骤5,然后更新每个局部搜索算法的成功率(步骤6-10)。
(4)存档更新策略
参考文献
[1] Zhou Y, Wang J. A local search-based multiobjective optimization algorithm for multiobjective vehicle routing problem with time windows[J]. IEEE Systems Journal, 2014, 9(3): 1100~1113. [2] Tarantilis C D, Anagnostopoulou A K, Repoussis P P. Adaptive path relinking for vehicle routing and scheduling problems with product returns[J]. Transportation Science, 2013, 47(3): 356~379. [3] Molina D, Lozano M, García-Martínez C, et al. Memetic algorithms for continuous optimisation based on local search chains[J]. Evolutionary computation, 2010, 18(1): 27~63.
源码下载
https://github.com/zkk123456/Multiobjective-memetic-algorithm-based-on-adaptive-local-search-chains-for-vehicle-routing-problem-w.git
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)