【论文阅读】(2006)Dual-Optimal Inequalities for Stabilized Column Generation

文章目录

  • 摘要
  • 一、介绍
  • 二、对偶最优不等式(Dual-Optimal Inequalities)
  • 三、确定P的最优原始解
  • 四、二元切割下料问题
    • 4.1 约束聚合
    • 4.2 相等约束
    • 4.3 计算结果
  • 五、切割下料问题
    • 5.1 计算结果
  • 六、三元组的深度对偶最优不等式(Deep Dual-Optimal Inequalities for the Triplet)
    • 6.1 计算结果
  • 七、总结


论文来源:(2006)Dual-Optimal Inequalities for Stabilized Column Generation
作者:Hatem Ben Amor 等人


摘要

  • 列生成是求解大规模线性规划问题最成功的方法之一。然而,当问题变得更大时,已知会出现退化困难和长尾效应。幸运的是,一些对偶变量的稳定技术已被证明是有效的。
  • 作者研究了利用两类对偶最优不等式来加速和稳定整个收敛过程。添加到对偶公式中,这些约束被所有或一个子集的对偶最优解所满足。因此,增广对偶问题的最优目标函数值与原问题相同。
  • 向对偶问题添加约束会导致向原始问题添加列,并且可能失去解决方案的可行性。作者提出了两种方法来恢复原始可行性和最优性,这取决于所使用的不等式的类型。
  • 作者对二进制和经典切割库存问题的计算实验,更具体地说,在所谓的三重实例上,表明使用相关的对偶信息对减少列生成迭代次数有巨大的影响。

一、介绍

列生成是大规模优化中最成功的方法之一。它包括通过一次只考虑变量的一小部分来求解巨大的线性规划。考虑线性规划 P P P,也称为主问题,以及它的对偶问题 D D D,其中 A A A 是一个 m × n m × n m×n 矩阵:

在这里插入图片描述
在列生成过程的任意迭代 k k k 中,只处理一个 A A A 的列子集 A k A_k Ak。通过求解一个受限的主问题,得到一个原始可行解 x k ∗ x^*_k xk,以及一个由对偶乘数组成的向量 π k ∗ \pi^*_k πk。有了这些乘数,我们计算矩阵 A A A 中所有列的最小 Reduced Cost 来生成一些具有负 Reudced Cost 的列。如果存在这样的列,就将其加入受限主问题中,否则 ( x k ∗ , π k ∗ ) (x^*_k,\pi^*_k) (xk,πk) 分别是 P P P D D D 的最优解和对偶最优解。


二、对偶最优不等式(Dual-Optimal Inequalities)

假设 P P P D D D 有有限个最优解。令 D ∗ D^* D D D D 的最优解集合,同时假设对偶空间受到一组新的约束条件的限制(它截断了对偶空间的一部分)。

如果 D ∗ ⊆ { π : E T π ≤ e } D^* \subseteq \{\pi : E^T \pi \le e\} D{π:ETπe} ,则 E T π ≤ e E^T \pi \le e ETπe 被称为对偶最优不等式的集合。这些不等式实际上是对偶最优多面体上的有效不等式,即,当添加它们到对偶公式中时,不会削减任何对偶最优解。

如果上述条件不一定全部满足,即条件变为:对于 π ∈ D ∗ \pi \in D^* πD,条件变为 ∅ ≠ D ∗ ∩ { π : E T π ≤ e } \varnothing \neq D^* \cap \{\pi : E^T \pi \le e\} =D{π:ETπe},则 E T π ≤ e E^T \pi \le e ETπe 可以切割对偶最优解的非空子集。因此, E T π ≤ e E^T \pi \le e ETπe 被称为深度对偶最优不等式(deep dual-optimal inequalities)。

事实上,对偶最优不等式是所有对偶最优解都满足的不等式;深度最优不等式是至少有一个对偶最优解满足的不等式。

现在,我们考虑将 E T π ≤ e E^T \pi \le e ETπe 加入 D D D,并令 D ~ \tilde{D} D~ 为加入之后得到的对偶问题,以及相关的原始问题定义为 P ~ \tilde{P} P~

在这里插入图片描述

