C++ SCIP解算器中的SCIPgetSolVal未返回解决方案值

C++ SCIP解算器中的SCIPgetSolVal未返回解决方案值,c++,scip,C++,Scip,我使用SCIP已经有一段时间了,这些功能从来没有出现过问题。然而,我最近运行了几个输入场景,以从scip获取不同的结果。 有一种情况是SCIPgetSolVal函数不能正常工作 如果我执行SCIPprintBestSol(scipProblem,NULL,TRUE),它会显示结果,并且它们在限制范围内。当我下一次使用SCIPgetSolVal函数得到结果时,它会返回大小为“1E+99”的值 请注意,它总是有效的,除了某些情况外,我认为最符合逻辑的是输入数据有问题,但我认为在这种情况下,SCIPp

我使用SCIP已经有一段时间了,这些功能从来没有出现过问题。然而,我最近运行了几个输入场景,以从scip获取不同的结果。 有一种情况是SCIPgetSolVal函数不能正常工作

如果我执行SCIPprintBestSol(scipProblem,NULL,TRUE),它会显示结果,并且它们在限制范围内。当我下一次使用SCIPgetSolVal函数得到结果时,它会返回大小为“1E+99”的值

请注意,它总是有效的,除了某些情况外,我认为最符合逻辑的是输入数据有问题,但我认为在这种情况下,SCIPprintBestSol将不会有可行的结果

在我看来,这似乎是一个内存分配问题,但我不明白为什么会发生,以及如何解决它

我不知道它是否相关,但它在windows上的c++中

    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);