从cplex的数据文件中先写后读



我有下面的代码在数据文件中写入数组值,然后在相同模型的相同数据文件的另一个数组中再次读取它的值,但它给了我一个错误"数据元素示例已经设置"如何解决这个问题。由于

range Number= 0..6;
int Example [i in Number]=i;

execute
{
var o=new IloOplOutputFile("Example.dat");
o.writeln("Example=");
o.writeln(Example);
o.writeln(";");
o.close();
}

main {
var source = new IloOplModelSource("Write and read from the data file.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
var opl = new IloOplModel(def,cplex);
var data = new IloOplDataSource("Example.dat");
opl.addDataSource(data);
opl.generate();
if (cplex.solve())
{
writeln("OBJ = " + cplex.getObjValue());
}
else
{
writeln("No solution");
}
}

如果你有sub.mod

subject to
{

}
range Number= 0..6;
int Example [i in Number]=i;

execute
{
var o=new IloOplOutputFile("Example.dat");
o.writeln("Example=");
o.writeln(Example);
o.writeln(";");
o.close();
}

和sub2.mod

range Number= 0..6;
int Example [i in Number]=...;
dvar int obj;   
subject to
{
obj==sum(i in Number) Example[i];
}
execute
{
writeln("obj=",obj);
}

,然后。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();
cplex.solve();
opl.postProcess();
var source2 = new IloOplModelSource("sub2.mod");
var def2 = new IloOplModelDefinition(source2);
var opl2 = new IloOplModel(def2,cplex);
var data2 = new IloOplDataSource("Example.dat");
opl2.addDataSource(data2);
opl2.generate();
if (cplex.solve())
{
writeln("OBJ = " + cplex.getObjValue());
}
else
{
writeln("No solution");
}
opl2.postProcess();
}

OBJ = 0
obj=21

且只有一个。mod

sub.mod

range Number= 0..6;
int ExampleIn [i in Number]=...;
dvar int obj;   
subject to
{
obj==sum(i in Number) ExampleIn[i];
}
execute
{
writeln("obj=",obj);
}
int ExampleOut [i in Number]=i+obj;

execute
{
var o=new IloOplOutputFile("Example.dat");
o.writeln("ExampleIn=");
o.writeln(ExampleOut);
o.writeln(";");
o.close();
}

Example.dat

ExampleIn=
[21 22 23 24 25 26 27]
;

然后

main {
var source = new IloOplModelSource("sub.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
var data= new IloOplDataSource("Example.dat");
var opl = new IloOplModel(def,cplex);
opl.addDataSource(data);

opl.generate();
cplex.solve();
opl.postProcess();
var source2 = new IloOplModelSource("sub.mod");
var def2 = new IloOplModelDefinition(source2);
var opl2 = new IloOplModel(def2,cplex);
var data2 = new IloOplDataSource("Example.dat");
opl2.addDataSource(data2);
opl2.generate();
if (cplex.solve())
{
writeln("OBJ = " + cplex.getObjValue());
}
else
{
writeln("No solution");
}
opl2.postProcess();
}

obj=0
OBJ = 0
obj=21

最新更新