У меня есть кортеж для чтения набора путей.
tuple Path {
int id;
string source;
string dest;
{string} pitblockSet;
{string} roadPoints; // not used
{string} dumpblockSet;
{string} others;
float dist;
};
{Path} Pbd= {} // a set read using into Pbd
Существует еще один кортеж blockType
tuple blockType {
string id;
int i;
int j;
int k;
};
{blockType} PitBlocksType = ...; Это читается из Excel .. и данные выглядят так, как показано ниже
P1 1 1 2
P2 1 1 3
P3 1 1 4
P4 1 1 5
P5 1 1 6
P6 1 1 7
P7 1 1 8
P8 1 1 9
P9 1 1 10
P10 1 1 11
BlockBelow определяется следующим образом.
{blockType} BlockBelow[b1 in PitBlocksType] =
{b | b in PitBlocksType: b1.i == b.i -1 &&
(b1.k == b.k ) &&
(b1.j == b.j) };
Я использую ограничения, такие как два ниже. Но я получаю ошибку. Я хочу иметь сумму BlockBelow для всех блоков в pitblockSet, как показано ниже. Но я делаю некоторую ошибку при доступе к pitblockSet в кортеже Pbd (типа Path)
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])) ;
}
forall(d in Pbd.dumpblockSet, t in TimePeriods) {
//DumpblocksBelow
sum( b in PitBlocks,j in OnBelowDump[d], r in TimePeriods: r<=t)(Xbdt[b][j.id][r]*SwellFactor)
- scheduleDump[d.id][t]* sum(j in OnBelowDump[d])(dumpVolume[j.id]) >= 0;
}
Я получаю сообщение об ошибке: Ожидается тип кортежа, найдено {Path}.
Требуются предложения, пожалуйста о том, как получить доступ к pitblockSet или dumpblockSet в Pbd