从 opl 中的其他模型读取 main 中的数据
Read data in main from other model in opl
我在 Cplex 中有一个 OPL 项目,我想从 x.mod 中读取 main.mod 中的一个整数变量。我定义了这样的变量:
{int} hub = { s | s in facilities : y[s] == 1 };
(这个定义在x.mod)
我如何在 main.mod 中使用集线器,因为当我写集线器时它说:未知变量
您可以简单地使用 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}
我在 Cplex 中有一个 OPL 项目,我想从 x.mod 中读取 main.mod 中的一个整数变量。我定义了这样的变量:
{int} hub = { s | s in facilities : y[s] == 1 };
(这个定义在x.mod)
我如何在 main.mod 中使用集线器,因为当我写集线器时它说:未知变量
您可以简单地使用 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}