【问题标题】:Failed in interfacing Ilog OPL elements in Java在 Java 中连接 Ilog OPL 元素失败
【发布时间】:2014-09-13 21:51:23
【问题描述】:

我对 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);
    }
}

现在这里的 sw 是一个“双”向量决策变量,它是从 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 文件)

问候,

普雷文

【问题讨论】:

    标签: java ilog opl


    【解决方案1】:

    如果swdvar float+,那么您宁愿使用asNumVarMap 而不是asNumMap

    你应该看看

    中的例子

    opl\examples\opl_interfaces\java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多