一个文件夹中的不同文件作为 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