C++ SCIP解算器中的SCIPgetSolVal未返回解决方案值
我使用SCIP已经有一段时间了,这些功能从来没有出现过问题。然而,我最近运行了几个输入场景,以从scip获取不同的结果。 有一种情况是SCIPgetSolVal函数不能正常工作 如果我执行SCIPprintBestSol(scipProblem,NULL,TRUE),它会显示结果,并且它们在限制范围内。当我下一次使用SCIPgetSolVal函数得到结果时,它会返回大小为“1E+99”的值 请注意,它总是有效的,除了某些情况外,我认为最符合逻辑的是输入数据有问题,但我认为在这种情况下,SCIPprintBestSol将不会有可行的结果 在我看来,这似乎是一个内存分配问题,但我不明白为什么会发生,以及如何解决它 我不知道它是否相关,但它在windows上的c++中C++ SCIP解算器中的SCIPgetSolVal未返回解决方案值,c++,scip,C++,Scip,我使用SCIP已经有一段时间了,这些功能从来没有出现过问题。然而,我最近运行了几个输入场景,以从scip获取不同的结果。 有一种情况是SCIPgetSolVal函数不能正常工作 如果我执行SCIPprintBestSol(scipProblem,NULL,TRUE),它会显示结果,并且它们在限制范围内。当我下一次使用SCIPgetSolVal函数得到结果时,它会返回大小为“1E+99”的值 请注意,它总是有效的,除了某些情况外,我认为最符合逻辑的是输入数据有问题,但我认为在这种情况下,SCIPp
SCIPsolve(scipProblem);
SCIPprintBestSol(scipProblem, NULL, TRUE); //VALID RESULTS
/* SCIP Problem Results */
SCIP_Status status = SCIPgetStatus(scipProblem);
if(status == SCIP_STATUS_INFEASIBLE)
{
result = false;
}
else
{
for(int t=0; t<100; t++)
{
result(t,0) = SCIPgetSolVal(scipProblem, sol, probVars.at(t));
cout<< "Solution :"<< result(t,0) << endl;//WRONG RESULTS
}
}
SCIPsolve(scipProblem);
SCIPprintBestSol(scipProblem,NULL,TRUE)//有效结果
/*SCIP问题结果*/
SCIP_状态状态=SCIPgetStatus(scipProblem);
如果(状态==SCIP_状态_不可行)
{
结果=假;
}
其他的
{
对于(int t=0;t只是为了确保这不是一个非常简单的问题:您的实例至少有100个变量?如何设置sol
和probVars
?我很抱歉没有添加更多的代码,但这是一个非常大的问题,有许多其他变量,这将使其非常广泛。在其他变量中,它可以很好地获取值。这个特定的变量带来了问题。是的,它正好是100。我从getBestSol获得的sol,但老实说,如果我用NULL替换sol,它会给我相同的结果。因此,在代码段顶部打印出最佳解决方案后,您会调用getBestSol?如果您调用SCIPprintSol(scipProblem,sol,NULL,TRUE),会得到什么结果?状态是什么?我知道这不是不可行的,但还有一些其他可能的状态代码,SCIP不一定能找到解决方案。要扩展到@Gerald,代码段中似乎缺少一行:SCIP_SOL*SOL=SCIPgetBestSol(SCIP)
只是为了确保这不是一个非常简单的问题:您的实例至少有100个变量?如何设置sol
和probVars
?很抱歉没有添加更多的代码,但这是一个非常大的问题,并且有许多其他变量,这将使其非常广泛。在其他变量中,它可以很好地获取值。这个特定的变量带来了问题。是的,它正好是100。我从getBestSol得到的sol,但老实说,如果我用NULL替换sol,它会给我相同的结果。所以,在代码段顶部打印出最佳解决方案后,您会调用getBestSol?如果您调用SCIPprintSol(scipProblem,sol,NULL,TRUE),会得到什么结果?状态是什么?我知道这不是不可行的,但还有一些其他可能的状态代码,SCIP不一定能找到解决方案。要扩展到@Gerald,代码段中似乎缺少一行:SCIP_SOL*SOL=SCIPgetBestSol(SCIP);