回调代码
回调代码
Gurobi回调例程利用一对参数:在哪里
和什么
。当调用用户回调函数时,在哪里
参数从Gurobi Optimizer中指示它被称为(预定,单纯x,屏障,mip等)。当用户回调希望获得有关优化状态的更详细信息时,什么
参数可以传递给适当的得到
用于获取其他信息的语言的方法(例如,grbcbet.在c,grbcallback :: getintinfo在C ++中,grbcallback.getIntinfo.在Java,grbcallback.getIntinfo.在.NET中,和模型在Python)。
有关如何在应用程序中使用回调的更多详细信息,请参阅不同Gurobi语言接口的参考手册中找到(C那C ++那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相关的回调。