当添加的约束裁断了对偶可行区域的非空子集时, D ~ \tilde{D} D~ D D D 的一个受限版本。然后通过引入非负变量 y y y 的向量来松弛原始空间,并通过引入由这些变量引起的项 e T y e^T y eTy 来改变目标函数。与变量 y y y 对应的列在原始问题中作为静态列,而不是生成的列。也就是说,它们在列生成之前引入。这确保了在任何列生成迭代中,相应的受限主问题的最优性下计算的对偶乘子都满足添加的约束集合 E T π ≤ e E^T \pi \le e ETπe。因此,这可以看作一种预处理技术。但是,它也可以动态地实现,即在每个列生成迭代结束时选择要添加的不等式,还可以消除冗余的对偶不等式,使主问题求解更加高效。这些策略都是有用的,特别是当在一个非常大的集合中难以选择最佳不等式时。

直观而言,对偶最优不等式越紧,列生成求解过程就越高效。

实际上,这是因为不等式限制了可能的对偶值的集合,并且对偶空间中的震荡在幅度和频率上都减小了。在最优乘子周围,只生成相关的对偶割平面,以更快速地描述拉格朗日对偶函数的下包络。因此,不会生成无用的列。

从原始的观点来看,我们已经知道这个公式是松弛的。另外,这些静态列可能具有使求解过程更有效的特殊结构。当这些列允许考虑许多不需要显式生成的列时,就会出现这种情况(见第四节)。

P , D , P ~ P,D,\tilde{P} P,D,P~ D ~ \tilde{D} D~ 的最优解分别由 x ∗ , π ∗ , ( x ~ ∗ , y ∗ ) x^*,\pi^*,(\tilde{x}^*,y^*) x,π,(x~,y) π ~ ∗ \tilde{\pi}^* π~ 表示。下面的命题给出了当 E T π ≤ e E^T \pi \le e ETπe 为对偶最优不等式时,原问题和修正问题的最优值之间的明显关系。

命题1:如果 D ∗ ∩ { π : E T π ≤ e } ≠ ∅ D^* \cap \{\pi : E^T \pi \le e\} \neq \varnothing D{π:ETπe}=,则 v ( ~ P ) = v ( D ~ ) = v ( D ) = v ( P ) v(\tilde{}P)=v(\tilde{D}) = v(D) = v(P) v(~P)=v(D~)=v(D)=v(P),并且 D ~ \tilde{D} D~ 的任意最优解 π ∗ \pi^* π 也是 D D D 的最优解。

命题2:令 ( x ~ ∗ , y ∗ ) (\tilde{x}^*,y^*) (x~,y) P ~ \tilde{P} P~ 的一个最优解,然后假设 E T π ≤ e E^T \pi \le e ETπe 是对偶最优不等式的一个集合。因此,当 E y ∗ = 0 Ey^* = 0 Ey=0 时, x ~ ∗ \tilde{x}^* x~ P P P 的一个最优解。令 π ~ ∗ \tilde{\pi}^* π~ D ~ \tilde{D} D~ 的一个最优解。尽管 π ~ ∗ \tilde{\pi}^* π~ D D D 的一个对偶最优解,但当 E y ∗ ≠ 0 Ey^* \neq 0 Ey=0 时, x ~ ∗ \tilde{x}^* x~ 对于 P P P 是不可行的(因为 A x ~ ∗ ≠ b A\tilde{x}^* \neq b Ax~=b)。

在这里插入图片描述

因此,从上面的证明可以得出,当 x ~ ∗ \tilde{x}^* x~ 对于 P P P 可行时, e T y ∗ = 0 e^Ty^* = 0 eTy=0


三、确定P的最优原始解

( x ~ ∗ , y ∗ ) (\tilde{x}^*,y^*) (x~,y) P ~ \tilde{P} P~ 的一个最优解, π ~ ∗ \tilde{\pi}^* π~ D ~ \tilde{D} D~ 的一个最优解。当 E y ∗ ≠ 0 Ey^* \neq 0 Ey=0 时, x ~ ∗ \tilde{x}^* x~ 对于 P P P 不可行(因为 A x ~ ∗ ≠ b A \tilde{x}^* \neq b Ax~=b)。

由于我们的目标是获取 P P P 的最优解,因此我们需要一种有效的方法来恢复给定原问题 P ~ \tilde{P} P~ 和对偶问题 D ~ \tilde{D} D~的原始最优性。

接下来,我们考虑添加的对偶不等式或相应的原始列具有特殊解释的情况,允许从 x ~ ∗ \tilde{x}^* x~ 建立 P P P 的最优解。

命题3:假设 P ~ \tilde{P} P~ 的任意一个可行解为 ( x ~ , y ) (\tilde{x},y) (x~,y),它有可能为 P P P 建立一个可行解,使得 c T x ≤ c T x ~ + e T y c^Tx \le c^T\tilde{x} + e^Ty cTxcTx~+eTy。然后,对于任意 P ~ \tilde{P} P~ 的最优解 ( x ~ ∗ , y ∗ ) (\tilde{x}^*,y^*) (x~,y),对应的解 x ~ ∗ \tilde{x}^* x~ 就是 P P P 的最优解。

