manbet体育手机客户端


回调

例子:打回来

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

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

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.例程查询优化状态。