回调

例子:回调

最后一个例子,我们考虑的是回调,这表明Gurobi回调的使用。回调函数是用来优化的进度报告或修改Gurobi解算器的行为。手机万博登录使用一个回调,用户写程序实现所需的行为。例程传递到Gurobi优化器优化开始时,和优化过程中经常调用的例程。用户程序的一个参数是一个在哪里价值,这表明在优化过程中调用回调。用户回调例程可以调用优化图书馆查询特定的值。我们参考了读者的回调部分Gurobi参考手册为更精确的细节。

我们回调实现了一个简单的例子终止方案:用户通过一个节点数为回调,回调要求优化器终止时,节点数。这是用C实现如下:

GRBcbget (cbdata, GRB_CB_MIP_NODCNT &nodecnt);如果(nodecnt >限制)GRBterminate(模型);
在Python中,这是实现为:
nodecnt = model.cbGet (GRB.Callback.MIP_NODCNT)如果nodecnt >模型。_mynodelimit: model.terminate ()
获得当前节点数,用户程序调用cbget例程(GRBcbget在C语言中,函数或cbGet方法在模型对象c++, c#、Java、Python)。

我们的回调例子也打印进展信息。在C:

GRBcbget (cbdata, GRB_CB_MIP_NODCNT &nodecnt);如果(nodecnt - mydata - > lastmsg > = 100) {…printf (" % 7.0 f……”、nodecnt…);}
在Python中:
nodecnt = model.cbGet (GRB.Callback.MIP_NODCNT)如果nodecnt % 100 = = 0:打印(int (nodecnt),“……”)
用户回调函数调用cbGet日常查询优化的状态。