这种情况发生在稍后考虑的切割下料应用中。然而,当情况并非如此时,需要一种有效的方法来恢复 P P P 的最优解。该过程取决于所使用的对偶不等式的类型。

假设 E T π ≤ e E^T\pi \le e ETπe 是对偶最优不等式的一个集合。通过求解一个稍微修改的问题 P ~ ε \tilde{P}_\varepsilon P~ε(对应的对偶问题为 D ~ ε \tilde{D}_\varepsilon D~ε),可以得到 P P P 的最优解。给定一个标量向量 ε > 0 \varepsilon > 0 ε>0,我们用 E T π ≤ e + ε E^T\pi \le e+\varepsilon ETπe+ε 替换 P ~ \tilde{P} P~ D ~ \tilde{D} D~ 定义中的 E T π ≤ e E^T\pi \le e ETπe

在这里插入图片描述

命题4:令 ( x ~ ε ∗ , y ε ∗ ) (\tilde{x}^*_\varepsilon,y^*_\varepsilon) (x~ε,yε) P ~ ε \tilde{P}_\varepsilon P~ε 的一个最优解,则 y ε ∗ = 0 y^*_\varepsilon=0 yε=0,且 x ~ ε ∗ \tilde{x}^*_\varepsilon x~ε P P P 的一个最优解。

在这里插入图片描述
标量向量 ε \varepsilon ε 必须足够小,以保证应用于 P ~ ε \tilde{P}_\varepsilon P~ε 的列生成的效率。另外,太小的值可能也会导致数值困难和对偶不等式集无效,这取决于现有线性规划求解器使用的参数的准确性。

现在假设 E T π ≤ e E^T \pi \le e ETπe 是深度对偶最优不等式的一个集合。给定 D ~ \tilde{D} D~ 的对偶最优解为 π ~ ∗ \tilde{\pi}^* π~ 和一个标量向量 Δ > 0 \varDelta > 0 Δ>0,定义稳定的原问题 P ˉ ( π ~ ∗ ) \bar{P}(\tilde{\pi}^*) Pˉ(π~) 和对偶问题 D ˉ ( π ~ ∗ ) \bar{D}(\tilde{\pi}^*) Dˉ(π~) 如下:

在这里插入图片描述

稳定的对偶问题 D ˉ ( π ~ ∗ ) \bar{D}(\tilde{\pi}^*) Dˉ(π~) 被构造为对偶解被限制在一个严格包含 D ~ \tilde{D} D~ 的最优解 π ~ ∗ \tilde{\pi}^* π~ 的非空盒子中,该最优解确实是 D D D 的最优解(根据命题1)。利用非负冗余变量 y 1 y_1 y1 和松弛变量 y 2 y_2 y2,给出了相应的稳定的原始问题 P ˉ ( π ~ ∗ ) \bar{P}(\tilde{\pi}^*) Pˉ(π~) 的定义。

给出 E T π ≤ e E^T \pi \le e ETπe 为深度对偶最优不等式的一个集合,则 P P P 的一个最优原始解可以通过一个两阶段的方法获得。首先,我们求解 P ~ \tilde{P} P~ 获得一个 D D D 的对偶最优解 π ~ ∗ \tilde{\pi}^* π~。其次,我们求解稳定的原始问题 P ˉ ( π ~ ∗ ) \bar{P}(\tilde{\pi}^*) Pˉ(π~)。下面的命题表明第二阶段的解就是 P P P 的最优解。

命题5:令 E T π ≤ e E^T \pi \le e ETπe 是一个深度对偶最优不等式的集合, ( x ˉ ∗ , y 1 ∗ , y 2 ∗ ) (\bar{x}^*,y_1^*,y_2^*) (xˉ,y1,y2) P ˉ ( π ~ ∗ ) \bar{P}(\tilde{\pi}^*) Pˉ(π~) 的一个原始最优解。则 x ˉ ∗ \bar{x}^* xˉ P P P 的一个原始最优解。

