使用Concert C ++进行LP迭代舍入

时间:2014-04-29 21:19:19

标签: c++ rounding linear-programming cplex

我正在使用Concec ++进行LP迭代舍入。我的ILP和LP编码正常工作。然而,当我尝试迭代地绕LP时,我得到了不可行的洗脱剂。在每次迭代中,我试图找到决策变量x的最大值,它是0-1之间的浮点数并使其为1(实际上我将它作为新约束添加)。然而,有时我会得到不可行的解决方案,实际上不应该是一个案例。错误如下: 不可行的指标约束 预备时间:3.53秒。 错误:cplex错误1217:没有解决方案。

我正在制作图表并尝试找到最短的路径。我的ILP找到了正确的路径。但是我需要用于大图的LP解决方案。为此目的写了一个LP公式。结果我得到了浮点数。在这里,我迭代地将一个边缘舍入为1.最后,我尝试获得一条路径。

我的代码如下:

    do
  { 
        max=0;
       for(int i=0; i<edgesize*2;i++)
       {
        if(cplex.getValue(x[i])>0 && cplex.getValue(x[i])<1 && cplex.getValue(x[i])>max )
        {
            max = cplex.getValue(x[i]);
        }
       }

       if(max !=0)
       {
         for(int i=0; i<edgesize*2;i++)
         {
                if(cplex.getValue(x[i])==max)
                {

                    model.add(x[i]==1);

                    break;
                }

         }


        }
    cplex.extract(model);
    cplex.solve();
    cplex.out() << "Optimal value: " << cplex.getObjValue() << endl;
    it++;


  } while(max !=0);

这里有什么问题?我怎么解决呢?在此先感谢。

1 个答案:

答案 0 :(得分:-2)

我是编程的初学者。 我想通过MILPC

来解决cplex concert technology

我跑的时候 我收到了以下消息

Pr=1.00 X  ILO Array::operator[][](Iloint i): out of bound operation: index superior to size of array
Assertaion failed: (i<_impl->get size()) ||(ILOSTD(cerr)<<”X IloArray::operator[] (Iloint i): out of bounds operation: index superior to size of array”<< ILOSTD(endl), ilo_stop_ assert()).file c:\program file\ibm\ilog\cplex-studio 125\concert\include\ilconcert\iloenv.h, line 2204