将集从 Excel 导入到 CPLEX

Import Sets from Excel to CPLEX

我有以下集合:

{int} Test={1,3,6,8,10};

setof (int) Problem[Test]=[{1,3,5},{8,4},{2,6,7},{2,4},{1}];

执行正常。问题看起来像这样:

enter image description here

因为我不想手动将数字插入 CPLEX,所以我想从 Excel 文件中导入它。

通过以下方式导入测试:

{int} Test=...;

与:

SheetConnection Data("Data.xlsx");
Test from SheetRead(Data, "Data1!A1:A6");

在 .dat 文件中。

使用 Excel 文件格式,像这样: enter image description here

没问题。

{int} Test=...;
setof (int) Problem[Test]=[{1,3,5},{8,4},{2,6,7},{2,4},{1}];

有效...

现在我也想看

Problem[Test]=[{1,3,5},{8,4},{2,6,7},{2,4},{1}];

来自 Excel 文件。数据如下所示:

enter image description here

但是:

{int} Test=...;
setof (int) Problem[Test]=...;

SheetConnection Data("Data.xlsx");
Test from SheetRead(Data, "Data1!A1:A6");
Problem from SheetRead(Data, "Data1!B2:B6");

导致以下错误消息:

The Data element "Problem" of Type {int}[Test] is not supported for Spreadsheets

.

现在有人知道 Excel 输入必须是什么样子,所以它受支持吗?

非常感谢! 此致

另外:

我还有一个问题。 您的答案非常适合 Excel 文件格式,如下所示: enter image description here 因此,一行具有多个值。 这对我帮助很大。

但是这个案例呢: enter image description here

它是一组 F[m,i],在一个单元格中可能有多个值,例如F[1,11] = {1 2}

如何从 Excel 文件中读取该文件。 手动看起来像这样:

> setof (int) F[X][Y]=[[{},{},{},{},{},{},{},{},{},{},{1,2}],[{},{},{},{},{1},{},{2},{},{},{},{}],[{},{4,5},{6},{},{},{},{},{},{},{},{}],[{},{},{},{},{},{},{},{4},{5},{6},{}],[{},{},{},{},{},{8},{9},{},{},{},{}]];

怀特:

{int} X={1,8,11,35,68};
{int} Y={1,2,3,4,5,6,7,8,9,10,11};

非常感谢!

加法:

我尝试了你的链接,但实际上我真的不知道如何将它应用到我的案例中:( 如果你能最后一次帮助我,我将不胜感激。

假设我的 excel 数据文件如下所示: enter image description here

所以 j 的每个值的列数与值一样多。在这种情况下,j = 2 和 j = 11 各有两列。

目标是我在 CPLEX 中的设置如下所示: enter image description here

这对我很有帮助。

谢谢!

你可以通过字符串来做到这一点:

.mod

range r=1..4;

string temp[r][1..26]=...;
{int} set[i in r]={ intValue(temp[i][j])| j in 1..26:temp[i][j]!=""};

execute
{
  writeln(set);
}

/*

which gives

[{1 2} {6} {7 8 9} {3 4}]

*/

.dat

SheetConnection sh("readarrayofsets.xlsx");

temp from SheetRead(sh,"A1:Z4");

OPL Excel examples