有没有办法列出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));
答案 0 :(得分:1)
不幸的是没有。您可以将变量对象保留在列表或数组中,并按如下方式访问它们的值:
...
Cplex cplex = new Cplex();
INumVar[] varArray = new INumVar[nVariables];
...
foreach (var v in varArray)
Console.WriteLine(cplex.GetValue(v).ToString());