CPLEX 报告的 "user cuts applied" 的含义?

The meaning of "user cuts applied" reported by CPLEX?

我一直在研究可以建模为整数线性规划的组合优化问题。我在 visual studio 2017 和 CPLEX1271 中将其实现为 c++ 项目。由于约束呈指数级增长,因此我实现了惰性约束回调和用户削减回调。 CPLEX 报告的结果如下所示:

Clique cuts applied:  1
Cover cuts applied:  4
Mixed integer rounding cuts applied:  1
Zero-half cuts applied:  13
Lift and project cuts applied:  2
Gomory fractional cuts applied:  3
User cuts applied:  2116
Solution status         =       Optimal
Gap     =       0
Elapsed time    =       14.235
Objectvie value         =       16675
Number of nodes         =       57
Number of cuts  =       2116

我想知道条目 User cuts applied 是什么意思。是用户削减回调和惰性约束回调都添加的约束数量,还是只有用户削减回调?

日志中报告的条目“已应用用户削减”给出了添加的约束数量 通过用户削减回调和惰性约束回调。 用户削减和惰性约束之间的区别仅在分离阶段完成。一旦问题添加了裁剪,它们就不再区分了。

Thanks for your answer! I’d also like to know how can I obtain the numbers of these two cuts, respectively

您好。 正如我所说,一旦将削减添加到问题中,用户削减和惰性约束之间就没有区别了。因此,如果你想区分用户切割的数量和惰性约束的数量,你必须在将它们从相应的回调添加到问题时自己计算。 但请注意,在某些情况下,您从回调中添加的削减数量可能大于日志中报告的“应用削减”数量。首先,并非用户尝试添加的所有用户 cuts/lazy 约束都必须添加到问题中(例如,如果用户尝试添加重复的切割或问题中已经存在的切割,则不会添加它们)。其次,如果用户指定用户削减 and/or 惰性约束可以被清除,其中一些可能会添加到问题中,但随后会被删除。 换句话说,“应用的切割”数量是指优化结束时问题中出现的切割数量,而不是优化期间添加到问题中的切割总数。