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

本文详细介绍了Gurobi优化器的Callback功能,包括Callback的性质、作用和注意事项。Callback是一个抽象类,用于在优化过程中进行监控和修改行为。用户可以通过创建其子类并实现callback()方法,获取优化进度信息,甚至在特定点终止优化或添加约束。回调函数在多线程求解时仍保持线程安全,但不支持在回调中更改参数。
摘要由CSDN通过智能技术生成

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值