如何从 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
我们有一个客户给了我们一个 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