在这里插入图片描述
注意,上面的证明并不依赖于 D ˉ ( π ~ ∗ ) \bar{D}(\tilde{\pi}^*) Dˉ(π~) 的实际对偶最优解,即 π ˉ ∗ \bar{\pi}^* πˉ 可能等于(也可能不等于) π ~ ∗ \tilde{\pi}^* π~ 。首先用列生成求解松弛原问题 P ~ \tilde{P} P~ 得到 π ~ ∗ \tilde{\pi}^* π~ 的效率主要取决于对偶不等式的紧密性。对于第二阶段,即 P ˉ ( π ~ ∗ ) \bar{P}(\tilde{\pi}^*) Pˉ(π~) 的解,当用严格包含对偶最优解的小框初始化时,赞成列生成的效率(参见第五节)。通过使用在求解 P P P 时已经生成的列,这种效率更有可能得到加强。


四、二元切割下料问题

给定一组宽度为 L L L 的卷和一组物品集合 I = { 1 , 2 , . . . , m } I=\{1,2,...,m\} I={1,2,...,m}(其中每个物品 i ∈ I i \in I iI 具有长度 w i w_i wi 和单位需求)。二元切割下料问题(BCS)的目的是找到满足需求的一组切割模式,同时最小化所使用的卷的数量。

可行的切割模式是一个子集 C ⊂ I C \subset I CI 使得 ∑ i ∈ C w i ≤ L \sum_{i\in C}{w_i} \le L iCwiL。令 Ω \Omega Ω 为所有可行切割模式的集合。广为人知的公式(Gilmore 和 Gomory 1961)使用二元变量: 如果在解决方案中使用了切割模式 p p p ,则 x p = 1 x_p=1 xp=1,否则 x p = 0 x_p=0 xp=0

我们感兴趣的是解这个问题的线性松弛。分别考虑以下原始和对偶线性规划公式 P B C S P_{BCS} PBCS D B C S D_{BCS} DBCS,其中,二元系数 a i p a_{ip} aip 表示模式 p p p 中是否使用了物品 i i i

在这里插入图片描述
原始问题是通过列生成求解的。事实上,二元切割下料问题也可以模拟为一个车辆路径问题,其中车辆和它们的容量分别对用于要切成小块的大卷和它们的宽度。这些模式是通过求解带时间窗的最短路径问题的一种特殊情况(0-1背包问题)得到的。

在作者的例子中,它是在一个无环图上表述的,每个节点上都有一个容量窗口,并通过动态规划求解。

物品大小为整数的大型装箱实例(BCS)往往有几个相同大小的物品,这些物品最好被一个需求等于重复数量的单一物品取代。这种聚合相当于要求相同长度的项对应的对偶变量相等。下面的命题强调了这一点,它表明这些条件确实是深度对偶最优不等式。结果还表明,对于 BCS ,聚合保留了相同的线性规划界。

命题6:对于任意二元切割下料问题的两个物品 i i i j j j ,如果 w i = w j w_i=w_j wi=wj ,则 D B C S D_{BCS} DBCS 存在一个对偶最优解满足 π i ∗ = π j ∗ \pi^*_i = \pi^*_j πi=πj

在这里插入图片描述

作者测试了两种不同的方式来施加这些对偶约束:

  1. 在原始公式中相同项目的约束聚合
  2. 在对偶公式中显式添加相等约束

每种方法对问题的大小和结构有不同的影响。我们分别处理它们。

4.1 约束聚合

相同大小的物品对应的需求约束聚合为一个约束,其右侧需求大于1。因此,一个可行的模式可能会被使用不止一次,一个项目可能会出现不止一次。

4.2 相等约束

对物品集合按照大小降序排序,对于每个物品对 ( i , i + 1 ) (i,i+1) (i,i+1),如果 w i = w i + 1 w_i = w_{i+1} wi=wi+1 ,则在 D ~ B C S \tilde{D}_{BCS} D~BCS 中添加相等约束 − π i + π i + 1 = 0 -\pi_i + \pi_{i+1} = 0 πi+πi+1=0。这将导致在 P ~ B C S \tilde{P}_{BCS} P~BCS 中添加相应的零成本变量 y i , i + 1 y_{i,i+1} yi,i+1 ,在第 i i i 行,其系数为 -1,在第 i + 1 i+1 i+1 行,其系数为 1,其他行系数为 0。列数略有增加,但行数保持不变,背包子问题的大小也保持不变。

4.3 计算结果

作者使用了运筹学库中最难的问题(Beasley 1990)作为测试问题。这是参数 L = 150 , m ∈ { 500 , 1000 } , l m i n ∈ { 1 , 20 } , l m a x = 100 , ( w i ) i ∈ I ∼ U ( l m i n , l m a x ) L = 150,m\in \{500,1000\},l_{min}\in \{1,20\},l_{max}=100,(w_i)_{i\in I} \sim U(l_{min},l_{max}) L=150,m{500,1000},lmin{1,20},lmax=100,(wi)iIU(lmin,lmax) 的四类均匀生成问题(u-problem);

