Как можно внедрить CSV-файл в Cplex - PullRequest
0 голосов
/ 07 мая 2019

У меня есть CSV-файл, который содержит расстояния от узла i до узла j, а также вес узлов. Этот файл хочет протестировать код CPLEX, который пытается решить проблему p-медианы. Я новый пользователь CPLEX, и я понятия не имею, как я должен получить мои расстояния и веса из файла CSV. Я попытался проверить этот код с данными из файла Excel, и я получил ответ. Однако, поскольку я хочу работать с большим набором данных, требуется импортировать файлы CSV, а не листы Excel. Не могли бы вы помочь мне узнать, как мне читать мой столбец d и столбец w? Далее я привел код и изображение моего CSV-файла

 int w[demands]=...;
 float d[demands][facilities]=...;



 }[CSV file][1]

1 Ответ

2 голосов
/ 07 мая 2019

Для чтения данных из любого текстового формата файла вы можете использовать сценарии и IloOplInputFile . Это позволяет читать файл построчно. Затем можно разбить строку на разделителе CSV и извлечь необходимые поля.

Вы можете найти пример на форуме CPLEX здесь : Предполагая, что у вас есть этот файл demand.csv (где первое поле дает первый индекс, второе поле - второй индекс, а третье поле - значение)

1;1;5
1;2;10
1;3;15
2;1;20
2;2;25
2;3;30

Этот код инициализирует массив d:

range demands = 1..2;
range facilities = 1..3;
float d[demands][facilities];
execute {
   var f = new IloOplInputFile("demand.csv");
   while (!f.eof) {
      var data = f.readline().split(";");
      if (data.length == 3) // Beware of empty lines
         d[Opl.intValue(data[0])][Opl.intValue(data[1])] = Opl.floatValue(data[2]);
   }
   writeln(d);
}

Аналогично для массива d.

...