如何访问决策变量:OPL / Cplex&& C ++

时间:2014-10-16 08:58:13

标签: c++ cplex opl

我在我的c ++代码中使用OPL / Cplex库,

在我的file.mod中,我对这个决策变量进行了decalred: dvar int + x [nodes] [nodes] [1..nb_max] [lambdas];

现在我Cplex解决了模型我成功地恢复了目标值如下:

try {
     IloCplex cplex(env);

    cplex.setOut(env.getNullStream());
     IloOplErrorHandler handler(env,cout);
     IloOplModelSource modelSource(env, "file.mod");
    IloOplSettings settings(env,handler);
     IloOplModelDefinition def(modelSource,settings);
    IloOplModel opl(def,cplex);
     IloOplDataSource dataSource(env, "file2.dat");
    opl.addDataSource(dataSource);
     opl.generate();
    if ( cplex.solve() ) {
      cout<< opl.getCplex().getObjValue()<< endl;
                         }
     }

我的问题是如何恢复多维数组“x”? 我试过

IloIntVar x = opl.getElement(“x”)。asIntVar;            IloIntVar xvar = x.get(0); //第一项

但发生以下错误!

错误:从''转换为非标量类型'IloIntVar'请求 错误:'class IloIntVar'没有名为'get'的成员

我是OPL的初学者, 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014387796&ps=25

找到答案

让我引用ROSTUDEL的David Gravot

dvar float+ Commande[Items,Periodes];

现在,在我的JAVA代码中,我编写了以下内容来访问这些变量的所有解决方案值,如下所示:

IloNumMap commandesMap = opl.getElement("Commande").asNumMap();

        for(int i=0;i<params.getNbItems();i++)        {
        for(int t=0;t<params.getNbPeriodes();t++)       {
        double solValue  = commandesMap.getSub(i+1).get(t+1);
                  log.info("at item "+(i+1)+" periode "+(t+1)+" : "+solValue  );      
                }
        }

问候