回调
回调
Gurobi回调类。回调是一个用户函数,由Gurobi优化器定期调用,以便允许用户查询或修改优化的状态。更准确地说,如果传递一个函数,该函数接受两个参数(模型
和在哪里
)作为参数Model.optimize,您的函数将在优化期间被调用。然后可以调用回调函数Model.cbGet查询优化器,以了解优化状态的详细信息。
可以使用Gurobi回调来监视优化的进程,并修改Gurobi优化器的行为。一个简单的用户回调函数可能调用Model.cbGet生成自定义显示,或者提前终止优化(使用Model.terminate).更复杂的MIP回调可能使用Model.cbGetNodeRel或Model.cbGetSolution将解决方案中的值检索到当前节点,然后使用Model.cbCut或Model.cbLazy添加一个约束条件来截断那个解,或者Model.cbSetSolution导入由该解决方案构建的启发式解决方案。对于多目标问题,您可以使用Model.cbStopOneMultiObj在多目标MIP问题中,在不停止分层优化过程的情况下中断其中一个优化步骤的优化过程。
Gurobi回调类提供了一组在用户回调函数中使用的常量。类中的第一组常量列出了在哪里
用户回调函数的参数。的在哪里
参数表示在优化过程中从何处调用用户回调。选项列在回调代码本文档的一部分。
类中的另一组常量列出了什么
参数Model.cbGet.的什么
参数被用户回调用来指示它想要检索的状态信息片段。完整的选项列表可以在回调代码部分。与在哪里
Argument,你引用a什么
不断的通过伽马射线爆发。回调
.例如,将要求使用单纯的客观值GRB.Callback.SPX_OBJVAL
.
如果你想把数据传递给你的回调函数,你可以通过模型对象。例如,如果你的程序包含语句model._value= 1
在优化开始之前,您的回调函数可以查询model._value
.注意,用户数据字段的名称必须以下划线开头。
当使用多个线程解决模型时,用户回调只从单个线程调用,因此您不需要担心回调的线程安全。
注意,不支持从回调中更改参数,这样做可能会导致未定义的行为。
你可以看看callback.py
在examples目录中查看如何使用Gurobi回调的详细信息。