障碍日志


障碍日志

屏障日志可分为五个部分:预解决部分、屏障预处理部分、屏障进度部分、交叉进度部分和总结部分。

Presolve节

如前所述,Gurobi Optimizer在优化模型时的第一件事是应用apresolve算法以简化模型。Gurobi日志的第一部分提供了关于presolve在这方面成功程度的信息。考虑以下来自NETLIB模型的示例输出dfl001.

Presolve删除2349行和3378列Presolve time: 0.04s Presolve: 3722行,8852列,30908非零
示例输出显示,presolve能够删除2349行和3378列,这需要0.04秒。预解部分的最后一行显示了预解后模型的尺寸。这是传递给屏障优化器的模型的大小。请注意,一旦barrier完成,为该模型计算的解决方案将自动转换为原始问题的解决方案(在一个经常被调用的过程中)uncrushing),但是这个uncrush步骤是透明的,不会产生日志输出。

屏障预处理部分

在barrier法的每次迭代中求解的线性系统的因子矩阵可能相当大,计算起来相当昂贵。为了减少这个计算的成本,barrier算法的第一步是计算这个矩阵的行和列的减少填充的重新排序。这个步骤可能相当昂贵,但是在随后的barrier迭代的降低成本中可以收回成本。

一旦这个减少填充的重新排序被计算出来,Gurobi优化器输出与屏障因子矩阵相关的信息:

Barrier统计:AA' NZ: 3.657e+04 Factor NZ: 8.450e+05(大约12 mb内存)Factor Ops: 3.944e+08(少于1秒每次迭代)线程:8
的下三角形中的非对角线项的数量< span > < / span > AA美元美元^ T < span > < / span >。在barrier算法的每次迭代中都要因式分解该矩阵的缩放版本,因此Cholesky因子的结构取决于的结构< span > < / span > AA美元美元^ T < span > < / span >

接下来的两条线表示因子矩阵中的非零值的数量,以及因素所需的浮点操作的数量。请注意,日志还提供了屏障算法需要多少内存的估计,以及每个障碍迭代需要多长时间:这些是粗略的估计,这意味着提供模型将如何解决模型的困难程度。如果您想获取对整体解决方案时间的估计,请注意,大多数模型在大约50个迭代中实现了融合,但有许多例外情况。交叉运行时通常与几个障碍迭代的成本相当,但是这一时间可以随着模型特征而显着变化。

最后一行显示了将用于执行barrier迭代的线程数。

有时你可能会在本节中看到另外两行:

密色:3自由变量:20
第一个表示约束矩阵中有多少列被视为密集的。第二个表示模型中有多少变量是自由的。密集的柱和自由变量有时会导致势垒求解器中的数值困难,所以知道它们何时出现是很有用的。手机万博登录

进展部分

Gurobi屏障输出的第三部分提供有关屏障方法进展的信息:

客观剩余磨机原始双原始双重套件0 1.47340463E + 12 -1.05838204E + 09 1.49E + 04 2.46E + 02 1.94C + 09 0S 1 6.13234163C + 11 -3.97416254C + 10 5.97E + 03 5.98E + 068.82E + 08 0S 2 2.89634303E + 11 -9.20268188E + 10 2.54E + 03 2.24E + 06 3.81C + 08 0s 3 6.57753936C + 10 -9.40746258C + 10 2.39E + 02 2.87E + 05 5.17E + 070s 4 2.44710457E + 10 -2.59852944E + 10 3.16E + 01 3.01C + 04 9.00E + 06 0s 5 6.74069830E + 09 -1.78169224C + 10 4.01C + 00 2.01C + 04 3.17E + 06 0S 6 1.93163205E+09 -3.10778084E + 09 2.46E-01 3.13E + 03 5.62E + 05 0s 7 6.54973737E + 08 -6.89946649C + 08 4.40E-02 5.35E + 02 1.47E + 05 0S 8 2.44764500E + 08 -3.47987016E + 08 1.47E-02 4.02E + 02 6.46E + 04 0s 9 1.35906001E + 08 -1.41063037E + 08 7.16E-03 1.66C + 02 3.01C + 04 0S 10 9.29132721C + 07 -6.69973369E + 07 4.58E-03 7.60E + 01 1.73E + 04 0s
每个输出行中的七列显示对该点执行的障碍迭代的数量,当前屏障迭代的原始和双目标值,当前迭代的原始障碍的大小和双重侵入性(计算为无穷大的规范原始和双重载体分别),互补性违反电流原始和双迭代的幅度(原始溶液的点乘积和双重减少的成本向量),以及所花费的时间量(测量使用挂钟时间)。当原始的不可行性,双重缺失和互补性满足障碍收敛公差(使用)BarConvTol参数)时,该解决方案被声明为最优的,优化就完成了。

