1

我已经编写了一个整数编程模型并使用 SCIP 解决了它。我可以轻松获得最佳解决方案,但我也有兴趣获得接下来的四个最佳解决方案。我可以输入 display allsolutions 来向我展示 SCIP shell 中的一些解决方案,但我最多对其他 4 个解决方案感兴趣,并且希望通过 c++ 程序而不是 shell 来执行此操作。我怎样才能做到这一点?

4

1 回答 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 回答