У меня есть проект OPL в Cplex, и я хочу прочитать одну целочисленную переменную в main.mod из x.mod. Я определил переменную как: {int} hub = { s | s in facilities : y[s] == 1 };
(Это определение находится в x.mod) Как я могу использовать концентратор в main.mod, потому что, когда я пишу концентратор, он говорит: неизвестная переменная
Считывать данные в основном из другой модели в opl
Ответы (1)
Вы можете просто использовать 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}
person
Alex Fleischer
schedule
11.07.2019