разные файлы в одной папке как несколько данных для модели opl - PullRequest
0 голосов
/ 21 июня 2019

У меня есть модель opl в студии оптимизации IBM ILOG CPLEX.Каждый раз в этой модели импортируются два CSV-файла.Всего 272 файла, поэтому эту модель необходимо запустить 136 разКаждый раз один выход CSV экспортируется в результате.Мне нужно решение для автоматического чтения каждого из этих двух файлов каждый раз, получения результата и импорта следующих двух файлов, пока все файлы не будут прочитаны.Я добавил изображение некоторых файлов, чтобы вы могли видеть, как они названы.Как я могу сделать это автоматически.Кроме того, вторая часть моего вопроса: например, одно из моих имен файлов: pmed1_DP = 10_P = 5_n = 100, мне нужно получить DP, P и n в качестве входных данных для моего кода.Есть ли способ использовать имя файла и получить необходимые данные? filenames

1 Ответ

1 голос
/ 21 июня 2019

Для вашего первого вопроса вы можете использовать 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.

Для вашего второго вопроса вы можете либо отправить параметры через такую ​​же магистраль, либо много раз вызвать oplrun и изменить параметры с помощью параметра -D:

oplrun -DcsvOutput="csv3.csv" test.mod

Это сгенерирует csv3.csv.

...