2017-05-15 92 views
0

我想用CPLEX-C#解决MILP问题。我的问题的规模很大,为了提高CPU时间,我想使用初始解决方案。我想将这个解决方案添加到cplex中,并开始用这个给定的初始解决方案来解决问题。我用下面的代码:用C#上的给定初始解决方案启动CPLEX(Concert技术)

 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 

我想如果你能欣赏帮助解决这个问题。

回答

0

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

我通常会在solve()之前调用AddMIPStart()在模型构建结束时。这对我来说是“自然”的地方。

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

+0

感谢您的回复。我的问题有3个决策变量(2个二进制和1个继续)在我的MIPSTART中,我只给出其中一个值(X [i] [j])的值。我是否需要为其余两个变量设置初始值? –

+0

我不认为你需要提供所有变量的值。您报告的错误是您尝试为不在模型中的变量提供mipstart值时得到的错误。另外,如何只有2个二进制和1个连续变量 - 代码中的变量数量应该是一个平方数,即numberOfAllNode * numberOfAllNode。 numberOfAllNode有多大? – TimChippingtonDerrick

相关问题