Cplex 列出所有模型变量 (.NET)
Cplex list all model variables (.NET)
有没有办法列出 cplex 模型中的所有 cplex 变量?我对 C# 接口很感兴趣。谷歌搜索导致 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));
不幸的是没有。您可以将变量对象保存在列表或数组中,并按如下方式访问它们的值:
...
Cplex cplex = new Cplex();
INumVar[] varArray = new INumVar[nVariables];
...
foreach (var v in varArray)
Console.WriteLine(cplex.GetValue(v).ToString());
有没有办法列出 cplex 模型中的所有 cplex 变量?我对 C# 接口很感兴趣。谷歌搜索导致 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));
不幸的是没有。您可以将变量对象保存在列表或数组中,并按如下方式访问它们的值:
...
Cplex cplex = new Cplex();
INumVar[] varArray = new INumVar[nVariables];
...
foreach (var v in varArray)
Console.WriteLine(cplex.GetValue(v).ToString());