Я использую библиотеки OPL / Cplex в моем коде C ++,
В моем файле .mod я удалил эту переменную решения:
dvar int + x [узлы] [узлы] [1..nb_max] [лямбды];
Теперь, когда 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;
}
}
У меня вопрос, как я могу восстановить многомерный массив «х»?
Я пробовал с
IloIntVar x = opl.getElement («x»). AsIntVar;
IloIntVar xvar = x.get (0); // первый элемент
но происходят следующие ошибки!
ошибка: запрошено преобразование из » в нескалярный тип ‘IloIntVar’
ошибка: в классе IloIntVar нет члена с именем get
Я действительно новичок в OPL,
Заранее спасибо!
у вас есть ответ на это в https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014387796&пс = 25
Позвольте мне процитировать Дэвида Граво из ROSTUDEL
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 );
}
}
С уважением