回调代码


回调代码

Gurobi回调例程使用了一对参数:在哪里什么.当调用用户回调函数时,在哪里参数指示在Gurobi优化器中的何处调用它(presolve、simplex、barrier、MIP等)。当用户回调希望获得关于优化状态的更详细信息时,什么参数可以传递给适当的得到方法来获取额外的信息(例如,GRBcbget在C语言中,GRBCallback: getIntInfo在c++中,GRBCallback.getIntInfo在Java中,GRBCallback。GetIntInfo在。net,Model.cbGet在Python中)。

有关如何在应用程序中使用回调的更详细信息,请参阅不同Gurobi语言接口的参考手册(C,c++,Java,net,Python).

的可能值在哪里什么参数在下表中列出。注意,不同的Gurobi接口引用这些值的方式略有不同。考虑到单纯形以Value为例。你可以在不同的Gurobi api中引用如下常量:

语言 回调常数
C GRB_CB_SIMPLEX
c++ GRB_CB_SIMPLEX
Java GRB.Callback.SIMPLEX
net GRB.Callback.SIMPLEX
Python GRB.Callback.SIMPLEX

可能的在哪里值:

在哪里 数值 优化器状态
轮询 0 定期轮询回调
PRESOLVE 1 目前执行presolve
单纯形 2 目前在单纯形
米兰理工大学管理学院 3. 目前在MIP
MIPSOL 4 找到一名新的在职管理硕士
MIPNODE 5 当前正在探索MIP节点
消息 6 打印日志消息
障碍 7 目前的障碍
MULTIOBJ 8 目前多目标优化

允许的什么值取决于在哪里论点。有效的组合是:

什么 在哪里 结果类型 描述
运行时 任何除了轮询 经过求解器运行时手机万博登录(秒)。
PRE_COLDEL PRESOLVE int 由presolve删除到这一点的列数。
PRE_ROWDEL PRESOLVE int 由resolve删除到这一点的行数。
PRE_SENCHG PRESOLVE int 通过解到这一点,约束意义的数量改变了。
PRE_BNDCHG PRESOLVE int 由presolve更改到这一点的变量边界的数目。
PRE_COECHG PRESOLVE int 通过解到这一点改变系数的数目。
SPX_ITRCNT 单纯形 当前单纯形迭代计数。
SPX_OBJVAL 单纯形 当前单纯形目标值。
SPX_PRIMINF 单纯形 当前的原始的不可行性。
SPX_DUALINF 单纯形 目前双不可行性。
SPX_ISPERT 单纯形 int 问题是当前困扰吗?
MIP_OBJBST 米兰理工大学管理学院 当前的最佳目标。
MIP_OBJBND 米兰理工大学管理学院 当前最佳目标界限。
MIP_NODCNT 米兰理工大学管理学院 当前探索的节点数。
MIP_SOLCNT 米兰理工大学管理学院 int 找到了当前可行的解决方案。
MIP_CUTCNT 米兰理工大学管理学院 int 应用的切割平面的当前计数。
MIP_NODLFT 米兰理工大学管理学院 当前未探索的节点数。
MIP_ITRCNT 米兰理工大学管理学院 当前单纯形迭代计数。
MIPSOL_SOL MIPSOL 双* 新解的解向量(只有C)。C例程的resultP参数GRBcbget应该指向一个双精度数组,该数组的长度至少与用户模型中变量的数量相同。使用getSolution面向对象接口中的回调方法。
MIPSOL_OBJ MIPSOL 新解的客观值。
MIPSOL_OBJBST MIPSOL 当前的最佳目标。
MIPSOL_OBJBND MIPSOL 当前最佳目标界限。
MIPSOL_NODCNT MIPSOL 当前探索的节点数。
MIPSOL_SOLCNT MIPSOL int 找到了当前可行的解决方案。
MIPNODE_STATUS MIPNODE int 当前MIP节点的优化状态(参见状态码章节以获取更多信息)。
MIPNODE_OBJBST MIPNODE 当前的最佳目标。
MIPNODE_OBJBND MIPNODE 当前最佳目标界限。
MIPNODE_NODCNT MIPNODE 当前探索的节点数。
MIPNODE_SOLCNT MIPNODE int 找到了当前可行的解决方案。
MIPNODE_REL MIPNODE 双* 当前节点的优化状态为GRB_OPTIMAL(仅C)时的松弛解。C例程的resultP参数GRBcbget应该指向一个双精度数组,该数组的长度至少与用户模型中变量的数量相同。使用getNodeRel面向对象接口中的回调方法。
BARRIER_ITRCNT 障碍 int 当前的屏障迭代计数。
BARRIER_PRIMOBJ 障碍 当前关卡迭代的原始目标值。
BARRIER_DUALOBJ 障碍 当前关卡迭代的双重目标值。
BARRIER_PRIMINF 障碍 当前关卡迭代的原始不可行性。
BARRIER_DUALINF 障碍 当前关卡迭代的双重不可行性。
BARRIER_COMPL 障碍 当前关卡迭代的互补冲突。
MULTIOBJ_OBJCNT MULTIOBJ int 当前的目标数量已经优化。
MULTIOBJ_SOLCNT MULTIOBJ int 找到了当前可行的解决方案。
MULTIOBJ_SOL MULTIOBJ 双* 新解的解向量(只有C)。C例程的resultP参数GRBcbget应该指向一个双精度数组,该数组的长度至少与用户模型中变量的数量相同。使用getSolution面向对象接口中的回调方法。
MSG_STRING 消息 char * 正在打印的消息。

请记住,必须将适当的前缀添加到什么在哪里上面列出的名字,取决于你使用的语言。

回调的笔记

请注意,轮询回调不允许检索任何附加信息。提供它是为了允许交互式应用程序频繁地重新获得控制权,以便它们能够保持应用程序的响应性。

面向对象的接口有专门的方法来获得现有的或松弛的解决方案。而在C语言中,你会使用GRBcbget,可以使用getSolutiongetNodeRel在面向对象接口中。请参阅回调描述c++,Java,net,或Python为进一步的细节。

请注意,MIPNODE在根节点求解期间,每一次切割都将调用回调函数。的MIPNODE_NODCNT值将保持为0,直到根节点完成。如果您在根节点期间查询松弛值,则第一个MIPNODE回调将在没有切割平面的情况下给予松弛,最后一个将在所有根切割应用后给予松弛。

注意,多目标优化算法解决一系列优化问题。在每个解中MULTIOBJCallback将被调用。此外,如果原始模型是MIP,则会调用与MIP相关的回调函数,如果原始模型是LP,则会调用与LP相关的回调函数。