情感测试简介

首页 » 常识 » 诊断 » Gurobi的callback机制学习随
TUhjnbcbe - 2021/5/3 22:02:00
治疗白癜风的外用药 http://baidianfeng.39.net/bdfby/yqyy/

Gurobi的callback机制学习随记

Callback函数的主要作用:获取程序运行中的一些中间信息,或者在程序运行过程中动态修改程序运行状态,如用户有时在求解过程中需要实现一些自定义的高级功能,包括终止优化,加入额外约束条件(割平面)、加入自定义的算法等,不过需要注意不要在callback中改变模型求解参数,这可能会导致未知错误。

Callback函数的定义和使用方法是固定的:

定义:def函数名(model,where):函数体

使用:model.optimize(callback的函数名)

Callback函数使用时涉及到的两个重要参数:

where:回调函数触发点,使用:where==GRB.Callback.XXXX

what:获取何种信息,这取决于触发点where,使用:model.cbGet(GRB.Callback.XXX)

状态where和值what归纳:

.POLLING:使得交互应用程序可以频繁的重新获得控制权,从而保证程序的响应性,注意该轮询回调下是无法查询任何信息;

2.PRESOLVE:在模型预处理的时候触发,用来查询当前预处理对模型的转化信息,如查询预处理删除的变量数、约束数量等;

3.SIMPLEX:查询当前单纯形的信息,如当前单纯形法迭代的次数,目标函数值等;

4.MIP:查询混合整数规划的信息,如当前的最优值,最优界,已探索和未探索的节点数量,当前Gurobi添加的割平面的数量等;

5.MIPSOL:发现新的可行解的时候触发,可以用来查询当前可行解的目标值、变量取值等,也可以向当前模型中添加Lazycut;

6.MIPNODE:探索新的节点的时候触发,注意Gurobi在处理根节点时,每当添加一个新的割平面,也会触发这个节点callback,因此实际中在处理根节点可能会多次调用callback且只有第一次MIPNODE回调报告的是没有添加切割平面的松弛;该callback主要用来查询当前节点的一些信息,如当前节点的优化状态,当前节点的松弛解,也可以用来向模型中添加一般的cut和Lazycut;

7.MESSAGE:用来打印LOG信息;

8.BARRIER:用来查询内点法信息,如内点法迭代次数,对应的目标值等;

9.MULTIOBJ:用来查询多目标的信息,当前已优化的目标数量,当前发现的可行解的数量。注意如果是MIP模型,则MIP相关的callback会被调用,如果是LP模型,则LP相关的callback也会被调用;

what的取值依赖于where!!!

1
查看完整版本: Gurobi的callback机制学习随