回调


回调

Gurobi回调类。回调是一个用户函数,由Gurobi优化器定期调用,以便允许用户查询或修改优化的状态。更准确地说,如果传递一个函数,该函数接受两个参数(模型在哪里)作为参数Model.optimize,您的函数将在优化期间被调用。然后可以调用回调函数Model.cbGet查询优化器,以了解优化状态的详细信息。

可以使用Gurobi回调来监视优化的进程,并修改Gurobi优化器的行为。一个简单的用户回调函数可能调用Model.cbGet生成自定义显示,或者提前终止优化(使用Model.terminate).更复杂的MIP回调可能使用Model.cbGetNodeRelModel.cbGetSolution将解决方案中的值检索到当前节点,然后使用Model.cbCutModel.cbLazy添加一个约束条件来截断那个解,或者Model.cbSetSolution导入由该解决方案构建的启发式解决方案。对于多目标问题,您可以使用Model.cbStopOneMultiObj在多目标MIP问题中,在不停止分层优化过程的情况下中断其中一个优化步骤的优化过程。

Gurobi回调类提供了一组在用户回调函数中使用的常量。类中的第一组常量列出了在哪里用户回调函数的参数。的在哪里参数表示在优化过程中从何处调用用户回调。选项列在回调代码本文档的一部分。

类中的另一组常量列出了什么参数Model.cbGet.的什么参数被用户回调用来指示它想要检索的状态信息片段。完整的选项列表可以在回调代码部分。与在哪里Argument,你引用a什么不断的通过伽马射线爆发。回调.例如,将要求使用单纯的客观值GRB.Callback.SPX_OBJVAL

如果你想把数据传递给你的回调函数,你可以通过模型对象。例如,如果你的程序包含语句model._value= 1在优化开始之前,您的回调函数可以查询model._value.注意,用户数据字段的名称必须以下划线开头。

当使用多个线程解决模型时,用户回调只从单个线程调用,因此您不需要担心回调的线程安全。

注意,不支持从回调中更改参数,这样做可能会导致未定义的行为。

你可以看看callback.py在examples目录中查看如何使用Gurobi回调的详细信息。