Подключите файл Excel к Cplex
Я должен решить проблему оптимизации, используя Cplex.
В моем файле.dat я использую SheetConnection my_sheet("ExcelFile.xls")
связать файл Excel с моей программой cplex, и после этого я использую SheetRead()
читать данные из файла Excel.
Но после запуска моей конфигурации я получил следующую ошибку:
"sheet data not supported on this platform"
"Processing failed"
Я обнаружил, что чтение таблицы Excel в студии оптимизации ILOG CPLEX не поддерживается в Linux
Есть идеи, пожалуйста?
2 ответа
У меня такая же проблема. Моим решением было преобразовать мои данные в csv и использовать IloOplInputFile, чтобы прочитать их. Пример:
Предположим, у вас есть следующий файл export.cvs:
Nicolas;2;
Alexander;3;
Вы можете использовать следующий код, чтобы преобразовать его в ваши данные.
tuple t
{
string firstname;
int number;
}
{t} s={};
execute
{
var f=new IloOplInputFile("export.csv");
while (!f.eof){
var str=f.readline();
var ar=str.split(";");
if (ar.length==3) s.add(ar[0],Opl.intValue(ar[1]));
}
f.close();
}
execute
{
writeln(s);
}
Который будет читать CSV-файл и вычислять набор кортежей s:
{<"Николас" 2> <"Александр" 3>}
Существуют классы Java, например, классы Apache POI, которые могут читать и записывать файлы Excel. Вы можете использовать эти классы для реализации внешнего / пользовательского источника данных и вызывать его через IloOplCallJava. Затем вы можете либо напрямую вызвать файл.mod в блоке execute, либо использовать его из файла.dat через "prepare" и "invoke". Я сделал первое в прошлом, и это сработало хорошо.
Я также использовал Python для преобразования файлов Excel в то, что легче использовать с OPL на платформах, на которых OPL не поддерживает Excel.