一个文件夹中的不同文件作为 opl 模型的多个数据
different files in one folder as several data for opl model
我在 IBM ILOG CPLEX Optimization Studio 中有一个 opl 模型。在此模型中,每次都会导入两个 CSV 文件。有272个文件,所以这个模型应该是运行136次。每次导出一个 CSV 输出作为结果。我需要一个解决方案来每次自动读取这两个文件中的每一个,获取结果并导入接下来的两个文件,直到读取所有文件。我添加了一些文件的图片,这样您就可以看到它们是如何命名的。我怎样才能自动执行此操作。
另外,我的问题的第二部分是:例如我的文件名之一是: pmed1_DP=10_P=5_n=100 ,我需要获取 DP、P 和 n 作为输入对于我的代码。有什么方法可以使用文件名并获得我们需要的输入吗?filenames
对于您的第一个问题,您可以使用 main 设置不同的输出 csv 文件。让我举个小例子:
test.mod
tuple t
{
string firstname;
int number;
}
{t} s={<"Nicolas",2>,<"Alexander",3>};
string csvOutput=...;
execute
{
var f=new IloOplOutputFile(csvOutput);
for(var i in s)
{
f.writeln(i.firstname,";",i.number,";");
}
f.close();
}
然后是main.mod
{string} csvOutputs={"csv1.csv","csv2.csv"};
main {
var source = new IloOplModelSource("test.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
for(var o in thisOplModel.csvOutputs)
{
var opl = new IloOplModel(def,cplex);
var data2= new IloOplDataElements();
data2.csvOutput=o;
opl.addDataSource(data2);
opl.generate();
if (cplex.solve()) {
opl.postProcess();
writeln("OBJ = " + cplex.getObjValue());
} else {
writeln("No solution");
}
opl.end();
}
}
这将生成 2 个 csv 文件,csv1 和 csv2。
对于你的第二个问题,你可以像那样通过 main 发送参数,或者多次调用 oplrun 并使用 -D
参数更改参数:
oplrun -DcsvOutput="csv3.csv" test.mod
这将生成 csv3.csv
。
我在 IBM ILOG CPLEX Optimization Studio 中有一个 opl 模型。在此模型中,每次都会导入两个 CSV 文件。有272个文件,所以这个模型应该是运行136次。每次导出一个 CSV 输出作为结果。我需要一个解决方案来每次自动读取这两个文件中的每一个,获取结果并导入接下来的两个文件,直到读取所有文件。我添加了一些文件的图片,这样您就可以看到它们是如何命名的。我怎样才能自动执行此操作。 另外,我的问题的第二部分是:例如我的文件名之一是: pmed1_DP=10_P=5_n=100 ,我需要获取 DP、P 和 n 作为输入对于我的代码。有什么方法可以使用文件名并获得我们需要的输入吗?filenames
对于您的第一个问题,您可以使用 main 设置不同的输出 csv 文件。让我举个小例子:
test.mod
tuple t
{
string firstname;
int number;
}
{t} s={<"Nicolas",2>,<"Alexander",3>};
string csvOutput=...;
execute
{
var f=new IloOplOutputFile(csvOutput);
for(var i in s)
{
f.writeln(i.firstname,";",i.number,";");
}
f.close();
}
然后是main.mod
{string} csvOutputs={"csv1.csv","csv2.csv"};
main {
var source = new IloOplModelSource("test.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
for(var o in thisOplModel.csvOutputs)
{
var opl = new IloOplModel(def,cplex);
var data2= new IloOplDataElements();
data2.csvOutput=o;
opl.addDataSource(data2);
opl.generate();
if (cplex.solve()) {
opl.postProcess();
writeln("OBJ = " + cplex.getObjValue());
} else {
writeln("No solution");
}
opl.end();
}
}
这将生成 2 个 csv 文件,csv1 和 csv2。
对于你的第二个问题,你可以像那样通过 main 发送参数,或者多次调用 oplrun 并使用 -D
参数更改参数:
oplrun -DcsvOutput="csv3.csv" test.mod
这将生成 csv3.csv
。