理解gurobi求解器日志

学习和了解gurobi求解器日志对于理解算法和数学模型有很大帮助,所以加以记录。本文主要记录了simplex和MIP的求解日志。

Header

1
2
3
Optimize a model with 755 rows, 2756 columns and 8937 nonzeros
Model fingerprint: 0x22935346
Variable types: 0 continuous, 2756 integer (0 binary)

展示了模型的大小以及整数变量数目。

1
2
3
4
5
Coefficient statistics:
Matrix range [1e+00, 1e+04]
Objective range [1e+00, 1e+04]
Bounds range [1e+00, 1e+00]
RHS range [1e+00, 1e+04]

这个信息给出了一个非常粗略的指示,说明您在解决模型时是否可以预期数值问题。

Simplex Logging

单纯形日志有三部分,presolve部分,求解过程和总结部分

Presolve Section

1
2
3
Presolve removed 2349 rows and 3378 columns
Presolve time: 0.04s
Presolved: 3722 rows, 8852 columns, 30908 nonzeros

第一步是使用presolve算法简化模型。
示例输出显示,presolve能够删除2349行和3378列,这需要0.04秒。预解部分的最后一行显示了预解后模型的大小。这是传递给simplex优化器的模型的大小。请注意,为该模型计算的解决方案在simplex完成后会自动转换为原始问题的解决方案(在这个过程中通常称为uncrush),但这个uncrush步骤是透明的,不会产生日志输出。

Progress Section

在每个输出行五列显示单纯形迭代执行的数量,当前的目标函数值,原始的不可行性的程度(计算违反约束的绝对值之和),对偶不可行性的程度(计算违反对偶约束的绝对值之和),和花费的时间(以挂钟时间计算)。Gurobi求解器中默认的单纯形算法是对偶单纯形,它试图在执行单纯形轴心来改进目标的同时保持对偶可行性。

Summary Section

1
2
Solved in 20370 iterations and 5.75 seconds
Optimal objective 1.126639304e+07

字面意思

MIP Logging

日志也是分为三部分the presolve section, the simplex progress section, and the summary section.

Presolve Section

1
2
3
4
Presolve removed 0 rows and 3 columns
Presolve time: 0.01s
Presolved: 12 rows, 148 columns, 1615 nonzeros
Variable types: 1 continuous, 147 integer (145 binary)

在本例中,presolve能够删除3列。最后两行显示了传递给分支切割算法的模型的大小以及剩余变量的类型。

Progress Section

1
Found heuristic solution: objective 157344.61033

这句话说明gurobi在root relaxation 之前用启发式找到了一个整数可行解

1
Root relaxation: objective 3.889390e+04, 50 iterations, 0.00 seconds

第二个是root relaxation,如果这一步耗费时间比较长,会自动将log展开


Nodes部分(前两列)提供了关于搜索进展的一般定量信息。第一列显示到目前为止已经探索的分支和剪切节点的数量,而第二列显示搜索树中仍未探索的叶子节点的数量。有时,输出行开头会有一个H或字符。这表明通过MIP启发式(H)或分支()找到了一个新的可行解。

Current Node部分提供了在分支和切割树中研究的特定节点的信息。它显示了相关松弛的目标,分支和切割树中节点的深度,以及在相关松弛中具有非整数值的整数变量的数量。(松弛变量的数目)

Objective Bounds部分提供了一个可行解的最重要的目标值的信息(即,当前可行解的目标值),以及搜索树的叶子节点提供的当前目标边界。最佳目标值总是在这两个值之间。本节的第三栏(差距)显示了两个客观边界之间的相对差距。当此间隙小于MIPGap参数时,优化终止。

日志的Work部分提供了到该点为止已经执行了多少工作的信息。第一列显示了分枝和切割树中每个节点执行的单纯形迭代的平均次数。最后一列显示自解算开始以来所经过的时间。

注意,所研究的节点计数通常在较长一段时间内保持为0。这意味着Gurobi MIP求解器正在处理根节点。Gurobi求解器通常会在根节点上花费大量的精力,生成切割平面并尝试各种启发式方法,以减少后续的分支和切割树的大小。

Summary Section

1
2
3
4
5
6
7
8
9
10
Cutting planes:
Gomory: 1
MIR: 17

Explored 313128 nodes (1741251 simplex iterations) in 4.80 seconds
Thread count was 8 (of 8 available processors)
Solution count 7: 40005.1 40697.1 41203.6 ... 157345

Optimal solution found (tolerance 1.00e-04)
Best objective 4.000505414200e+04, best bound 4.000505414200e+04, gap 0.0000%

在这个示例中,Gurobi求解器只需要不到5秒的时间就可以将模型求解到最优,并且它使用了8个线程(线程数可以通过threads参数进行限制)。最佳可行解目标与最佳界之间的差距为0.0%,这产生了一个最优终止状态,因为实现的差距小于默认MIPGap参数值。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2015-2023 galaxy
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信