【论文阅读】(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.mfbz.cn/a/429022.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『Linux从入门到精通』第 ㉕ 期 - System V 共享内存

文章目录 💐专栏导读💐文章导读🐧共享内存原理🐧共享内存相关函数🐦key 与 shmid 区别 🐧代码实例 💐专栏导读 🌸作者简介:花想云 ,在读本科生一枚&#xff0…

9.WEB渗透测试-Linux基础知识-Linux用户权限管理(上)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:8.WEB渗透测试-Linux基础知识-Linux基础操作(二)-CSDN博客 用户管…

详细分析Linux内存知识并释放内存

目录 前言1. 基本知识1.1 free1.2 cat /proc/meminfo1.3 slabtop 2. 清空内存 前言 本篇文章主要分析内存 如果是磁盘空间,推荐阅读:服务器出现根目录磁盘满了解决方法 1. 基本知识 在Linux系统中,查看内存的基本知识包括以下几个方面&…

Nginx配置php起WoWSimpleRegistration服务

WoWSimpleRegistration服务的git地址: GitHub - TrinityCore/WoWSimpleRegistration: Simple Registration page for TrinityCore/AzerothCore/AshamaneCore/CMangos 下载WoWSimpleRegistration 首先git下载: git clone https://github.com/TrinityC…

嵌入式基础知识-信号量,PV原语与前趋图

本篇来介绍信号量与PV原语的一些知识,并介绍其在前趋图上的应用分析。本篇的知识属于操作系统部分的通用知识,在嵌入式软件开发中,同样会用到这些知识。 1 信号量 信号量是最早出现的用来解决进程同步与互斥问题的机制(可以把信…

基于springboot+vue的贸易行业crm系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Ainx的全局配置

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于Ainx系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基础系列…

华硕B660-PLUS主板开机直接BIOS解决方案

一、背景说明 采购了配件,换了主机,主板是华硕的B660,没有显卡。然后把原电脑的固态硬盘和机械硬盘直接移过来。结果开机直接进bios,就是进不了系统,一直进入下面这个页面。 可以读取到两块硬盘,但是没有…

【Windows11】相关问题与解决方案

目录 frp内网穿透windows配置开机启动设置开机自启动内存使用率只有总内存容量的一半kms激活win10无法连接任何密钥管理服务器的解决方法 frp内网穿透windows配置开机启动 参考frp内网穿透windows配置开机启动 设置开机自启动 路径在C:\Users\用户名\AppData\Roaming\Micros…

uniapp实现进度条组件

首先&#xff0c;在uniapp项目中创建一个自定义组件&#xff0c;可以命名为Progress.vue。在Progress.vue中&#xff0c;编写如下代码&#xff1a; <template><view class"progress"><view class"progress-bar" :style"{width: progr…

Matlab 机器人工具箱 符合动力学

文章目录 1 符合化表示1.1 标准DH动力学1.2 改进DH动力学 质量集中在质心1.2 改进DH动力学 质量集中在末端1.3 程序问题1.3.1 Unable to perform assignment because value of type sym is not convertible to double.1.3.2 CAT arguments dimensions not consistent.参考链接1…

YOLOv5独家原创改进:特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合YOLOv5,实现涨点。 将GELAN添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现…

前端学习之HTML(第一天)

什么是HTML HTML是一种用来描述网页的一种语言&#xff0c;HTML不是一种编程语言&#xff0c;而是一种标记语言。 HTML标签 HTML 标签是由尖括号包围的关键词&#xff0c;比如 <html> HTML 标签通常是成对出现的&#xff0c;比如 <b> 和 </b> 标签对中的…

【微服务-Nacos】一篇文章教你搞定Nacos部署

前面我们提到过&#xff0c;在微服务架构中&#xff0c;Nacos注册中心属于核心组件&#xff0c;通常我们会采用高性能独立服务器进行部署&#xff0c;下面我们一起来看看Nacos部署过程&#xff1a; 1、环境准备 因为Nacos是支持windows和Linux系统的&#xff0c;且服务器操作…

订单超时取消如何实现

方法1&#xff1a; DelayQueue&#xff1a;超时作为排序条件&#xff0c;轮询订单头部&#xff0c;若超市&#xff0c;出队进行超时处理 优点&#xff1a;简单 缺点&#xff1a;不能持久化&#xff0c;并发量低 方法2&#xff1a; 方法四&#xff1a;定时调度&#xff08;什…

基于Springboot的无人智慧超市管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的无人智慧超市管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

【项目实践】如何解决并发场景下数据一致性问题

1.背景 并发写场景下&#xff0c;由于微服务的系统环境复杂&#xff0c;不可避免的会出现 【机器、缓存、数据库、依赖服务】等出现问题&#xff0c;导致数据不一致的情况产生。 影响大且广&#xff1a; 1、数据不一致问题在线上可能会产生故障 2、数据不一致会导致长尾错误…

group by报错

# 报错&#xff1a;[42000][1055] Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column base.biz_org_rep.ID which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_grou…

xss.haozi.me:0x08

</style ><script> alert(1)</script>

命名空间(namespace)

定义 在C中&#xff0c;命名空间&#xff08;Namespace&#xff09;是一个特性&#xff0c;用于封装代码并避免名称冲突。命名空间可以看作是一个容器&#xff0c;其中可以包含类、函数、变量、常量、其他命名空间等。通过使用命名空间&#xff0c;我们可以更好地组织代码&…
最新文章