回调


回调

例子:回调

我们考虑的最后一个例子是回调,它演示了Gurobi回调的使用。回调用于报告优化的进度或修改Gurobi求解器的行为。手机万博登录要使用回调函数,用户需要编写一个实现所需行为的例程。该例程在优化开始时传递给Gurobi优化器,并在优化过程中定期调用该例程。用户例程的一个参数是在哪里值,指示从优化过程中调用回调的位置。用户回调例程可以调用优化库来查询某些值。的回调部分Gurobi参考手册获取更精确的细节。

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

GRBcbget(cbdata,其中,GRB_CB_MIP_NODCNT, &nodecnt);if (nodecnt > limit) GRBterminate(model);
在Python中,这被实现为:
nodecnt = model. cbget (GRB.Callback.MIP_NODCNT)如果nodecnt >模型。_mynodelimit: model.terminate ()
要获取当前节点计数,用户例程将调用cbget例程(GRBcbget函数,或者cbGet在c++, c#, Java和Python中模型对象的方法)。

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

GRBcbget(cbdata,其中,GRB_CB_MIP_NODCNT, &nodecnt);If (nodecnt - mydata->lastmsg >= 100){…Printf ("%7.0f…",nodecnt,…);}
在Python中:
nodecnt = model.cbGet(GRB.Callback.MIP_NODCNT) if nodecnt % 100 == 0: print(int(nodecnt), "…")
再次,用户回调调用cbGet例程的查询状态的优化。