Gurobi优化器使用(二)初识Callback

时间:2024-06-02 07:02:52

callback的解释:

链接

callback在C++ API的解释:

链接

callback回调函数——官方文档翻译:

性质

Gurobi callback class 是一个抽象类,要实现回调,务必创造该类的子类并实现callback()方法.
如果在调用GRBModel::optimize之前将此子类的对象传递给方法GRBModel::setCallback,则该类的callback()方法将被定期调用。根据调用回调的位置,可以获得有关优化进度的各种信息。
请注意,此类包含一个受保护的int成员变量: where . 您可以从callback()方法查询此变量,以确定从何处调用回调。

作用

Gurobi回调既可用于监视优化进度,也可用于修改Gurobi优化器的行为。一个简单的用户回调函数可以调用GRBCallback::getIntInfoGRBCallback::getDoubleInfo方法来生成自定义显示,或者尽早终止优化(使用GRBCallback::abort)。更复杂的MIP回调可以使用GRBCallback :: getNodeRelGRBCallback::getSolution从解决方案中检索到当前节点的值,然后使用GRBCallback::addCutGRBCallback::addLazy添加约束以切断该解决方案,或使用GRBCallback::setSolution导入从该解决方案构建的启发式解决方案。对于多目标问题,可以使用GRBCallback::stopOneMultiObj来中断多目标MIP问题中优化步骤之一的优化过程,而无需停止分层优化过程。

注意事项

使用多个线程求解模型时,仅从单个线程调用用户回调,因此您不必担心回调的线程安全性。
请注意,不支持在回调中更改参数,否则可能导致未定义的行为。

两个重要参数

where —— 回调函数触发点

what ——获取何种信息,what能够获取什么取决于where

C++中Where的标志是在前面加GRB_CB_,如GRB_CB_POLLING

Gurobi优化器使用(二)初识Callback
Gurobi优化器使用(二)初识Callback
Gurobi优化器使用(二)初识Callback

Gurobi优化器使用(二)初识Callback