主要介绍模型中有多少约束条件,多少变量。上图下面的是系数统计。
预求解:使用presolve算法简化模型。
示例输出显示,presolve能够删54406除行和5340列,这需要2.94秒。预解部分的第三行显示了预解后模型的大小。
Presolved: 24178 rows, 9828 columns, 177620 nonzeros
这是传递给simplex优化器的模型的大小。请注意,为该模型计算的解决方案在simplex完成后会自动转换为原始问题的解决方案(在这个过程中通常称为uncrush),但这个uncrush步骤是透明的,不会产生日志输出。
最后两行显示了传递给分支切割算法的模型的大小以及剩余变量的类型。
小结:在预求解过后,我们的模型变量规模由原先的:
11376 continuous, 3792 integer (3792 binary)
变成了:
Variable types: 4334 continuous, 5494 integer (5494 binary)
(为什么后面的增加了捏?)
root relaxation,如果这一步耗费时间比较长,会自动将log展开。
Nodes部分(前两列)提供了关于搜索进展的一般定量信息。第一列显示到目前为止已经探索的分支和剪切节点的数量,而第二列显示搜索树中仍未探索的叶子节点的数量。输出行开头会有一个H,这表明通过MIP启发式(H)找到了一个新的可行解。
Current Node部分提供了在分支和切割树中研究的特定节点的信息。它显示了相关松弛的目标,分支和切割树中节点的深度,以及在相关松弛中具有非整数值的整数变量的数量。(松弛变量的数目)
Objective Bounds部分提供了一个可行解的最重要的目标值的信息(即,当前可行解的目标值),以及搜索树的叶子节点提供的当前目标边界。最佳目标值总是在这两个值之间。本节的第三栏(差距)显示了两个客观边界之间的相对差距。当此间隙小于MIPGap参数时,优化终止。
日志的Work部分提供了到该点为止已经执行了多少工作的信息。第一列显示了分枝和切割树中每个节点执行的单纯形迭代的平均次数。最后一列显示自解算开始以来所经过的时间。
注意,所研究的节点计数通常在较长一段时间内保持为0。这意味着Gurobi MIP求解器正在处理根节点。Gurobi求解器通常会在根节点上花费大量的精力,生成切割平面并尝试各种启发式方法,以减少后续的分支和切割树的大小。
-
Explored 1073 nodes (52496 simplex iterations) in 20.95 seconds (21.51 work units):
- "Explored 1073 nodes": 表示在求解过程中探索了1073个节点,这些节点代表了不同的决策分支或搜索路径。
- "(52496 simplex iterations)": 表示在求解中进行了52496次单纯形迭代来求解线性规划。
- "in 20.95 seconds": 表示求解过程耗时20.95秒。
- "(21.51 work units)": 表示计算量,用于度量算法执行的工作量。
-
Thread count was 16 (of 16 available processors):
- 表示在计算中使用了16个线程,这利用了所有可用的处理器核心。
-
Solution count 7: 545275 545277 545857 ... 546446:
- "Solution count 7": 表示在求解过程中找到了7个解。这意味着在搜索空间中找到了7个满足问题约束条件的可行解。
- 后续列出的数字(如545275、545277、545857等)是每个找到的解的标识符或数值表示。
这是线性规划求解器的最优解报告。让我逐步解释其中的内容:
-
Optimal solution found (tolerance 1.00e-04):
表示找到了最优解。在线性规划中,最优解指的是满足所有约束条件并使目标函数取得最小或最大值的解。"(tolerance 1.00e-04)" 表示在判断解是否最优时所使用的容差。这里的容差为1.00e-04,表示解被认为是最优的阈值范围。 -
Best objective 5.452745580311e+05:
表示找到的最优解对应的目标函数值为5.452745580311乘以10的5次方,即545274.5580311。 -
Best bound 5.452214150495e+05:
表示最优解的最佳边界值为5.452214150495乘以10的5次方,即545221.4150495。这个值提供了一个上界,告诉我们最优解的可能性范围。 -
Gap 0.0097%:
表示最优解的最优性间隙(optimality gap),即目标函数值与最佳边界值之间的差距,以百分比表示。在这种情况下,最优性间隙为0.0097%,非常接近最佳边界,表明找到的解接近最优解。
在这个示例中,Gurobi求解器只需要大约20秒的时间就可以将模型求解到最优,并且它使用了16个线程(线程数可以通过threads参数进行限制)。最佳可行解目标与最佳界之间的差距是gap 0.0097%,这产生了一个最优终止状态,因为实现的差距小于默认MIPGap参数值(容忍值)。
(仅供个人学习参看,侵删)