与单纯形优化器和MIP优化器不同,barrier优化器为每个迭代生成一个日志线,独立于displayinterval.参数。

有时候你会在barrier进度日志的迭代计数之后看到一个星号:

15 2.42800468E + 04 8.54543324E + 04 1.68E + 02 1.02E-09 8.30E + 04 0s 16 4.05292006E + 03 4.65997441C + 04 4.65997441C + 04 1.82C + 02 2.50-01 4.25E + 04 0s 17 * 4.88742259E + 084.30781025E + 10 5.17E + 00 1.31E-01 2.52E-02 0S 18 * 1.21709951C + 06 3.3909951C + 06 3.39471138C + 13 8.55E-06 3.14E-06 3.14E-06 3.14E-05 0S 19 * -1.38021972E + 06 3.31580578E +16 3.42E-08 8.20E-09 3.22E-08 0s 20 * 1.25182178C + 06 3.31575855C + 19 6.54E-12 7.34E-09 3.222E-11 0
这表明该模型可能是原始不可行或对偶不可行。请注意,这些中间的不可行性迹象并不一定会变成不可行性的证明,所以恒星可能会在以后的迭代中消失。

交叉部分

屏障日志的第四部分提供了关于交叉步骤的信息。此部分仅在选择交叉时存在(通过通过)交叉参数。Crossover将barrier算法生成的内部点解转换为基本解。

跨界的第一步是求变量的上界,才能得到一个有效的基本解。默认情况下,这是首先对二元变量,然后对原始变量。这一阶段的进展将通过交叉日志的这一部分进行跟踪……

交叉日志... 1610剩余DINF 0.000000000E + 00 1S 0 DPUSH剩余DINF 0.000000000E + 00 1S 144 PPUSHES与PINF 5.7124800E-03 1S 0 PPUSHES剩余PINF 5.7124800E-03 1S PUPF5.7124800E-03,DINF 8.1488315E-07 1S
每根线都指示剩余的推动步骤数量,当前解决方案中的不可行性以及经过的屏障时间。

在完成推进阶段后,交叉有一个不一定是最优的基本解决方案。结果基传递给单纯形,单纯形完成优化…

迭代目标原始Inf. Dual Inf. Time 1700 1.1266352e+07 5.712480e-03 0.000000e+00 1s
simplexlog每一行输出的五列显示交叉算法(包括推入步骤)中到那个点执行的simplex迭代的次数,当前基础的目标值,当前基础的原始不可行性的大小(计算为所有约束和约束违例的绝对值之和),双重不可行性的大小(计算为所有双重约束违例的绝对值之和),以及交叉算法到那个点所花费的时间(用挂钟时间测量)。当原不可行和对偶不可行均为零时,基是最优的,优化是完整的。

总结部分

屏障日志的最终部分提供了摘要信息。它提供了所执行的屏障算法的工作摘要,包括迭代计数和运行时,并提供有关优化结果的信息。解决了最优性的模型的摘要看起来像这样:

在1868年迭代解决,1.05秒最优目标1.126639304E + 07
其他终止状态产生不同的摘要。例如,用户中断将产生如下所示的摘要:
停止在7482次迭代和3.41秒解决中断
达到时间限制将产生如下的总结:
停止在9221次迭代和5.00秒超过时间限制