回调
回调
例子:回调我们考虑的最后一个例子是回调
,它演示了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
例程的查询状态的优化。