懒约束的回调类。

命名空间: ILOG.CPLEX
程序集: ILOG.CPLEX(在ILOG.CPLEX.dll 中) 版本:22.1.1.0

语法

C#
 摘要  LazyConstraintCallback : Cplex..::..ControlCallback
Visual Basic
公共 MustInherit  LazyConstraintCallback_
	继承 Cplex..::..ControlCallback

备注

这是一个高级班。

重要信息:

高级课程通常要求对 CPLEX 使用的算法有深刻的理解。 因而它们会提高应用程序中错误行为的风险,而这种行为可能难以调试。 因此,团队鼓励您仔细考虑是否可以用其他类来完成同样的任务。

这是懒惰约束回调类。 该类的扩展实现了用户编写的懒约束回调。 在使用分支-切割搜索解决问题的同时,还能为问题添加懒约束。 这些 "懒约束 "可能有助于模型的制定,并限制问题的可行区域。 与此相反,如果在分支-切割搜索过程中添加的约束条件不会改变活动模型的可行区域,而只是加强了表述,则称为用户切割。 这种约束最好通过Cplex.UserCutCallback添加,因为这种区别使Cplex有可能执行更多的预分解还原。 但是,通过用户切回调来添加懒约束是错误的。

懒约束背后的理念是,在求解 MIP 时,如果不包含这些约束,求解的 LP 就能保持较小的规模。 不过,Cplex会在懒惰约束被违反后立即将其纳入 LP。 换句话说,Cplex计算出的解决方案能确保满足所有已添加的懒约束条件。

如果使用 "LazyConstraintCallback,则可以自由添加切分项,这些切分项可能会砍掉对模型来说可行的解,而 "UserCutCallback则不同。 在UserCutCallback 的情况下,您实际上是向 CPLEX 承诺,您不会通过回调添加会缩小解空间的切分。

当您查询当前待测方案的信息时,这些信息可能与直接从节点松弛中获取的信息不同。 当要测试的候选解是由启发式而非分支约束树本身生成时,就会出现这种差异。

重要信息:

在 MIP 启动处理期间,可调用惰性约束回调。 在这种情况下,{@link Cplex.LazyConstraintCallback#getSolutionSource() Cplex.LazyConstraintCallback.GetSolutionSource()}返回MIPStartSolution。 返回该值时,需要考虑一些特殊情况:

  • MIP 启动处理在解法过程中很早发生。 此时,尚未设置搜索树,而且尚不存在搜索树节点。 因此,在此情况下,需要节点上下文的大量回调函数将失败。
  • 在处理完此 MIP 启动后,将丢弃在处理 MIP 启动时分隔的惰性约束。 这意味着,对于下一次 MIP 启动或者对于在解法过程后期找到的解法,回调可能必须再次分隔相同的约束。

继承层次结构

系统..::..对象
  ILOG.CPLEX'..::..Cplex '..::..回调
    ILOG.CPLEX..::..Cplex..::..OptimizationCallback
      ILOG.CPLEX..::..Cplex..::..MIPInfoCallback
        ILOG.CPLEX..::..Cplex '..::..MIPCallback
          ILOG.CPLEX..::..Cplex..::..ControlCallback
            ILOG.CPLEX..::..Cplex..::..LazyConstraintCallback

另请参见