如何从 IloModeler 或 IloCplex 获取所有 IloNumVar

How to obtain all IloNumVar from IloModeler or IloCplex

我们有一个客户给了我们一个 IloModeler,我们用它来解决优化问题:

IloCplex cplex = new IloCplex();
cplex.setModel(IloModeler); 

最后,我们想 return 给客户一张包含所有 IloNumVar 及其值的地图:Map<IloNumVar, Double>.

但问题是:我们如何从原始IloModeler中获取所有IloNumVar的列表,以便使用函数cplex.getValue(IloNumVar)查看它们的值?

java.util.Iterator iterator() This method returns an iterator that traverses the objects in the model.

例如 zoo example

 IloCplex cplexBus = new IloCplex();// decision variables
 IloNumVar nbbus40 = cplexBus.numVar(0, 10000,IloNumVarType.Int,"var nbBus40"); 
 IloNumVar nbbus30 = cplexBus.numVar(0, 10000,IloNumVarType.Int,"var nbBus30");// move at least 300 kids to the zoo
 cplexBus.add(nbbus40);
 cplexBus.add(nbbus30);

 cplexBus.addGe(cplexBus.sum(cplexBus.prod(40,nbbus40), cplexBus.prod(30,nbbus30)),300);// objective : minimize cost = 500*nbbus40+400*nbBus30
 cplexBus.addMinimize(cplexBus.sum(cplexBus.prod(500,nbbus40), cplexBus.prod(400,nbbus30)));cplexBus.solve();System.out.println("nbbus40 : "  +cplexBus.getValue(nbbus40) );
  System.out.println("nbbus30 : "  +cplexBus.getValue(nbbus30) );

  java.util.Iterator it = cplexBus.iterator();
  while (it.hasNext()) {
    Object o = it.next();
    if (o instanceof IloNumVar) {
      System.out.print("Variable :"+((IloNumVar)o).getName()+"\n");
    }
  }

给予

 [java] nbbus40 : 6.0
 [java] nbbus30 : 2.0
 [java] Variable :var nbBus40
 [java] Variable :var nbBus30