我是Java OPL界面的新手,我遇到了一个问题,即如何在CPLEX解决后获取决策变量的值。更具体地说,我有这个代码集成了一个OPL模型文件和一个数据文件:
String inDataFile = "F:\\UPS\\OPL\\data_mod_6.dat";
String modfileloc = "F:\\UPS\\OPL\\model2.mod";
IloOplFactory.setDebugMode(false);
IloOplFactory oplF = new IloOplFactory();
IloOplErrorHandler errHandler = oplF.createOplErrorHandler(System.out);
IloOplModelSource modelSource = oplF.createOplModelSource(modfileloc);
IloCplex cplex = null;
try {
cplex = oplF.createCplex();
} catch (IloException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
IloOplSettings settings = oplF.createOplSettings(errHandler);
IloOplModelDefinition def=oplF.createOplModelDefinition(modelSource,settings);
IloOplModel opl=oplF.createOplModel(def,cplex);
//IloOplDataElements DataElements = opl.makeDataElements();
IloOplDataSource dataSource=oplF.createOplDataSource(inDataFile);
opl.addDataSource(dataSource);
opl.generate();
if (cplex.solve()){
IloNumMap sw1 = opl.getElement("sw").asNumMap();
double [] sw = null;
int sw_length = sw1.getSize();
for (int i=0; i< sw_length; i++)
{
sw[i] = sw1.get(i+1);
}
}
现在这里是一个&#34;双&#34;向量决策变量,它是从cplex.solve()步骤获得的。 但它给我一个错误说:
Exception in thread "main" ilog.concert.IloException: Type dvar float+ expected for element "sw"
at ilog.opl.lang.wrapJNI.IloOplElement_cpp_asNumMap(Native Method)
请帮我说明它是否是声明错误,或者我错过了一些OPL库(我只有CPLEx安装工具包中的oplall.jar文件)
此致
普利文
答案 0 :(得分:0)
如果sw
是dvar float+
,那么您宁愿使用asNumVarMap
而不是asNumMap
。
你应该看看
中的例子OPL \例子\ opl_interfaces \ java中