将集从 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");
我有以下集合:
{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");