还有一类三联问题(t-problem),其中每个卷被切成恰好三阶而不丢失,包含 m = 501 m = 501 m=501 个项目。物品长度都相对接近于 L / 3 L/3 L/3 ,并且(整数和连续的)最优掷出次数为 m / 3 m/3 m/3 。为每个类生成十个实例,并计算每个类的平均值。

表1给出了使用标准列生成、项目约束聚合和添加相等约束为每个类获得的结果。 L r ( s ) Lr (s) Lr(s) m p ( s ) mp(s) mp(s) s p ( s ) sp(s) sp(s) 分别给出了用于解决线性松弛、主问题和子问题的CPU时间(以秒为单位)(其中 L r ( s ) = m p ( s ) + s p ( s ) Lr (s) = mp(s) + sp(s) Lr(s)=mp(s)+sp(s) ), i t r itr itr 是达到最优性所需的列生成迭代次数, % i t r \% itr %itr 是列生成迭代次数的相对改进。

由于子问题是通过动态规划作为约束最短路径问题来解决的,因此在最优状态下可以使用许多负的降低成本列。因此,在每个列生成迭代中生成几个列。值得注意的是,这两种方法使用相同的列生成器,这并不影响它们之间的比较。

在这里插入图片描述


五、切割下料问题

切割下料问题(CSP)和二元切割下料问题相似,不同之处在于要求 b i b_i bi 为一般正整数。因此,一个项目可以在一个可行的切割模式中出现不止一次。将子问题中的背包约束替换为:

在这里插入图片描述

Gilmore and Gomory(1961)也表明,需求约束中的等号可以用大号或等号代替,并且通过这种简单的转换,列生成求解过程略有加快。线性松弛 P C S P_{CS} PCS 及其对偶 D C S D_{CS} DCS 的公式如下:

在这里插入图片描述
根据Gilmore和Gomory提出的变换,对偶变量只能取非负值。因此, π i ≥ 0 , i ∈ I \pi_i \ge 0 , i\in I πi0,iI 是一组对偶最优不等式。

现在讨论Valerio de Carvalho (2005b)引入的对偶子集不等式。利用命题3,作者证明了这样一个事实,即有可能在给定修改的原始问题的最优解的情况下重建原始最优解,从而证明了这些切割的使用。在本文中,作者证明了这些对偶切割实际上是切料问题的对偶最优不等式:

命题7:对于每个物品 i i i 和 子集 S ⊂ I S\subset I SI D C S D_{CS} DCS 的任意一个最优解满足: w i ≥ ∑ l ∈ S w l = > π i ∗ ≥ ∑ l ∈ S π l ∗ w_i \ge \sum_{l \in S}{w_l} => \pi_i^* \ge \sum_{l\in S}{\pi^*_l} wilSwl=>πilSπl

在这里插入图片描述
∣ S ∣ = 1 |S|=1 S=1 时,这些子集不等式有一个有趣的解释。 D D D 的任意最优解都满足排序:

在这里插入图片描述

此外,将这个结果应用于相同长度的两个项目 i i i j j j,我们得到 D C S D_{CS} DCS 的所有对偶最优解都满足 w i = w j = > π i ∗ = π j ∗ w_i = w_j =>\pi^*_i=\pi^*_j wi=wj=>πi=πj

然而,这并不适用于二元切割下料问题,因为在生成二元切割模式时,存在一个隐含的约束,即一个项目不能切割超过一次,而对于经典的所谓切割下料问题,一个项目可能被切割任意整数次,而与该项目的需求无关。

例子:考虑一个二元切割下料问题,其中 m = 2 , w 1 = 4 , w 2 = 4 , W = 10 m=2,w_1=4,w_2=4,W=10 m=2,w1=4,w2=4,W=10 并且需求都为1。它只有三种可行的二元模式: { [ w 1 , w 2 ] , [ w 1 ] , [ w 2 ] } \{[w_1,w_2],[w_1],[w_2]\} {[w1,w2],[w1],[w2]},对应的非负原始变量为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3。对偶域定义为:

