Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从导入的cplex模型动态设置术语因子_Java_Optimization_Cplex - Fatal编程技术网

Java 从导入的cplex模型动态设置术语因子

Java 从导入的cplex模型动态设置术语因子,java,optimization,cplex,Java,Optimization,Cplex,假设我有一个优化模型abc.lp,我想用cplexjavaapi导入它。我使用:importModel函数()导入它。现在我想在约束或目标中改变一些决策变量的因子。例如,导入的模型abc.lp如下所示: 目标:最小化x1+x2 有没有一种简便的方法可以通过CPLEXAPI从导入的模型中动态设置因子 非常感谢 是的,这是可能的。至少对我来说,这不是很直观 下面是一个假设LP(线性目标和约束)的示例片段: //将模型从名为args[0]的文件读取到cplex优化器对象中 cplex.importMo

假设我有一个优化模型
abc.lp
,我想用cplexjavaapi导入它。我使用:
importModel
函数()导入它。现在我想在约束或目标中改变一些决策变量的因子。例如,导入的模型
abc.lp
如下所示:

目标:最小化x1+x2

有没有一种简便的方法可以通过CPLEXAPI从导入的模型中动态设置因子


非常感谢

是的,这是可能的。至少对我来说,这不是很直观

下面是一个假设LP(线性目标和约束)的示例片段:

//将模型从名为args[0]的文件读取到cplex优化器对象中
cplex.importModel(args[0]);
//获取目标并修改它。
ILObObjective obj=cplex.getObjective();
IloLinearNumExpr objExpr=(IloLinearNumExpr)obj.getExpr();
ILOLinearNumeriterator iter=objExpr.lineartierator();
//循环线性目标并根据需要进行修改。
while(iter.hasNext()){
IloNumVar=iter.nextNumVar();
System.out.println(““+var+”的旧系数:“+iter.getValue()”);
//根据需要修改。
if(var.getName().equals(“x1”)){
iter设定值(42);
System.out.println(“新系数为“+var+”:“+iter.getValue()”);
}
}
//保存更改。
obj.setExpr(objExpr);
//假设存在一个LP矩阵。我们使用
//上面的importModel()保证至少
//一个。
IloLPMatrix lp=(IloLPMatrix)cplex.LPMatrixIterator().next();
for(int i=0;i

这里,我们正在寻找一个名为“x1”的变量。在目标和所有线性约束条件下,我们将其系数设置为42。
println
用于调试。我做得很快,所以一定要测试它。否则,您应该能够修改它以满足您的需要。希望有帮助。

我的回答能解决你的问题吗?你认为还有什么需要解决的吗?
Constraint: <factor1>x1 + <factor2>x2 <= 40
public void(double factor1, double factor2){
...
cplexModel.import("path/to/abc.lp")
// Change parameters, how to do it?
 // Read model from file with name args[0] into cplex optimizer object
 cplex.importModel(args[0]);

 // Get the objective and modify it.
 IloObjective obj = cplex.getObjective();
 IloLinearNumExpr objExpr = (IloLinearNumExpr) obj.getExpr();
 IloLinearNumExprIterator iter = objExpr.linearIterator();
 // Loop through the linear objective and modify, as necessary.
 while (iter.hasNext()) {
   IloNumVar var = iter.nextNumVar();
   System.out.println("Old coefficient for " + var + ": " + iter.getValue());
   // Modify as needed.
   if ( var.getName().equals("x1") ) {
      iter.setValue(42);
      System.out.println("New coefficient for " + var + ": " + iter.getValue());
   }
 }
 // Save the changes.
 obj.setExpr(objExpr);

 // Assumes that there is an LP Matrix.  The fact that we used
 // importModel() above guarantees that there will be at least
 // one.
 IloLPMatrix lp = (IloLPMatrix) cplex.LPMatrixIterator().next();
 for (int i = 0; i < lp.getNrows(); i++) {
    IloRange range = lp.getRange(i);
    System.out.println("Constraint " + range.getName());
    IloLinearNumExpr conExpr = (IloLinearNumExpr) range.getExpr();
    IloLinearNumExprIterator conIter = conExpr.linearIterator();
    // Loop through the linear constraints and modify, as necessary.
    while (conIter.hasNext()) {
       IloNumVar var = conIter.nextNumVar();
       System.out.println("Coefficient for " + var + ": " + conIter.getValue());
       // Modify as needed (as above).
       if ( var.getName().equals("x1") ) {
          conIter.setValue(42);
          System.out.println("New coefficient for " + var + ": " + conIter.getValue());
       }
  }
  // Save changes (as above).
  range.setExpr(conExpr);
}
cplex.exportModel("modified.lp");

// Solve the model and display the solution if one was found
if ( cplex.solve() ) {
   // do something here.
}