2013-04-18 17 views
0

抛光过程中调用了哪些回调函数?更具体地说,抛光过程中发现的每个新解决方案都会有一个回调吗?CPLEX:在抛光过程中发现每个解决方案调用的任何回调?

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

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

这是使用CPLEX 12.1的Windows上的C++,但计划尽快更新到12.5。

回答

0

您是否尝试过C可调用库中的CPXsetincumbentcallbackfunc?我没有研究它在抛光时的行为,但它确实允许用户在突发事件中拒绝解决方案,所以我想它必须在任职者将要更新时被调用 - 包括在抛光期间。

+0

CPXsetincumbentcallbackfunc是C++中IncumbentCallback的C API等价物。 –

+0

@DavidNehme:是的,我没有阅读整个questoon。注册现任回叫会做任何预防措施吗?我想假设时间到第一次解决方案的变化只是分支和搜索搜索的变化之一,但我想首先排除C++库怪异。 (当我发现关于“EpLin”的时候,我从C++库中尖叫了起来,而且我认为我已经看到它默认会做一些未公开的数据检查。) – tmyklebu

相关问题