在这里插入图片描述
很容易验证,对偶点 ( 1 , 0 ) (1,0) (1,0) ( 0 , 1 ) (0,1) (0,1) 是与原最优解 x 1 = 1 , x 2 = x 3 = 0 x_1=1,x_2=x_3=0 x1=1,x2=x3=0 对应的对偶最优解,即使这些对偶解不满足 π 1 = π 2 \pi_1=\pi_2 π1=π2 w 1 = w 2 w_1=w_2 w1=w2)。的确,命题6只是规定存在一个使 π 1 = π 2 \pi_1=\pi_2 π1=π2 的对偶最优解(此处为上述对偶最优解的凸组合)。

现在,把这个例子看作一个经典的库存问题,也就是说,我们从模式生成中去掉了二元限制。两种新的模式是可行的: [ w 1 , w 1 ] , [ w 2 , w 2 ] [w_1,w_1],[w_2,w_2] [w1,w1],[w2,w2]。这些用两个新的约束修改了对偶空间: 2 π 1 ≤ 1 2\pi_1 \le 1 2π11 2 π 2 ≤ 1 2\pi_2 \le 1 2π21。唯一的对偶最优解现在是 π 1 = π 2 = 1 / 2 \pi_1=\pi_2=1/2 π1=π2=1/2,这是命题7的直接结果,其中证明了所有最优解满足 π 1 = π 2 \pi_1=\pi_2 π1=π2

子集不等式的数量是指数的,我们必须选择一个合理的数量来使用。如果 ∣ S ∣ |S| S 是固定的,则可能的切割次数是 m m m 的多项式。最简单的情况是 ∣ S ∣ ≤ 2 |S| \le 2 S2。当 ∣ S ∣ = 2 |S|=2 S=2 时,可能的对偶约束数为 O ( m 3 ) O(m^3) O(m3)。为了提高效率,特别是当 m m m 很大时,Valerio de Carvalho (2005b) 对每个 i ∈ I i\in I iI 只使用了一个对偶约束(如果有的话)。这个不等式是使用最小的索引 j j j ( 对应最大的宽度 w j w_j wj ) 生成的,如果存在这样的值,那么存在 k k k,使得 w i ≥ w j + w k w_i \ge w_j + w_k wiwj+wk。这将会导致向 D ~ C S \tilde{D}_{CS} D~CS 中添加 O ( m ) O(m) O(m) 个约束,并向原始问题 P ~ C S \tilde{P}_{CS} P~CS 中添加列。

添加到原始问题的列具有特殊的含义。引入零成本变量 y i , S y_{i,S} yi,S 的系数为 -1(row= i i i),1(row= l ∈ S l\in S lS)和 0(其他行)。这允许原始问题在包含 i i i 的任何可行模式中用 S S S 的项替换项目 i i i

因此,包含 i i i 的切割模式的存在以及变量 y i , S y_{i,S} yi,S 对应的列的存在隐式地保证了所有地可行切割模式的存在,其中 i i i 被集合 S S S 中的项所取代,因此不需要生成这些列。这种推理可以递归地应用于 S S S 中的某些项,因此也隐含地考虑了一些具有 ∣ S ∣ ≥ 3 |S|\ge 3 S3 的子集不等式。

最后,上述段落给出了一种直接的方法来重建一个原始最优解。对于任何覆盖项 i i i ,覆盖模式必须通过将 i i i 替换为 S S S y i , S > 0 y_{i,S}>0 yi,S>0 的项来修改。

5.1 计算结果

在这里插入图片描述


六、三元组的深度对偶最优不等式(Deep Dual-Optimal Inequalities for the Triplet)

t问题中的三元组是这样构建的在最优状态下损失为零。表2显示了给定它们的大小,这些问题相当困难,并且需要非常多的列生成迭代。然而,对于没有损失的 P C S P_{CS} PCS 实例,有一个非常有趣的结果。事实上,从物品的长度可以直接计算出最优掷出次数,即所有物品的总长度除以 L L L ,而且还可以得到对偶最优解:

命题8:考虑一个没有损失的 P C S P_{CS} PCS 实例,则 π i ∗ = w i / L \pi^*_i = w_i /L πi=wi/L 是一个对偶最优解。

在这里插入图片描述

如命题5,给定已知的对偶最优解 π ~ ∗ \tilde{\pi}^* π~ ,可以使用以下深度对偶最优不等式 π ~ ∗ − Δ ≤ π ≤ π ~ ∗ + Δ \tilde{\pi}^* - \varDelta \le \pi \le \tilde{\pi}^* + \varDelta π~Δππ~+Δ ,其中 Δ > 0 \varDelta > 0 Δ>0,是一个小的标量向量。这些框不等式限制了所有列生成迭代期间的对偶值。注意到使用松弛变量 y 2 = b y_2=b y2=b 已经可以获得基本解,并且对于相应的基(单位矩阵),对偶乘数对于 Δ \varDelta Δ 几乎是最优的,并且取值 ( π ~ ∗ + Δ ) (\tilde{\pi}^* + \varDelta) (π~+Δ),从而加速了问题 P ˉ ( π ~ ∗ ) \bar{P}(\tilde{\pi}^*) Pˉ(π~) 的解决。

