Считать данные в основном из другой модели в opl - PullRequest
0 голосов
/ 11 июля 2019

У меня есть проект OPL в Cplex, и я хочу прочитать одну целочисленную переменную в main.mod из x.mod. Я определил переменную как: {int} hub = { s | s in facilities : y[s] == 1 }; (это определение в x.mod) Как я могу использовать концентратор, в main.mod, потому что когда я пишу концентратор, он говорит: неизвестная переменная

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете просто использовать opl.hub, где opl - это подмодель OPL.

Позвольте привести вам небольшой пример:

sub.mod

{int} facilities={1,2};

dvar boolean y[facilities];

subject to
{
y[1]==1;
y[2]==0;
}

{int} hub = { s | s in facilities : y[s] == 1 };

итогда, если вы напишите main.mod

main {
  var source = new IloOplModelSource("sub.mod");
  var cplex = new IloCplex();
  var def = new IloOplModelDefinition(source);



  var opl = new IloOplModel(def,cplex);
opl.generate();
  if (cplex.solve()) {
     writeln("OBJ = " + cplex.getObjValue());
     opl.postProcess();
     writeln("hub = ",opl.hub);
  } else {
     writeln("No solution");
  }

 opl.end();


}  

, вы получите

OBJ = 0
hub =  {1}
...