各位uu我们又见面啦!
今天在这里给大家分享一下利用 Branch-and-price-and-cut(BPC)解决紧急停电时基站的发电机分配问题。跟上一篇 E-VReP 有点不太一样,这一篇文章主要在于问题的复杂性和创新性比较强,需要为此“量身定制”BPC 的技巧和策略,文章质量非常高,建议各位看原文哦!
预计读完只需 13分钟 !
事不宜迟!我们就开始叭 ~~~
1. 前言
1.1 基站在电信基础设施中的重要性
在电信基础设施中,基站至关重要,特别是在 5G / 6G 时代。它们连接全球网络,处理巨大数据量,支持众多设备,并提供极速低延迟的服务。基站的可靠性直接影响我们的通信质量和关键系统的运作。
什么是基站?
基站是无线通信网络中的一个关键组件,它负责在移动设备(如手机、平板电脑等)和核心网络之间传递信号和数据。可能我们平时没有留意,其实基站是在我们生活中非常常见的!
他是长这样 ↓
1.2 停电对基站的影响
停电对基站的影响不可忽视,尤其是现在对于通信质量要求非常高,在基站状况必须稳定的情况下,对于所有的自然灾害如飓风、山火以及人为破坏都可能导致基站断电,严重干扰通信服务、医疗系统和应急响应。例如,2019-2020年澳大利亚的山火曾使基站停电约2.5天,2023年巴基斯坦的全国性停电影响了近40,000个基站。通信、安全和数据存储等关键系统是需要不间断地运行,停电会导致可能被黑客入侵,严重的可能会令国家机密流出。而且,服务中断还可能会导致企业严重的声誉损害和收入损失。基站重复关闭可能会因突然的电流尖峰而导致昂贵的设备或其组件损坏,例如原本运作中的医疗设备。
1.3 应急电源解决方案
基站通常配备应急电池组,以在电网故障时提供备用电源。可是停电时间不确定,备用电池可能不足以维持整个停电期间的电力供应。在这里,柴油发电机被认为是提供临时电源的最可靠解决方案。在澳洲山火的例子里,柴油发电机占所有恢复行动的93%,可见它在实际情况中多么的有用。
1.4 发电机分配问题GDP
发电机分配问题(Generator Distribution Problem,GDP)是指在基站停电时,需要有效地分配有限数量的发电机以恢复通信服务的问题。在这种情况下,由于基站失去了电力供应,需要使用备用电源来保持基站的运行。GDP涉及到从仓库取出发电机,将其运送到基站以提供临时电源,然后在电力恢复后再收回发电机的过程。GDP的主要挑战在于有效地规划车辆的路径和时间,以最大程度地减少基站的停机时间和运输成本。
当我们看见这个问题,可能就会发现它会涉及到多个方面,例如:
- 哪些基站需要优先服务?
- 每个基站需要多少数量的发电机?
- 什么时候从仓库取出发电机,以使其在基站停电前到达?
- 什么时候回收发电机,以最大程度地减少运输成本?
- 如何有效地规划车辆的路径,以在限定时间内服务尽可能多的基站?
以上的问题,大家一起想一想哈~~~
2. 问题描述
基本定义
- 车辆集合 K = { k ∣ 1 ≤ k ≤ U } K = \{k | 1 ≤ k ≤ U \} K={k∣1≤k≤U} 包括 U U U 辆同质车辆,每辆车的容量为 Q Q Q 。
- O = { 0 + } ∪ { 0 − } O = \{0^{+}\} ∪ \{0^{−}\} O={0+}∪{0−}, 0 + 0^{+} 0+ 是出发地点; 0 − 0^{−} 0− 是返程地点。
- 基站集合 D = { 1 , . . . , m } D = \{1, . . . , m\} D={1,...,m} 包括所有需要服务的基站,每个基站有一个对应的拾取集合 P = { m + 1 , . . . , 2 m } P = \{m + 1, . . . , 2m\} P={m+1,...,2m} 。
- 仓库集合 W = { w 2 m + 1 , . . . , w n } W = \{w_{2m+1}, . . . , w_{n}\} W={w2m+1,...,wn} 包括所有发电机可租借的仓库,每个仓库有一个对应的交付集合 N = { w n + 1 , . . . , w 2 n } N = \{w_{n+1}, . . . , w_{2n}\} N={wn+1,...,w2n} 。
- 商品由单一供应商提供,可以从仓库 w i w_{i} wi 租借( i ∈ { 2 m + 1 , . . . , n } i ∈ \{2m + 1, . . . , n\} i∈{2m+1,...,n}),租借成本为 h h h 。
- 每个仓库 w i w_{i} wi 的库存为 q w i q_{w_{i}} qwi ,并假设 q w i > Q q_{w_{i}}>Q qwi>Q 。
- 每个仓库 w i w_{i} wi 都有一个人工交付副本(方便建模),保留了原始顶点的属性。
- 问题定义在一个有向图 G = ( V , A ) G = (V, A) G=(V,A) 上,其中 V = D ∪ P ∪ W ∪ N ∪ O V = D ∪ P ∪ W ∪ N ∪ O V=D∪P∪W∪N∪O 是顶点集合, A A A 是弧集合。
- 遍历弧 ( i , j ) ∈ A (i, j) ∈ A (i,j)∈A 会产生运输成本 c i , j c_{i,j} ci,j 和给定的车辆行驶时间 t i , j t_{i,j} ti,j ,其中包括顶点 j ∈ V j ∈ V j∈V 处的伴随服务时间。
- 弧集合 A A A 根据一定的条件确定,不是完全图。
- 问题的规划时间段定义在时间间隔 [ 0 , T ] [0, T] [0,T] 上, T T T 是预期的停电时间。
基站属性特征
每个基站有六个属性特征 i ∈ D i ∈ D i∈D :
- 备用电池数量 q i q_{i} qi ;
- 电池总容量 E i E_{i} Ei ;
- 停电时的电池充电状态 I i I_{i} Ii ;
- 单位时间功耗 u i u_{i} ui ;
- 可以通过电源充电的电量 e i e_{i} ei ;
- 基站有离线成本 f i f_{i} fi ,从电池完全放电开始计算。
当一个基站需要充电时,它可以接收并行充电的多个供电设备,并且充电时间取决于基站的充电速率和需要充电的数量。
每个基站的电池组包括了 q i q_{i} qi 个电池单元。这意味着每个基站最多可以接收 q i q_{i} qi 个供电设备。如果基站接收了最多 q i q_{i} qi 个供电设备,那么这些设备可以并行工作。这意味着它们可以同时为基站充电。基站的充电时间取决于基站 i i i 的充电速率 e i e_{i} ei 以及需要充电的数量。充电数量必须根据充电约束条件来确定。而充电约束规定,如果向基站执行交付,则其电池组的电量不得在规划范围结束之前再次耗尽,也就是说不可以在恢复电力之前再次用没电。
这里大家可能会有点乱:所以柴油发电机在这里有什么作用?它是直接给基站充电维持吗?关电池组再次没电有什么关系?
- 在这个问题中,充电约束是确保在基站停电时,柴油发电机为基站提供电力的同时,备用电池能够及时充电,以确保基站在停电期间持续运行的约束条件。这意味着**柴油发电机提供的电力不仅用于维持基站的运行,同时还给备用电池充电,就像我们平时生活一边替手机充电一边打王者一样。**一旦备用电池充满电或充足够并能够支持基站的运行,柴油发电机就可以离开基站前往其他地方提供电力支持,以最大程度地减少通信中断的时间。
配送和回收要求和约束
每辆车只能执行一次配送任务,开始和结束于仓库,且在开始时车辆的载货为空。商品可以从任何一个仓库取出,可能需要多次访问仓库以满足配送需求,然后将商品运送到一些基站完成交付。车辆可以多次访问仓库,以获取商品并根据配送约束将商品配送给基站,回收是,商品必须被收集并退还给供应商。这些物品可以放置在任何一个或多个仓库中,不一定是租用它们的仓库,并且可以进一步被其他车辆使用,这个动作称为仓库流约束。这里请注意,当电力恢复了,就可以不用进行交付了,因为已经没必要了。
- 每次配送和回收的基站必须通过单一路径访问,不能在路径中拆分配送或回收的数量。
- 车辆不能直接从一个拾取仓库到达一个交付仓库,仓库只用于存储和取出商品,不能用作转运设施。
简单例子
考虑一个表示为 Ɛ 1 Ɛ_{1} Ɛ1 的示例,其中五个基站在断电后需要交付,如上图所示。每个位置 i ∈ D ∪ P ∪ W ∪ N i ∈ D ∪ P ∪ W ∪ N i∈D∪P∪W∪N 都由唯一的图形表示:圆圈代表基站,三角形代表仓库。每个图中的符号对应于各自的位置 i i i 。具体地,在该示例中,仓库集合定义为 W Ɛ 1 = { w 1 , w 2 } W_{Ɛ_{1}}=\{w1,w2\} WƐ1={w1,w2} 和 N Ɛ 1 = { n 1 , n 2 } N_{Ɛ_{1}}=\{n1,n2\} NƐ1={n1,n2}。交货位置集为 D Ɛ 1 = { d 1 , … , d 5 } D_{Ɛ_{1}} = \{d1, \ldots, d5\} DƐ1={d1,…,d5},各自的拾取副本表示为 P Ɛ 1 P_{Ɛ_{1}} PƐ1 = { p 1 , … , p 5 } \{p1,\ldots, p5\} {p1,…,p5}。源仓库 0 + 0^{+} 0+ 的单个副本由正方形表示。
每个图形旁边的数字代表取货和送货数量,正值表示取货,负值表示送货,而箭头下方的数字表示车辆穿过各个边缘时的负载。本例中的车辆容量定义为 Q Ɛ 1 = 3 Q_{Ɛ_{1}} = 3 QƐ1=3。观察 Ɛ 1 Ɛ_{1} Ɛ1 的解,一条车辆路径多次访问提货和发货仓库。这可以通过车队共享的提货仓库库存有限来合理化。因此,车辆可能需要从不同的提货点收集商品。此外,由于车辆容量限制,可能需要多次访问交货仓库。
值得注意的是,所呈现的车辆路径不会访问仓库 n 2 n_{2} n2 ,然而,在其他解决方案中可能会访问该仓库。此外,此示例中基站的交付量会根据电池充电特性而变化。
对于上述各点的分析,我们知道 GDP 的目标是确定一组交付计划,以最小化总成本,包括运输成本、设备租赁成本和基站停机成本。考虑到供应商设施的有限库存,某些基站可能不在任何交付计划中,这些基站只需要承担离线费用而已。
经过了问题描述,相信各位uu现在都把问题了解的非常透彻啦 ~~~ 特别是上面的例子,小编我直接能在脑海中把情景想象出来啦哈哈哈!
3. 算法流程
3.1 弧式模型 AM 与 集合包装模型 SF
1. 弧式模型(Arc-Based Model, AM)
AM 是一种基于图的车辆路径问题 VRP 建模方法,其中重点是图中的弧(路线)和车辆在这些弧上的运动。模型中每个弧代表车辆从一个节点(地点)移动到另一个节点的路径。变量 x i , j x_{i,j} xi,j 表示车辆是否经过某个弧。需要精确协调车辆在各个节点(特别是仓库)的到达时间,以确保满足库存、服务时间窗等约束条件。在处理多次访问仓库时,必须确保库存更新的同步性,例如送货车辆必须先于接货车辆到达。它能够精确建模车辆在路径上的移动和时间约束,适用于需要细粒度控制的场景。也特别适用于复杂的配送问题,如涉及多个仓库、多次访问、严格的时间窗口和库存管理等。
2. 集合包装模型(Set-Packing Model, SF)
SF 是另一种 VRP 的建模方法,通过将整个路线视为一个集合并通过选择不重叠的集合来优化目标函数。每个变量表示一条完整的车辆路线,这些路线视为集合。目标是选择一组不重叠的集合,使得所有客户需求得到满足。它不需要详细建模每条弧上的车辆运动,而是从更高层次上选择最佳路线组合。所以可以容易地添加各种复杂约束,如车辆容量、服务时间窗、优先级和配对等。而且相对于 AM 模型,SF 模型简化了路径选择问题,通过选择最佳路线组合来满足需求。它适用于具有明确路线和服务要求的配送问题,特别是在路线数量较少但每条路线较复杂的情况下。
3. AM 和 SF 之间的关系和特别之处
关系
-
互补性:AM 和 SF 模型在解决 VRP 时具有互补性。AM 模型提供了详细的路径和时间控制,而SF模型在高层次上选择最佳路线组合。在同一个问题中,AM 可以用来生成和验证路线,而SF可以用来优化路线选择。
-
应用场景:AM 模型适用于需要细粒度路径控制和复杂时间约束的问题,如即时配送和严格库存管理。SF 模型适用于需要高层次路线选择和优化的问题,如预先规划的配送路线和多约束的复杂配送问题。
特别之处
-
复杂性处理:AM 模型能够详细处理每条弧上的复杂约束和同步问题,但计算复杂度较高。而 SF 模型通过高层次的抽象简化了复杂性,但在路径生成和验证上依赖于其他方法。
-
同步和库存管理:AM 模型在处理车辆同步和库存管理时更具优势,能够精确控制车辆到达时间和库存更新。SF 模型在处理这些细节时需要依赖于更高层次的约束和条件。
以上只是一个小科普,让大家可以理解一下基本概念,那阅读文章的时候就可以更加通透了。
3.2 AM 在该问题的应用
AM 在该问题的应用的目的是优化多车辆的路径,使得所有配送和取货任务在一定时间内完成,同时确保仓库库存始终非负。
1. 扩展图的构建
- 为了处理多次访问接货仓库的情况,原始图 G G G 被扩展为 G ′ G^{′} G′ 。
- 这种扩展允许在多个时间点访问同一仓库,确保在整个计划期内仓库库存始终非负。
- 将时间从 0 0 0 到 T T T 以步长 1 离散化,创建每个配送和接货仓库在每个离散时间点的副本。
- W ′ W^{′} W′ 和 N ′ N^{′} N′ 分别表示所有配送和接货仓库的副本集合。
- W ′ = ∪ i = 2 m + 1 n I w i W^{′} = ∪ ^{n} _{ i=2m+1} I_{w_{i}} W′=∪i=2m+1nIwi 和 N ′ = ∪ i = n + 1 2 n I w i N^{′} = ∪_{i=n+1}^{2n} I_{w_{i}} N′=∪i=n+12nIwi 。
- 原始图中的边集合 A A A 被扩展为 A ′ A^{′} A′ ,包括扩展网络中所有可行的边。
- 原始节点集合 V 被扩展为 V ′ = V ∪ W ′ ∪ N ′ V^{′} = V ∪ W^{′}∪ N^{′} V′=V∪W′∪N′。
2. 决策变量
3. 目标函数
目标函数如下:
- 第一项:最小化由于停电引起的费用 f i z i f_{i} z_{i} fizi 。
- 第二项:最小化租赁成本 h δ w i γ h\delta_{w^{\gamma}_{i}} hδwiγ 。
- 第三项:最小化车辆行驶成本 c i , j x i , j , k c_{i,j} x_{i,j,k} ci,jxi,j,k 。
3.3 SF 在该问题的应用
1. 路径变量定义
- 每个变量表示一条完整的车辆路径。
- 路径表示为一系列元组,例如 ( v 0 + , v i , γ , δ , . . . , v 0 − ) (v_{0}^{+}, v_{i}, \gamma, \delta, ..., v_{0}^{-}) (v0+,vi,γ,δ,...,v0−) ,其中 i ∈ D ∪ P ∪ W ∪ N i ∈ D ∪ P ∪ W ∪ N i∈D∪P∪W∪N 表示访问的地点索引。
- γ \gamma γ 和 δ \delta δ 分别表示在节点 i i i 处的最早服务开始时间和相应的送货/取货数量。
2. 可行路径定义
可行路径的条件
- 路径必须是相对于基站访问的基本路径,且起点和终点都在仓库(即depot)。
- 路径必须满足车辆容量、优先级、配对、充电和仓库流量约束。
- R R R 表示所有可行路线的集合。
基本路径
- 基本路径意味着某个配送基站 i ∈ D i ∈ D i∈D 在路径中最多访问一次。
- 仓库 i ∈ W ∪ N i ∈ W ∪ N i∈W∪N 可以在可行路径中多次访问。
3. 相关参数和变量
二元参数
- α i , r \alpha_{i,r} αi,r:如果节点 i ∈ V i ∈ V i∈V 包含在路径 r r r 中,则为1,否则为0。
- β i , j , r \beta_{i,j,r} βi,j,r:如果弧 $(i, j) ∈ A $ 被路径 r r r 遍历,则为1,否则为0。
时间变量
- τ i , r \tau_{i,r} τi,r:路径 r r r 中车辆在节点 i ∈ V i ∈ V i∈V 的最早服务开始时间。
货物数量变量
- Δ i , γ , r − \Delta^{−}_{i,\gamma,r} Δi,γ,r− 和 Δ i , γ , r + \Delta^{+}_{i,\gamma,r} Δi,γ,r+:路径 r r r 中在仓库 i ∈ W i ∈ W i∈W 取货(送货)的数量,满足车辆到达时间 $\tau_{i,r} ≤ \gamma $ 且 0 ≤ γ ≤ T 0 ≤ \gamma ≤ T 0≤γ≤T。
覆盖基站集合
- D ( r ) D(r) D(r):路径 r r r 覆盖的基站集合。
4. 路径成本
路径成本由以下三部分组成:
租赁成本 Rental Costs
表示车辆在仓库的租赁成本。
离线成本 Off-line Costs
如果车辆到达基站
i
i
i 的时间超过了
I
i
u
i
\frac{I_i}{u_i}
uiIi,会产生离线成本。
旅行成本 Travel Costs
表示车辆在路径上行驶的成本。
5. Proposition 1
存在一个最优解,使得对于每个路径 $r ∈ R $ 中的每个配送顶点 i ∈ D ( r ) i ∈ D(r) i∈D(r) ,其服务开始时间 τ i , r \tau_{i,r} τi,r 是相对于计划起始时间的最早可行车辆到达时间。
在文中给出了 Proposition 1 通过证明存在一个最优解,使得所有路径中的服务开始时间都是最早的,提供了一个重要的优化原则。这一原则对路径选择和标签设置算法的设计具有重要影响。它简化了路径选择过程,提高了算法的效率,并确保了解的最优性。详细请各位直接看论文,写的更详细。
❗ ❗不要因为看到复杂的数学符号就怕了不敢读下去,其实他只是个符号,跟我们平时用的 x x x 和 y y y 是一样的❗ 读到这里已经很棒了,还有一半,加油❗❗
由于路径集合 R R R 过于庞大,直接求解 SF 是不切实际的。为了解决这一问题,文中采用了列生成 CG 方法,它是一种迭代过程,交替求解 SF 公式的线性规划 LP 松弛问题和定价子问题。
- 通过松弛约束,允许 0 ≤ θ r ≤ 1 0 \leq \theta_r \leq 1 0≤θr≤1(对于每个 θ r ∈ R \theta_r ∈ R θr∈R),从而得到线性主问题 LMP 。然后,通过选择初始列的集合 Ω ⊆ R \Omega \subseteq R Ω⊆R,得到受限线性主问题 RLMP ,并在每次迭代中更新该集合。CG 方法的目的是在每次迭代中找到负的减少成本列,并将它们纳入 RLMP。当找不到这样的列时,过程终止。如果 CG 结束时的线性解是可行的,那么它对于 LMP 和 RLMP 都是最优的。
- 每个 RLMP 的解都有对应的对偶解,这些对偶值在减少成本函数中起到关键作用,用于更新路径集合 Ω \Omega Ω。通常,BPC 过程从一组初始列开始,为标签设置算法后续迭代提供上限。在这个情况下,即使 Ω = ∅ \Omega = ∅ Ω=∅ ,SF 仍然是可行的,这意味着在解决定价子问题之前不需要生成初始列。
3.4 定价子问题 Pricing Subproblem
定价子问题的关键在于找到 negative reduced cost 路径并将其添加到 RLMP 中。通过使用对偶变量计算路径的 reduced cost ,可以识别出对整体解最有贡献的路径。针对复杂的 ESPPRC 问题,提出了定制的标签设计算法,能够有效处理资源约束,并通过解决元素性和非元素性最短路径问题来优化路径选择。这种方法确保了在复杂的路径优化问题中逐步接近最优解。
对偶 RLMP 的变量包括 π i ≤ 0 \pi_i \leq 0 πi≤0 对于每个 i ∈ D i \in D i∈D, π 0 ≤ 0 \pi_0 \leq 0 π0≤0,以及 μ i , γ ≥ 0 \mu_i, \gamma \geq 0 μi,γ≥0 对于每个 i ∈ W i \in W i∈W 和 γ ∈ Γ i \gamma \in \Gamma_i γ∈Γi,这些变量分别与文中约束相关。
1. Reduced cost 的计算:
- 路径 r ∈ R r \in R r∈R 的reduced cost c r ˉ \bar{c_r} crˉ 计算如下:
路径原始成本 c r c_r cr 减去一系列对偶变量的加权和。
2. 定价子问题的形式:
- 在文中这个问题的形式是带有资源约束的基本最短路径问题 ESPPRC,这是一个 NP-hard 问题,意味着它在计算上非常复杂。
3. 标签设计算法 Labelling Algorithm :
- 文中提出了一种定制的标签设计算法来解决修改后的 ESPPRC,其中的资源约束包括交货和取货的数量,以及充电约束。
- 而且,还允许重复访问交货顶点。
现在会详细说明,各位uu要留心啦 ~~
Reduced cost Matrix
开始之前需要大家掌握一下这些基本信息:
- 三角不等式 Triangle Inequality, TI 是图论和优化问题中的一个重要概念,尤其在路径优化和车辆路径问题 VRP 中应用广泛。具体来说,三角不等式指出,在一个图中,从一个顶点到另一个顶点的直接路径的成本/距离应当不大于通过第三个顶点的路径成本之和。
- 在物流和路径优化问题中,提货三角不等式 Pick-up Triangle Inequality, PTI 是一种特殊形式的三角不等式,它考虑了在路径中添加一个提货顶点的成本影响。
1. 提货三角不等式 PTI:
- PTI 表示如果 c ˉ i , j + c ˉ j , k ≥ c ˉ i , k \bar{c}_{i,j} + \bar{c}_{j,k} \geq \bar{c}_{i,k} cˉi,j+cˉj,k≥cˉi,k,对于所有 i , k ∈ V i, k \in V i,k∈V 和 j ∈ P j \in P j∈P 都成立,则减小成本矩阵满足 PTI。
- 它确保了在路径中引入额外的提货顶点不会降低路径的总成本。这对于路径优化特别重要,因为它保证了路径选择的合理性。
2. Reduced cost Matrix:
- Reduced cost Matrix 是通过计算路径的实际成本减去某些对偶变量的加权和得到的。
- 确保 Reduced cost Matrix 满足 PTI 是为了更高效地解决 ESPPRC。
3. 对 ESPPRC 的影响:
- 如果 Reduced cost Matrix 满足 PTI 可以显著简化问题的复杂性,更高效地解决 ESPPRC。
- 原始 Cost Matrix 满足 PTI 是因为其基于实际的旅行时间和成本,而这些通常满足三角不等式 TI 。然而,当向 RLMP 添加切割时,可能会引入新的对偶变量,从而破坏 PTI。
4. 修改后的减小成本矩阵:
- 为了确保满足 PTI,可以引入修正项 ν i \nu_i νi 来调整减小成本矩阵。
- 修改后的减小成本矩阵公式如下:
c ~ i , j = c ˉ i , j − ν j , ∀ j ∈ D , i ∈ V \tilde{c}_{i,j} = \bar{c}_{i,j} - \nu_j, \forall j \in D, i \in V c~i,j=cˉi,j−νj,∀j∈D,i∈V
c ~ i , j = c ˉ i , j + ν j − m , ∀ j ∈ P , i ∈ V \tilde{c}_{i,j} = \bar{c}_{i,j} + \nu_{j-m}, \forall j \in P, i \in V c~i,j=cˉi,j+νj−m,∀j∈P,i∈V - 这些修正项 ν i \nu_i νi 确保了最终的解不会改变,即每个顶点 i ∈ D i \in D i∈D 和对应的提货顶点 i + m ∈ P i + m \in P i+m∈P 被访问一次。
标签设计算法 Labelling Algorithm
标签设计算法在解决最短路径问题 SPP 和更广泛的路径优化问题中具有重要作用,它的目标是找到从源点到汇点的最低成本路径。为此,与每个顶点相关联的标号会沿着部分路径迭代传播。一个标号对应于一个从起点到某个顶点的部分路径状态,储存了累计的资源消耗信息。随着问题规模的增加,可能的组合数量呈指数增长,为了加快算法,采用了支配规则来防止不具前途的标号进一步传播。它的作用主要有三:
-
路径优化:
标签设计算法的主要目标是找到从源点到汇点的最小成本路径。算法通过逐步扩展部分路径来构建完整路径,并在过程中跟踪累积的成本和资源使用情况。 -
资源管理:
该算法能够有效地管理和跟踪多种资源,以确保在路径扩展过程中遵守各种资源约束。 -
避免不必要的计算:
通过使用优势规则 dominance rules ,算法能够丢弃那些无法导致最优解的标签,从而减少计算量和时间复杂度。
标签各个部分的功能
一个从起点到顶点 v i i ∈ V v_{i_i} \in V vii∈V 的部分路径 p = { v i 1 = 0 + , … , v i i } p = \{v_{i_1} = 0^+, \ldots, v_{ii}\} p={vi1=0+,…,vii} 被编码为标号 L ( p ) = { η , t , c , ζ , σ , λ , O , N , V , W , Φ , Ψ } L(p) = \{\eta, t, c, \zeta, \sigma, \lambda, O, N, V, W, \Phi, \Psi\} L(p)={η,t,c,ζ,σ,λ,O,N,V,W,Φ,Ψ},其中:
- η ( L ) \eta(L) η(L) 是部分路径的头顶点,即 η ( L ) = v i i \eta(L) = v_{i_i} η(L)=vii;
- t ( L ) t(L) t(L) 是从顶点 v i i v_{i_i} vii 出发的时间;
- c ( L ) c(L) c(L) 是累计的减小成本;
- ζ ( L ) \zeta(L) ζ(L) 是与流切割相关的未支付的对偶成本;
- σ ( L ) \sigma(L) σ(L) 是从顶点 v i i v_{i_i} vii 出发时的车辆负载;
- λ ( L ) \lambda(L) λ(L) 是代表部分路径之间的提货量的参数;
- O ( L ) O(L) O(L) 是未完成请求的集合;
- N ( L ) N(L) N(L) 是已完成请求的集合;
- V ( L ) V(L) V(L) 是可达请求的集合;
- W ( L ) W(L) W(L) 是已访问仓库的集合;
- Φ ( L ) \Phi(L) Φ(L) 是部分路径上放置在交货顶点的交货数量集合;
- Ψ ( L ) \Psi(L) Ψ(L) 是部分路径到达交货顶点的时间集合。
标签扩展函数 EFF 的作用
标签扩展函数 Extension Functions, EFF 定义了如何从一个标签扩展到另一个标签,根据路径的不同类型。在文中会介绍详细的扩展函数及其作用。
优势规则的作用
优势规则 Dominance Rules 用于比较不同标签,决定哪些标签可以被丢弃。一个标签 L L L 可以优势另一个标签 L ′ L^′ L′ ,如果 L L L 在所有资源消耗上都不劣于 L ′ L^′ L′ ,并且在某些资源上更优。具体的优势条件如时间、开放请求、完成请求、可达请求、访问仓库等都有具体的检查标准。优势规则的应用确保了算法只保留那些有可能产生最优解的标签,从而提高了计算效率。
方向选择
尽管双向标号具有加速寻找负减少成本列的优势,但由于问题的性质,就像配送不能在规划时间之后进行的状况,采用前向标号才是一个务实的选择。
显然在这里,到达目的地的时间越早,成本越低。这就导致了一种情况,即从源点出发的路径不太可能是从汇点出发的路径的子集,因为较早到达目的地的路径通常具有较低的成本。所以双向搜索可能会遇到这样的情况:从源点出发的路径不会被从汇点出发的路径优化。
在这个问题里面,有一些特定的路径约束,例如交付只能在规定的时间内完成,而取货仓库和交付基站可以在规定时间后到达。这些约束条件可能会限制双向搜索的有效性,因为从汇点出发的路径可能无法满足这些约束条件。
所以需要有效地管理和跟踪多种资源,这些资源的有效管理可能使得双向搜索更加复杂,并且需要额外的处理来确保双向搜索的正确性和有效性。
启发式定价 Heuristic Pricing
-
启发式算法:启发式算法是一种通过快速生成大量负的减少成本列来改善CG性能的方法。当传统的标签设计算法未能找到新的变量时,启发式定价算法会被调用。这些启发式算法通常根据一些简单的规则来选择合适的变量,并不会像传统的标签设计算法那样严格地检查所有的标签。
-
加速技术:为了在不同的方向上引导搜索过程,可以将列生成过程划分为一系列阶段。每个阶段可能包括一个或多个标签设计算法,这些算法具有不同的输入参数,并且可能使用不同的标签设计策略。这种分阶段的方法可以帮助加速CG过程,因为它允许在不同阶段使用不同的搜索策略,并且可以更好地控制搜索过程的方向。
-
启发式算法 H 1 H_1 H1 和 H 2 H_2 H2 :这两种启发式算法主要是为了简化标签设计算法的复杂性。启发式算法 H 1 H_1 H1 只保留了部分支配规则;而启发式算法 H 2 H_2 H2 扩展了其范围。这些启发式算法可以在不需要完全的标签设计过程时,快速地找到一些 negative reduced cost 列。详细内容请阅读原文。
-
启发式标签算法 H r H_r Hr :为了稳定对偶值并减轻 CG 过程中震荡的负面影响,特别是在早期的迭代中,启发式标签算法 H r H_r Hr 被使用。**这个算法只存储每个顶点的一小部分最小对偶值的邻居,并且在一个缩减的图上运行。**这有助于降低计算复杂度,并加速 CG 过程的收敛。
Non-Elementary SPP—NF
NF 允许对配送顶点进行重复访问,但是同时引入了一些限制条件。如果配送顶点属于开放请求的集合,即属于 O ( L ) O(L) O(L) ,则不能重新访问该顶点。禁止出现循环类型为 { i , i + m , i } \{i, i + m, i\} {i,i+m,i} 的情况,即在重复访问配送顶点 i i i 之前,必须先访问除 i ∪ i + m {i}∪{i+m} i∪i+m 之外的任何顶点 j ∈ V j ∈ V j∈V。重要的是,如果确实发生了重复访问,之前的电池充电信息将被丢弃,这一点就是非常 tricky。
它的作用主要是为了加速 negative reduced cost 列的搜索过程,因为它松弛了约束。这一方法的效果在不同的 PDP 情境下可能会有所不同。在本文中,NF 的引入使得在 Pricing Subproblem 中寻找 negative reduced cost 列更加高效。
由于 SF 具有 Subtour Elimination Constraints 的特性,任何 Non-Elementary 的路径都是不可行的,并且这样的路径由于装载约束 packing constraints 的存在,不能成为任何可行解的一部分。所以通过解决 Non-Elementary 的最短路径问题得到的 SF 的最优解与解决元素性最短路径问题得到的 SF 的最优解是一致的。
有效不等式 Valid Inequalities
子集行切割 SRC 通过增强支配条件和修改累积成本函数来提高 RLMP 的下界,并加速 Pricing Subproblem 中 negative reduced cost 列的搜索。通过引入双变量和相应的标签扩展函数 EFF ,能够有效地将 SRCs 纳入优化过程,从而提升算法的整体性能和稳定性。
- 定义子集行切割 SRC:
- 集合C:设 C = { i , j , k ∣ i ∈ D , j ∈ D , k ∈ D } C = \{i, j, k | i ∈ D, j ∈ D, k ∈ D\} C={i,j,k∣i∈D,j∈D,k∈D} ,表示所有请求三元组的集合。
- 集合S:定义 S S S 为所有 SRCs 的集合,且每个 s ∈ S s ∈ S s∈S 表示一个具体的切割。
- 集合Rs:表示包含至少两个 s ∈ S s ∈ S s∈S 中元素的所有路径集合。
SRCs的不等式形式为:
∑
r
∈
R
s
θ
r
≤
1
,
∀
s
∈
S
∑_{r∈R_s} \theta r ≤ 1, ∀ s ∈ S
r∈Rs∑θr≤1,∀s∈S
-
实施和计算SRCs:
- 通过完全枚举所有请求三元组 i , j , k ∈ C {i, j, k} ∈ C i,j,k∈C 来分离违反的 SRCs 。
- SRCs 是非鲁棒的,因为每个 s ∈ S s ∈ S s∈S 在 Pricing Subproblem 中需要额外的资源。
-
双变量与SRCs的结合:
-
定义双变量:设 ι s ≤ 0 \iota s ≤ 0 ιs≤0 表示与每个约束相关联的双变量。
-
标签扩展函数:定义新的标签组件 ξ s \xi s ξs ,作为与 SRCs 相关的二进制资源。当访问的请求 i ∈ s i ∈ s i∈s 次数为奇数时,设置为1。
ξ s ( L ′ ) = { ( ξ s ( L ) + 1 ) m o d 2 , if j ∈ s ξ s ( L ) , otherwise \xi s(L^′) = \begin{cases} (\xi s(L) + 1) \mod 2, & \text{if } j ∈ s \\ \xi s(L), & \text{otherwise} \end{cases} ξs(L′)={(ξs(L)+1)mod2,ξs(L),if j∈sotherwise -
修改累积成本:访问顶点 j ∈ D j ∈ D j∈D 时,累积成本 c ( L ′ ) c(L^′) c(L′)的计算公式为:
c ( L ′ ) = c ( L ) + c ~ i , j + f j ( max { I j u j , t ( L ′ ) } − T ) + max { 0 , κ k − σ ( L ) } ( h + ζ ( L ) ) − ∑ s ∈ S : ξ s ( L ) = 1 , j ∈ s ι s c(L^′) = c(L) + \tilde{c}_{i,j} + f_j \left( \max \left\{ \frac{I_j}{u_j}, t(L^′) \right\} - T \right) + \max \{0, \kappa_k - \sigma(L)\} (h + \zeta(L)) - ∑_{s∈S : \xi_s (L)=1, j ∈ s} \iota s c(L′)=c(L)+c~i,j+fj(max{ujIj,t(L′)}−T)+max{0,κk−σ(L)}(h+ζ(L))−s∈S:ξs(L)=1,j∈s∑ιs
-
-
更新支配条件:
- 为了考虑 SRCs ,支配条件被增强为:
c ( L ) + ( h + ζ ( L ) ) max { 0 , λ ( L ′ ) − λ ( L ) } + μ i , γ ( ρ ( L ′ ) − ρ ( L ) ) − ∑ s ∈ S , ξ s 1 > ξ s 2 ι s ≤ c ( L ′ ) , ∀ i ∈ N , γ ∈ [ t ( L ′ ) , T ] c(L) + (h + \zeta(L)) \max \{0, \lambda(L^′) - \lambda(L)\} + \mu_{i,\gamma}(\rho(L^′) - \rho(L)) - ∑_{s∈S, \xi^1_s > \xi^2_s} \iota s ≤ c(L^′), ∀ i ∈ N, \gamma ∈ [t(L^′), T] c(L)+(h+ζ(L))max{0,λ(L′)−λ(L)}+μi,γ(ρ(L′)−ρ(L))−s∈S,ξs1>ξs2∑ιs≤c(L′),∀i∈N,γ∈[t(L′),T]
- 为了考虑 SRCs ,支配条件被增强为:
3.5 分支策略
当当前解为分数时,分支程序开始,以从搜索空间中排除不可行解。这个过程将持续进行,直到每个未探索的分支节点都被剪枝,输出一个最优整数解。在实现当中,分支节点以最优优先的方式进行探索。为了获得整数解,文中采用了三种不同的分支策略:
-
基于车辆数量的分支:
-
设 θ ~ r \tilde{\theta}_r θ~r 为最终解中选定的路径 r ∈ R r ∈ R r∈R。
-
如果选定变量的总和为分数,则通过调整车队规模创建两个分支:
- U ≤ ⌊ ∑ r ∈ R θ ~ r ⌋ U ≤ ⌊∑_{r∈R} \tilde{\theta}_r⌋ U≤⌊∑r∈Rθ~r⌋
- U ≥ ⌈ ∑ r ∈ R θ ~ r ⌉ U ≥ ⌈∑_{r∈R} \tilde{\theta}_r⌉ U≥⌈∑r∈Rθ~r⌉
这个就很显然了,车辆数量总没可能是小数吧。
-
-
基于仓库访问的分支:
- 如果无法找到合适的车辆数量分支值,算法尝试基于仓库访问进行分支。
- 设 θ ~ r ( w i ) \tilde{\theta}_r(w_i) θ~r(wi) 为路径 r ∈ R r ∈ R r∈R 至少访问一次的仓库 w i ∈ W ∪ N w_i ∈ W ∪ N wi∈W∪N。
- 算法寻找使得 ∑ r ∈ R θ ~ r ( w i ) \sum_{r∈R} \tilde{\theta}_r(w_i) ∑r∈Rθ~r(wi) 为分数且在所有 w i ∈ W ∪ N w_i ∈ W ∪ N wi∈W∪N 中最大。
- 类似于车辆数量分支,通过向 LP 模型添加相应的约束创建两个分支。
-
基于集合流出的分支:
-
给定顶点集合 F = { i , j ∣ i , j ∈ D ∪ P } F = \{i, j | i, j ∈ D ∪ P\} F={i,j∣i,j∈D∪P} 且 ∣ F ∣ = 2 |F| = 2 ∣F∣=2, δ + ( F ) = { ( i , j ) ∣ i ∈ F , j ∉ F } \delta^+(F) = \{(i, j) | i ∈ F, j ∉ F\} δ+(F)={(i,j)∣i∈F,j∈/F}。
-
算法搜索适当的候选集合,使得其流出 x ( δ + ( F ) ) = ∑ r ∈ R ∑ ( i , j ) ∈ δ + ( F ) β i , j , r θ ~ r x(\delta^+(F)) = \sum_{r∈R} \sum_{(i,j)∈\delta^+(F)} \beta_{i,j,r} \tilde{\theta}_r x(δ+(F))=∑r∈R∑(i,j)∈δ+(F)βi,j,rθ~r 最远离最近的整数。
-
通过施加以下约束创建两个分支:
- ∑ r ∈ R ∑ ( i , j ) ∈ δ + ( F ) β i , j , r θ r ≥ ⌈ x ( δ + ( F ) ) ⌉ \sum_{r∈R} \sum_{(i,j)∈\delta^+(F)} \beta_{i,j,r} \theta_r ≥ ⌈x(\delta^+(F))⌉ ∑r∈R∑(i,j)∈δ+(F)βi,j,rθr≥⌈x(δ+(F))⌉
- ∑ r ∈ R ∑ ( i , j ) ∈ δ + ( F ) β i , j , r θ r ≤ ⌊ x ( δ + ( F ) ) ⌋ \sum_{r∈R} \sum_{(i,j)∈\delta^+(F)} \beta_{i,j,r} \theta_r ≤ ⌊x(\delta^+(F))⌋ ∑r∈R∑(i,j)∈δ+(F)βi,j,rθr≤⌊x(δ+(F))⌋
这些约束是 robust 的,因为它们不会改变 Pricing Subproblem 的结构。
-
这三种策略通过创建不同的分支并施加相应的约束,逐步收敛到一个最优整数解,同时保证了 Pricing Subproblem 的结构不变性,来提高算法的整体性能和效率。
这里比较复杂,涉及的技术比较多,可能需要大家多看几次才会理解清楚哦(我也看了不止一次。。。)4. 算法优势
初步实验表明了测试实例对于商业求解器来说相当具有挑战性。所以为了验证 AM ,文中在所有 CPLEX 运行中将估计停电时间设为2小时。选定实例的结果总结在 T a b l e 4 Table 4 Table4 中。
- “BS” 列表示每个实例对应的基站数量。
- “MIP Gap” 表示求解器找到的最佳整数在籍解与检测到的下界之间的相对差距值。
- “Opt Gap” 报告了所提出的BPC算法得到的最优解值与CPLEX找到的最佳整数解之间的差异。
如果求解器在规定的时间限制内收敛到最优解,则在 “Opt” 列中输入“✓”,否则留空。
T a b l e 4 Table 4 Table4 显示,在预设的时间限制内,CPLEX 可以在 16 16 16 个选定实例中的 7 7 7 个实例中收敛到最优解。此外,求解器在 13 13 13 个实例中找到了最优解,其中近一半未能证明其最优性。所以文中得到一个很有用的结论,所提出的模型 AM 对于有限大小的实例是有效的。然而,随着基站数量的增加,需要更复杂的方法,例如 BPC。
T a b l e 5 Table 5 Table5 总结了 BPC 获得的结果。每个数据集总共包含 16 16 16 个实例,仓库编号 “W H” 列从 1 1 1 到 4 4 4 不等,停机时间 T = 3 T = 3 T=3 小时。最佳解决实例的数量在 “Opt” 列中报告。
在这里,有的人可能就会发现,文中所提出的算法能够在不同设置下有效求解 GDP,将大多数测试实例求解到最优,如“% Solved”一栏所示。
随着仓库数量的增加,问题的复杂性可能会显着增加,从而导致一些未解决的实例,例如组 L − 60 L − 60 L−60 和 L − 72 L − 72 L−72 中的实例。这是因为标签设计算法中的 combinatorial explosion (就是指在解决某些类型的计算问题时,随着问题规模的增大,可能的解决方案数量呈指数级增长的现象),因为每个仓库都可以被多次访问。
但是有可能有人会说,根据仓库属性所引入额外设施是可以减少计算时间的。 M − 48 M -48 M−48 组中的平均 CPU 清楚地表明了这一点,其中具有 4 4 4 个仓库的实例似乎比具有 3 3 3 个仓库的实例更容易处理。
详细内容请阅读原文。
加速技术的影响
从上面三个 T a b l e Table Table 可以发现通过一系列加速技术的应用,显著提高了算法解决复杂组合优化问题的效率。NF 允许路径重复访问节点,大幅减少计算时间。而 SRC 提高线性松弛下界,减少分支定界节点,提升计算效率。启发式定价算法可以快速找到负约简成本列,加速 CG 过程,提高算法稳定性。
5. 管理见解
F i g . 3 Fig. 3 Fig.3 仓库数量的影响
- 随着仓库数量增加,总支出逐渐减少。
- 具有更多仓库选项的情况下,管理者可以更灵活地选择从哪些仓库获取货物,从而最小化成本。
- 增加仓库数量有助于降低总体支出。
在 F i g . 3 Fig. 3 Fig.3 我们可以看到仓库数量从 1 1 1 增加到 4 4 4 时,总体支出明显下降,表明有更多仓库选项可以降低成本。
F i g . 4 Fig. 4 Fig.4 仓库库存对总体支出的影响
- 随着库存水平的增加,更多的基站得到服务,从而可能节省成本。相反,降低库存可能导致平均损失。
- 增加库存水平有助于节省成本。
在 F i g . 4 Fig. 4 Fig.4 我们可以看到库存水平增加一倍时,总体支出明显下降,表明增加库存可以降低成本。
F i g . 5 Fig. 5 Fig.5 仓库数量的影响
- 保持备用电池充电水平相对较高可能导致节省高达 60 % 60% 60% 的成本。相反,当没有任何基站准备好应对突发停电时,目标函数值可能会下降超过 130 % 130% 130% 。
- 保持备用电池充电水平较高有助于减少总体支出。相反,低电池充电水平可能导致较大损失。
所以我们现在可以站在管理的角度去思考,只有维护更多的仓库、提高库存水平以及保持备用电池的充电水平是有效应对突发停电的策略,可以降低成本并提高应急响应能力。
怎么样?是不是很神奇呢?哈哈哈哈哈是的,这也许就是我们喜欢研究这个领域的原因~~~尤其是见到这篇EJOR,鼓励了我未来一定要加倍努力!!!
今天的分享到这里结束咯。不知道你看明白了吗 ~~~
(看得懂或看不懂的小伙伴记得点赞收藏慢慢看多几次哦)
参考文献:
原论文:
Qin, Hu, et al. “The generator distribution problem for base stations during emergency power outage: A branch-and-price-and-cut approach.” European Journal of Operational Research (2024).