我想用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
如果您能帮忙解决这个问题,我将不胜感激。
答案 0 :(得分:0)
与Error in using addMIPStart() in CPLEX C++非常相似,但在C#中。
我通常会在模型构建结束时调用AddMIPStart(),就在solve()之前。那是(对我来说)接听电话的“自然”场所。
如果模型中存在任何约束或目标中未提及的变量,那么当CPLEX从Concert表达式等中提取内部模型时,它将不会将它们包含在其内部模型中。然后,如果您尝试为这些变量设置值,CPLEX将无法识别它们。我会检查你的mip start中的所有变量是否真的被包含在你的约束或目标中。