6.1 计算结果

在这里插入图片描述


七、总结

本文讨论了对偶信息对列生成效率的作用。对偶最优不等式不会切割任何对偶最优解,而深度的对偶最优解可能会移除其中的一个非空子集。

这些不等式的使用限制了对偶空间,同时放宽了原始可行集。从而限制了对偶乘子可能的中间值集合,更快地得到对偶最优解。然而,原始可行性可能会丢失,需要恢复原始最优解。在某些情况下,对偶不等式对于当前的应用具有特殊的意义,并且可以在给定修正问题的解的情况下建立原始最优解。当这是不可能的时候,作者提出了两种一般的方法来恢复原始的可行性和最优性,每一种都针对一个类型的不等式。

众所周知,用于二进制切割下料问题的聚合技术可以看作是实现一组深度对偶最优不等式的隐式方法。这种隐式方法大大减少了行数,因此无法确定对偶不等式的实际影响。因此,作者测试了这些对偶约束的显式实现,结果是在不改变行数的情况下增加了原始变量的数量。我们在减少列生成迭代数方面也观察到同样的改善,这证实了相关对偶信息的重要性。

对于切割下料问题,作者证明了Valerio de Carvalho (2005b)引入的子集不等式可以加速列的生成。

作者还表明,当使用由易于计算的对偶最优解导出的对偶最优盒不等式求解三元组实例时,通常被认为是困难的切料实例,实际上非常容易。

计算结果再次表明,显著的对偶信息明显有利于列生成求解过程。一个类似的程序已经被提出用于设计线性规划的有效交叉方法(Ben Amor et al . 2006)。给定由内点算法提供的最优内原解和对偶最优解 π ∗ \pi^* π,用单纯形算法重新求解原问题,同时在对偶公式加入小的对偶盒不等式(如 π ∗ ± 1 0 − 3 \pi^* ±10^{-3} π±103 )。这个简单的程序是非常稳定和相当快的。

最后,切割下料问题是一个结构良好的优化问题,但许多其他组合优化问题也具有良好的结构。对于切割下料问题的结果表明,寻找其他组合问题的对偶最优解的更好的表征是有意义的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++ 乘积尾零问题(蓝桥杯)

如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650,4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 1173 6866 3397 4759 7557 3070 2287 1453 9899…

代码随想录算法训练营第三十六天|435. 无重叠区间, 763.划分字母区间, 56. 合并区间

435. 无重叠区间 - LeetCode 思路: 本题是一个去除重叠区间的问题, 首先按照区间的 end_point 排序, 从第二个区间开始, 如果第二个区间和第一个区间有交集, 就要移除第二个区间。 因为容易证明之后的区间区间如果和…

做测试还是测试开发,选职业要慎重!

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试) 突然发现好像挺多人想投测开和测试的,很多人面试的时候也会被问到这几个职位的区别,然后有测…

每日五道java面试题之mysql数据库篇(三)

目录: 第一题. 百万级别或以上的数据如何删除?第二题. 前缀索引第三题. 什么是最左前缀原则?什么是最左匹配原则?第四题. B树和B树的区别第五题. 使用B树和B树好处 第一题. 百万级别或以上的数据如何删除? 关于索引:…

【设计】设计一个web版的数据库管理平台后端精要

需求 springboot设计开发一个系统,在这个系统的数据库表中存放着2000个数据库实例,有MySQL、Oracle、sql server3种数据库类型,用户可以在页面上选择不同的实例,连接这些实例上的数据库,来执行业务sql 实现 Service…

光伏储能MPPT控制系统如何进行浪涌静电保护?

MPPT(Maximum Power Point Tracking)是太阳能电池板光伏发电系统中重要的一种控制技术。MPPT控制器能够实时侦测太阳能板的发电电压,并追踪最高电压电流值(VI),使系统以最大功率输出对蓄电池充电&#xff0…

06 - ip route和route -n的区别

1 ip route和route -n的区别 ip route 和 route -n 都是用于查看和管理Linux系统路由表的命令。但下面是它们的区别: ip route:是Linux系统中的现代工具,它属于iproute2套件;它提供了更多的选项,可以更精确地控制路由表…

