0

抛光期间会调用哪些回调?更具体地说,是否有一个回调会为在抛光过程中找到的每个新解决方案调用?

我在 C++ 中有一些(旧)代码使用 MIPInfoCallback 并且在 B&B 期间可以正常调用,但是在抛光过程中它似乎没有被调用,即使抛光发现可能有 20 或 30 个改进的解决方案。该文档指出,在抛光期间通常会调用回调,但可能是 MIPInfoCallback 仅在探索每个节点之前被调用,在我的情况下,抛光不会探索任何额外的节点。

我尝试切换到使用现有回调,但这似乎对我产生了巨大的性能影响 - 只需将回调的类型从 MIPInfoCallback 更改为 IncumbentCallback 即可将获得第一个整数可行解决方案的时间从大约 20 分钟更改为超过 3小时(我真的只是改变回调的类型,保持回调的主体不变)。我怀疑这是因为使用现有回调会在搜索中关闭某些内容。

这是在带有 CPLEX 12.1 的 Windows 上的 C++ 中,但计划很快更新到 12.5。

4

1 回答 1

0

您是否尝试CPXsetincumbentcallbackfunc过 C 可调用库?我没有检查它在抛光时的行为,但它确实允许用户随心所欲地拒绝解决方案,所以我想它必须在现任者即将更新时被调用——包括在抛光期间。

于 2013-04-18T21:40:50.357 回答