Как получить доступ к переменным решения: OPL / Cplex & amp; & amp; Переполнение стека

Я использую библиотеки 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,
Заранее спасибо!

0

Решение

у вас есть ответ на это в 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  );
}
}

С уважением

0

Другие решения


По вопросам рекламы [email protected]