我已经编写了一个整数编程模型并使用 SCIP 解决了它。我可以轻松获得最佳解决方案,但我也有兴趣获得接下来的四个最佳解决方案。我可以输入 display allsolutions 来向我展示 SCIP shell 中的一些解决方案,但我最多对其他 4 个解决方案感兴趣,并且希望通过 c++ 程序而不是 shell 来执行此操作。我怎样才能做到这一点?
问问题
502 次
1 回答
3
您可以使用 scip.h 提供的解决方法来执行此操作:
#define SOLSTOPRINT 5;
SCIP* scip;
SCIP_SOL** sols;
int nsols, i;
// ...
// put here your code to create a SCIP instance, read in a problem and call the
// the solving method of SCIP
// ...
sols = SCIPgetSols(scip);
nsols = SCIPgetNSols(scip);
for( i = 0; i < MIN(nsols, SOLSTOPRINT); ++i )
{
SCIP_CALL( SCIPprintSol(scip, sols[i], NULL, FALSE) );
}
SCIP 自动存储从最好到最差的解决方案,因此它足以迭代 -array 的前 5 个解决方案sols
。请注意,默认情况下 SCIP 最多存储找到的最佳 100 个解决方案。您可以通过参数更改此行为limits/maxsol
,例如,通过添加行
SCIP_CALL( SCIPsetIntParam(scip, "limits/maxsol", 200) );
在解决问题之前先到上面的代码。
于 2014-09-29T07:32:06.010 回答