Я пытаюсь прочитать кортеж из Excel. Кортеж имеет целые числа, строки и множества. Я пробовал следующее, но получаю сообщение об ошибке: Элемент данных "Pbd" типа {Path} не поддерживается для листов. И обработка завершается неудачей.
Это часть моего файла .mod
tuple Path {
int id;
string source;
string dest;
{string} pitblockSet;
{string} roadPoints; // not used
{string} dumpblockSet;
{string} others;
float dist;
};
{Path} Pbd=...;
The corresponding part in the dat file is :
Pbd from SheetRead(sheet,"all_paths!A2:C30910");
В файле Excel на листе all_paths у меня есть следующее. Есть несколько других переменных, считываемых из того же Excel в этой модели.
Часть данных Excel, читаемых в этот кортеж, приведена ниже:
PathId Source Dest pitblockSet RoadPoints dumpblockSet others dist
1 P1 D1 P1 R8 D45 D42 D39 D14 D1 581.3956
2 P1 D1 P1 R8 D40 D14 D1 587.1185
3 P1 D1 P1 R8 D43 D16 D2 D1 588.7774
4 P2 D1 P2 R8 D45 D42 D39 D14 D1 539.7307
5 P2 D1 P2 R8 D40 D14 D1 545.4535
6 P2 D1 P2 R8 D43 D16 D2 D1 547.1124
7 P3 D1 P3 R8 D45 D42 D39 D14 D1 500.0794
Я также попытался изменить наборы данных, разделенных запятыми, как показано ниже
PathId Source Dest pitblockSet RoadPoints dumpblockSet Others Distance
1 P1 D1 P1, R8, D45,D42,D39,D14,D1, 581.3956
2 P1 D1 P1, R8, D40,D14,D1, 587.1185
3 P1 D1 P1, R8, D43,D16,D2,D1, 588.7774
4 P2 D1 P2, R8, D45,D42,D39,D14,D1, 539.7307
5 P2 D1 P2, R8, D40,D14,D1, 545.4535
6 P2 D1 P2, R8, D43,D16,D2,D1, 547.1124
7 P3 D1 P3, R8, D45,D42,D39,D14,D1, 500.0794
8 P3 D1 P3, R8, D40,D14,D1, 505.8023
Но я продолжаю получать одну и ту же ошибку.
Цель, почему я хочу это, я использую их в файле .mod, как показано ниже:
float hc[Pathid][TimePeriods]; //PathId is another int variable read seperately
//determine haulage cost for each path
execute {
//distances to plant
for (var i in Pbm.id) {
for (var t in TimePeriods){
hc[i][t] = Pbm.dist*HaulageCost[t];
}
}
}
И, наконец, хотите использовать его в ограничении как
forall( i in Pbd.pitblockSet , t in TimePeriods) {
// blockabove exposed Pbd:
sum(j in BlockBelow[i]) schedulePit[j.id][t] * totalVolume[j.id] <=
(sum(j in BlockBelow[i],r in TimePeriods : r <= t,d in DumpBlocks)(Xbdt[j.id][d][r])
+ sum(j in BlockBelow[i],r in TimePeriods : r <= t, s in Stockpiles)(Xbst[j.id][s][r]/density[j.id])
+sum(j in BlockBelow[i],r in TimePeriods : r <= t, m in Plants)(Xbmt[j.id][m][r]/density[j.id])) ;
}
Каков наилучший способ чтения кортежа с именем Path, не знаю, почему я получаю ошибку.