我正在尝试执行以下操作。我想获取对应于Pbd.pitblockSet的所有BlockBelow的连续变量Xbdt的总和:
forall(i in Pbd.pitblockSet , d in DumpBlocks, t in TimePeriods ) {
sum(j in BlockBelow[i] ) Xbdt[j.id][d][t] == 0;
}
似乎我没有正确编写Pbd.pitblockSet。关于如何写这个有什么建议吗?
我遇到一些错误:不能将类型{blockType} [Pbd]与“ in”一起使用无法在{blockType}中将类型用作索引。需要元组类型,请找到{Path}。
其中Pbd是Path类型的元组,并从Excel数据中读取
tuple Path {
int id;
string source;
string dest;
{string} pitblockSet;
{string} roadPoints;
{string} dumpblockSet;
{string} others;
float dist;
};
{Path} Pbd={}; // set of paths from block b to dump d
DumpBlocks和PitBlocks是从excel读取的,类型为{String}
BlockBelow的计算如下:
tuple blockType {
key string id;
int i;
int j;
int k;
};
{blockType} PitBlocksType = ...; //read from excel
//find one block below each block
{blockType} BlockBelow[b1 in PitBlocksType] =
{b | b in PitBlocksType: b1.i == b.i -1 &&
(b1.k == b.k ) &&
(b1.j == b.j) };
Xbdt是决策变量
dvar float+ Xbdt[PitBlocks][DumpBlocks][TimePeriods];
forall (p in Pdb) {
forall(i in p.pitblockSet , d in DumpBlocks, t in TimePeriods ) {
sum(j in BlockBelow[i] ) Xbdt[j.id][d][t] == 0;
}
}