回调代码


回调代码

Gurobi回调例程利用一对参数:在哪里什么。当调用用户回调函数时,在哪里参数从Gurobi Optimizer中指示它被称为(预定,单纯x,屏障,mip等)。当用户回调希望获得有关优化状态的更详细信息时,什么参数可以传递给适当的得到用于获取其他信息的语言的方法(例如,grbcbet.在c,grbcallback :: getintinfo在C ++中,grbcallback.getIntinfo.在Java,grbcallback.getIntinfo.在.NET中,和模型在Python)。

有关如何在应用程序中使用回调的更多详细信息,请参阅不同Gurobi语言接口的参考手册中找到(CC ++java.。网, 和Python)。

请注意,不支持从回调中的更改参数,这样做可能会导致未定义的行为。

可能的值在哪里什么参数列于下表中。请注意,这些值以不同的Gurobi接口以略微不同的方式称为。考虑这一点单纯乳头值作为示例。您将引用此常量,如不同的Gurobi API所示:

回调常数
C grb_cb_simplex
C ++ grb_cb_simplex
java. grb.callback.simplex
。网 grb.callback.simplex
Python grb.callback.simplex

可能的在哪里值是:

在哪里 数值 优化器状态
轮询 0. 定期投票回调
寄生 1 目前正在执行预普明
单纯乳头 2 目前在单纯形
m 3. 目前在MIP
MIPSOL. 4. 找到了一个新的MIP现任者
mipnode. 5. 目前探索MIP节点
信息 6. 打印日志消息
屏障 7. 目前在障碍中
multiob. 8. 目前在多目标优化中

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

什么 在哪里 结果类型 描述
运行 任何除外轮询 双倍的 经过了求解器运行手机万博登录时间(秒)。
pre_coldel. 寄生 预定删除到这一点的列数。
pre_rowdel. 寄生 预定删除的行数为此点。
Pre_senchg. 寄生 通过预定授予该点来改变约束感应的数量。
pre_bndchg. 寄生 预定授权改变了可变界限。
pre_coechg. 寄生 通过预定刻度来改变的系数数。
spx_itrcnt. 单纯乳头 双倍的 当前的单纯性迭代计数。
spx_objval. 单纯乳头 双倍的 当前的单纯性目标值。
spx_priminf. 单纯乳头 双倍的 目前的原始不可行性。
spx_dualinf. 单纯乳头 双倍的 目前的双重不可行性。
SPX_ISPERT. 单纯乳头 当前是扰乱的问题吗?
mip_objbst. m 双倍的 目前最佳目标。
mip_objbnd. m 双倍的 目前最佳的客观约束。
mip_nodcnt. m 双倍的 当前探索节点计数。
mip_solcnt. m 目前发现可行解决方案的计数。
mip_cutcnt. m 当前施加切割平面数。
mip_nodlft. m 双倍的 当前未开发的节点计数。
mip_itrcnt. m 双倍的 当前的单纯性迭代计数。
mipsol_sol. MIPSOL. 双倍的 * 新解决方案的解决方案矢量(仅限C)。C例程的结果论点grbcbet.应该指向一个双打的数组,这至少只有用户模型中的变量的数量。使用Getsolution.面向对象接口中的回调方法。
mipsol_obj. MIPSOL. 双倍的 新解决方案的客观价值。
mipsol_objbst. MIPSOL. 双倍的 目前最佳目标。
mipsol_objbnd. MIPSOL. 双倍的 目前最佳的客观约束。
mipsol_nodcnt MIPSOL. 双倍的 当前探索节点计数。
mipsol_solcnt. MIPSOL. 目前发现可行解决方案的计数。
mipnode_status. mipnode. 当前MIP节点的优化状态(参见状态码有关详细信息的部分)。
mipnode_objbst. mipnode. 双倍的 目前最佳目标。
mipnode_objbnd. mipnode. 双倍的 目前最佳的客观约束。
mipnode_nodcnt. mipnode. 双倍的 当前探索节点计数。
mipnode_solcnt. mipnode. 目前发现可行解决方案的计数。
mipnode_rel. mipnode. 双倍的 * 当其优化状态为GRB_Optimal时,当前节点的放松解决方案(仅限C)。C例程的结果论点grbcbet.应该指向一个双打的数组,这至少只有用户模型中的变量的数量。使用getnoderel.面向对象接口中的回调方法。
Barrier_Itrcnt. 屏障 当前的障碍迭代计数。
Barrier_Primobj. 屏障 双倍的 目前屏障迭代的原始物镜价值。
Barrier_Dualobj. 屏障 双倍的 当前屏障迭代的双目标值。
Barrier_Priminf. 屏障 双倍的 目前屏障迭代的原始缺失性。
巴里尔_Dualinf. 屏障 双倍的 当前障碍迭代的双重缺陷。
巴尔蒂尔_Compl. 屏障 双倍的 互补性违反当前屏障迭代。
multibj_objcnt. multiob. 目前已经优化的目标计数。
multibj_solcnt. multiob. 目前发现可行解决方案的计数。
multibj_sol. multiob. 双倍的 * 新解决方案的解决方案矢量(仅限C)。C例程的结果论点grbcbet.应该指向一个双打的数组,这至少只有用户模型中的变量的数量。使用Getsolution.面向对象接口中的回调方法。
msg_string. 信息 char 正在打印的消息。

请记住,必须将相应的前缀添加到什么或者在哪里上面列出的名称,具体取决于您正在使用的语言。

回调笔记

请注意轮询回调不允许重新定位任何其他信息。提供它以允许交互式应用程序经常重新获得控制,以便它们可以维护应用响应性。

面向对象的接口具有获得现任或放松解决方案的专门方法。而在c中你会使用grbcbet., 你用Getsolution.或者getnoderel.在面向对象的接口中。请参阅回调描述C ++java.。网, 或者Python有关详细信息。

请注意mipnode.在根节点求解期间每个剪切传递将调用回调一次。这mipnode_nodcnt.值将保持为0,直到根节点完成。如果在根节点期间查询放宽值,则首先mipnode.回调将使没有切割平面放松,并且在应用所有根切割后,最后一次将放松。

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