回调


回调

例子:打回来

我们考虑的最后一个例子打回来,这表明使用Gurobi回调。回调用于报告优化的进度或修改Gurobi求解器的行为。手机万博登录要使用回调,用户会写入实现所需行为的例程。优化开始时,程序将传递给Gurobi优化器,并且在优化过程中定期调用例程。用户例程的一个参数是一个在哪里值,它指示从优化过程中的位置调用回调。用户回调例程可以调用优化库来查询某些值。我们将读者提交给回调部分Gurobi参考手册有关更多精确的细节。

我们的回调示例实现了一个简单的终止方案:用户将节点计数传递到回调中,并且回调要求优化器终止该节点计数时终止。这是如下所实施的:

GRBCBGET(CBDATA,where,grb_cb_mip_nodcnt,&nodecnt);if(nodecnt>限制)grbterminate(模型);
在Python中,这是:
nodeCnt = model.cbget(grb.callback.mip_nodcnt)如果nodeCnt> model._mynodelimit:model.terminate()
要获取当前节点计数,用户例程调用CBGE.常规(这是grbcbet.在c中的功能,或CBGE.C ++,C#,Java和Python中的模型对象的方法。

我们的回调示例还会打印进度信息。在c:

GRBCBGET(CBDATA,where,grb_cb_mip_nodcnt,&nodecnt);if(nodeCnt  -  mydata-> lastmsg> = 100){... printf(“%7.0f ...”,nodecnt,......);}
在Python:
NodeCnt = model.cbget(grb.callback.mip_nodcnt)如果nodeCnt%100 == 0:print(int(nodecnt),“...”)
再次,用户回调调用CBGE.例程查询优化状态。