使用C#上的给定初始解决方案启动CPLEX(Concert技术)

时间:2017-05-15 12:33:56

标签: c# cplex mixed-integer-programming

我想用CPLEX-C#解决MILP问题。我的问题的规模很大,为了改善CPU时间,我想使用初始解决方案。我想将此解决方案添加到cplex中,并开始使用此给定的初始解决方案解决问题。我使用了以下代码:

     try
        {
            startvar = new INumVar[numberOfAllNode * numberOfAllNode];
            startval = new double[numberOfAllNode * numberOfAllNode];

            for (int i = 0, idx = 0; i < numberOfAllNode; i++)
                for (int j = 0; j < numberOfAllNode; j++)
                {
                    startvar[idx] = X[i][j];
                    startval[idx] = start[i][j];
                    idx++;
                }

            startvar = null;
            startval = null;

            cplex.AddMIPStart(startvar, startval,Cplex.MIPStartEffort.SolveMIP);

        }
    catch (ILOG.Concert.Exception)
        {
            throw;
        }

在这段代码中,我有多维数组决策变量X[i][j](二元决策变量),值等于start[i][j]start[i][j]的值存储为double [] array作为参数。当我运行代码时,出现以下错误:

Warning:  No solution found from 1 MIP starts.

Root node processing (before b&c):
  Real time             =    5.07 sec. (2238.50 ticks)
Parallel b&c, 4 threads:
  Real time             =    0.00 sec. (0.00 ticks)
  Sync time (average)   =    0.00 sec.
  Wait time (average)   =    0.00 sec.
                          ------------
Total (root+branch&cut) =    5.07 sec. (2238.50 ticks)
Couldn't Solve The Problem! 

我有两个问题: 1)模型的哪一部分我要把这段代码? (我的意思是在所有约束和添加目标值并调用addMin或addMax之后或之前?)

2)当我推荐startvar = null; startval = null;时,我有以下错误:

An unhandled exception of type 'ILOG.CPLEX.Cplex.UnknownObjectException' occurred in CPLEX.exe

Additional information: CPLEX Error: object is unknown to IloCplex 

如果您能帮忙解决这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

Error in using addMIPStart() in CPLEX C++非常相似,但在C#中。

我通常会在模型构建结束时调用AddMIPStart(),就在solve()之前。那是(对我来说)接听电话的“自然”场所。

如果模型中存在任何约束或目标中未提及的变量,那么当CPLEX从Concert表达式等中提取内部模型时,它将不会将它们包含在其内部模型中。然后,如果您尝试为这些变量设置值,CPLEX将无法识别它们。我会检查你的mip start中的所有变量是否真的被包含在你的约束或目标中。