Cplex列出所有模型变量(.NET)

时间:2016-01-22 18:23:05

标签: cplex

有没有办法列出cplex模型中的所有cplex变量?我对C#界面很感兴趣。如果您的模型是从文件中读入的,则Google搜索会导致this solution。如果您的模型尚未从文件中读入,则模型中找不到ILPMatrix(除非您专门创建了LPMatrix)。

我想我可以把它写出来然后再读回来:

Cplex m = new Cplex();
// add lots of variables with lots of different names and constraints
// perhaps even solve the model: m.Solve();

// now list out the variables:
m.ExportModel("myModel.lp");
m.ImportModel("myMOdel.lp");
m.Solve();

IEnumerator mEnum = m.GetLPMatrixEnumerator();
mEnum.MoveNext();
ILPMatrix lpmatrix = (ILPMatrix)mEnum.Current;
double[] x = m.GetValues(lpmatrix);
for (int j = 0; j < lpmatrix.NumVars.Length; ++j)
    System.Console.WriteLine("Variable Name:" + lpmatrix.GetNumVar(j).Name + "; Value = " + x[j]);

但似乎应该有更好的方法。我错过了什么吗?

为了进行比较,以下是为Gurobi模型执行相同操作的代码:

foreach (GRBVar var in m.GetVars())
    Console.WriteLine("{0} = {1}", var.Get(GRB.StringAttr.VarName), var.Get(GRB.DoubleAttr.X));

1 个答案:

答案 0 :(得分:1)

不幸的是没有。您可以将变量对象保留在列表或数组中,并按如下方式访问它们的值:

...
Cplex     cplex = new Cplex();
INumVar[] varArray = new INumVar[nVariables];
...
foreach (var v in varArray)
   Console.WriteLine(cplex.GetValue(v).ToString());