使用git的小笔记

平时工作中使用git存储项目代码, 常用的命令 拉取仓库代码 git clone http://100.100.100.100:9080/my_test/test.git 拉取到以后, 先切换到自己的分支 git checkout my_name 一顿魔改代码 然后 add 新增的文件或者修改的文件 git add * 然后提交 并写…

【go从入门到精通】什么是go?为什么要选择go?

go的出生: go语言(或Golang)是Google开发的开源编程语言,诞生于2006年1月2日下午15点4分5秒,于2009年11月开源,2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持…

拦截大语言模型API调用 无需深究文档源码

背景众多库致力于通过自动重构或创建提示符来优化大语言模型的输出。这些建库宣称能够使大语言模型的输出更加: 安全(例如:安全护栏) 可预测(例如:智能指导) 结构化(例如:指令生成器) 鲁棒(例如:语言链) … 或者针…

如何在 Windows 上安装 ONLYOFFICE 文档 8.0

使用社区版,您可以在本地服务器上安装 ONLYOFFICE 文档,并将在线编辑器与 ONLYOFFICE 协作平台或其他热门系统集成在一起。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一个功能强大的文档编辑器,支持处理文本文档、电子表格、演示文稿、可填写…

FPGA时序约束与分析--数据到达路径和数据需求路径

文章目录 前言一、定义二、时序模型三、公式推导前言 时序约束的定义–设计者根据实际的系统功能,通过时序约束的方式提出时序要求; FPGA 编译工具根据设计者的时序要求,进行布局布线;编译完成后, FPGA 编译工具还需要针对布局布线的结果,套用特定的时序模型( FPGA 器件…

Andorid 13 修改默认音量区间、默认音量值

Andorid 13 默认音量区间是 [0,15] ,默认音量 5。 需求是:音量区间为 [0,100] ,默认音量 30 。 找到对应产品的 device.mk ,添加如下 #default volume PRODUCT_PROPERTY_OVERRIDES \ro.config.media_vol_steps100 \ro.config.…

无人机遥感在农林信息提取中的实现方法与GIS融合应用

在新一轮互联网信息技术大发展的现今,无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节,逐步摆脱人力依赖;在施肥灌溉环节构建智慧节能系统&a…

openlayers 路线规划 高德坐标转wgs84 wgs84转天地图

在https://blog.csdn.net/qq_36287830/article/details/136321365改善而来的 需要进行坐标转换 不转换你画的线和实际数据是无法一一对应的 会出现偏移 关键代码 模拟请求后获取到数据场景 fetch(./a.json).then(async (res) > {//等待数据格式化为Jsonlet json await res.…

【C++第三课 - 类和对象中】构造函数、析构函数、拷贝构造函数

目录 类的6个默认成员函数构造函数自己写的构造函数默认生成的构造函数 析构函数概念特征 拷贝构造函数特征 运算符重载 、 >、 < 赋值重载Date类的完善构造函数的完善用复用 类的6个默认成员函数 默认成员函数&#xff1a;不写编译器也会默认生成一份 构造函数 自己…

利用Python批量替换文档中特定参数的数值

情况&#xff1a;有一份文档需要将其中252个不同值的"sza“替换为另外一组数据 &#xff1b; 其中&#xff0c;替换参数值.txt 的格式就是把要替换的数据粘贴到 txt中&#xff0c;成一列就可以了&#xff1b; PS&#xff1a;要是想改文本文档里的其他参数&#xff0c;把代…

UnityShader——09数学知识3

方阵 行与列数量相等的矩阵,n*n阶矩阵 对角矩阵 当对角线以外的矩阵内元素全为0&#xff0c;则称之为对角矩阵&#xff0c;对角矩阵的前提是必须是方阵 单位矩阵 对角线元素全为1&#xff0c;其余元素全为0&#xff0c;属于对角矩阵的一部分 矩阵和向量 把1 * n阶矩阵称…

多个地区地图可视化

1. 配置Json文件 1.1 获得每个省份的json数据 打开 阿里云数据可视化平台 主页。 在搜索框中输入所需省份。 将json文件下载到本地。 1.2 将各省份的json数据进行融合 打开 geojson.io 主页 点击 open&#xff0c;上传刚刚下载的 json 文件&#xff0c;对多个省份不断…

【CSP试题回顾】201409-1-相邻数对

CSP-201409-1-相邻数对 解题代码 #include <iostream> #include <vector> using namespace std;vector<int>arr; int num;int main() {ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n;cin >> n;for (int i 0; i < n; i){int t;…