障碍日志

障碍日志

障壁日志可分为五个部分:前溶解部分、障壁预处理部分、障壁进展部分、交叉进展部分和总结部分。

Presolve节

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

Presolve删除2381行和3347列时间:0.12秒。Presolve: 3690行,8883列,31075非零
示例输出显示,presolve能够删除2381行和3347列,这需要0.12秒。预溶段的最后一行显示了预溶后模型的尺寸。这是传递给屏障优化器的模型的大小。注意,一旦屏障完成(在一个经常调用的过程中),为该模型计算的解决方案就会自动转换为针对原始问题的解决方案uncrushing),但是这个uncrush步骤是透明的,并且不产生日志输出。

障碍预处理部分

势垒法在每次迭代中求解线性系统的因子矩阵可能相当大,计算起来相当昂贵。为了减少这种计算的代价,势垒算法的第一步是计算这个矩阵的行和列的一个减少填充的重新排序。这个步骤可能相当昂贵,但是成本可以通过随后的障碍迭代的降低成本得到补偿。

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

障碍统计:密集cols: 10个自由方案:3个AA' NZ: 9.353e+04因子NZ: 1.139e+06(大约14兆内存)因子Ops: 7.388e+08(每次迭代大约2秒)
第一行表示约束矩阵中有多少列被视为密集。第二行表示模型中有多少变量是空闲的。密集的列和自由变量有时会导致障壁求解器的数值困难,因此有时知道它们的存在是有用的。手机万博登录注意,只有当模型包含密集的列或自由变量时,才会打印这些行。

下一行显示的下三角形中非对角线条目的数量< span > < / span > AA美元美元^ T < span > < / span >.在势垒算法的每次迭代中都分解出这个矩阵的一个缩放版本,所以Cholesky因子的结构取决于的结构< span > < / span > AA美元美元^ T < span > < / span >

最后两行表示因子矩阵中非零值的数量,以及分解它所需的浮点运算的数量。请注意,日志还提供了屏障算法将需要多少内存的估计,以及每次屏障迭代将需要多长时间:这些是粗略的估计,旨在提供模型求解难度的一般感觉。如果您想获得总体解决时间的估计,请注意,大多数模型在大约50次迭代中实现收敛,但也有许多例外。交叉运行时的成本通常与几个障碍迭代的成本相当,但这一次可能会有很大的差异,这取决于模型的特征。

进展部分

Gurobi势垒输出的第三部分提供了势垒方法进展的信息:

目标剩余Iter原始对偶原始双惠时间0 1.11502515 e + 13 -3.03102251 e + 08年7.65 e + 05年9.29 2.68 e + e + 07年09年2 s 1 4.40523949 -8.22101865 e + e + 12 09年3.10 4.82 e + e + 05年07年1.15 e + 09年3 s 2 1.18016996 e + 12 -2.25095257 7.39 e + e + 10 04 1.15 3.37 e + e + 07年08年4 s 3 2.24969338 e + 11 -2.09167762 e + 10 1.01 e + 04 2.16 e + 06 5.51 e + 07年5 s 4 4.63336675 e + 10 -1.44308755 e + 108.13 e + 02年4.30 9.09 e + e + 05 06年6 s 5 1.25266057 e + 10 -4.06364070 e + 09年1.52 8.13 e + e + 02年04 2.21 e + 06年7 s 6 1.53128732 e + 09年-1.27023188 e + 09年9.52 1.61 e + e + 00 04 3.23 e + 05年9 s 7 5.70973983 e + 08年-8.11694302 e + 08年2.10 5.99 e + e + 00 03 1.53 e + 05年10 s 8 2.91659869 e + 08年-4.77256823 e + 08年5.89 e-01 5.96 e-08 8.36 e + 04 11年代9 1.22358325 e + 08年-1.30263121 e + 08年6.09 7.36 e-02 e-07 2.73 e + 04 12 s 106.47115867e+07 -4.50505785e+07 1.96e-02 1.43e-06 1.18e+04 13s
七列在每个输出行显示屏障的迭代的数量表现这一点,原始的和双目标迭代值为当前的屏障,原始的大小和双infeasibilites为当前迭代(计算的infinity-norms原始和双残余向量,分别),当前原始迭代和对偶迭代(原始解和对偶降低成本向量的点积)的互补性违背的大小,以及花费在该点上的时间量(使用挂钟时间测量)。当原不可行性、对偶不可行性和互补性满足势垒收敛容限时(用BarConvTol参数),解被声明为最优,优化完成。

与simplex和MIP优化器不同,barrier优化器为每次迭代生成一个日志行,独立于的值DisplayInterval参数。

有时候你可能会在关卡进程日志的迭代计数后看到一个星号:

15 2.428004e +03 8.54543324e+04 1.68e+02 1.02e +04 0s 16 4.05292006e+03 4.6599744e +04 1.82e+02 2.5099744e +04 0s 17* 4.8874225e +08 4.30781025e+10 5.17e+00 1.311e - 025e 0s 18* 1.21709951e+06 3.39471138e+13 8.55e-06 3.14148e -05 0s 19* -1.38021972e+06 3.31580578e+16 3.42e-08 8.20e-09 3.22e-08 0s 20* 1.25182178e+061、1、1、2、3、3、3、3、3、3、3、3、3
这表明模型可能是原始不可行的,也可能是对偶不可行的。注意,这些不可行的中间迹象不一定会变成不可行的证明,所以恒星可能会在以后的迭代中消失。

交叉部分

屏障测井的第四部分提供了有关交叉步骤的信息。此部分仅在交叉被选择时出现(通过交叉参数。交叉转换由屏障算法产生的内点解为基本解。

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

交叉日志……1592 dpush剩余与DInf 0.0000000e+00 2s 0 dpush剩余与DInf 2.8167333e-06 2s 180 PPushes剩余与PInf 0.0000000e+00 2s 0 PPushes剩余与PInf 0.0000000e+00 2s Push phase complete: PInf 0.0000000e+00, DInf 2.8167333e-06 2s
每一行表示还有多少push步骤、当前解决方案中不可行的数量和经过的障碍时间。

在完成推进阶段后,交叉的基本解决方案不一定是最佳的。将得到的基传递给simplex, simplex完成优化…

迭代目标原始Inf.对偶Inf.时间1776 1.1266396e+07 0.000000e+00 0.000000e+00 2s
单工日志的每个输出行中的五列显示了在交叉算法中到该点执行的单工迭代次数(包括推步),当前基的目标值,当前基的原始不可行性的大小(计算为所有约束和有界违反的绝对值之和),对偶不可行性的大小(计算为所有双重约束违反的绝对值之和),以及跨界算法到该点所花费的时间(使用挂钟时间测量)。当原始不可行性和对偶不可行性均为零时,基是最优的,优化完成。

总结部分

屏障日志的最后一部分提供了总结信息。它提供了barrier算法所执行工作的总结,包括迭代计数和运行时,并提供了关于优化结果的信息。最优解模型的总结如下:

优化目标1.126639605e+07
其他终止状态产生不同的摘要。例如,一个用户中断将生成如下的摘要:
停止在7482次迭代和3.41秒解决中断
达到时间限制后,总结内容会是这样的:
在9221次迭代中停止,超过时间限制5.00秒