使用 OPL 在一组元组中遍历集合的元素

Traversing the elements of set in a set of tuples using OPL

我正在尝试使用 OPL、cplex 对问题建模。我陷入了困境。我有一组元组,格式如下:

N_set = {
 <1, {180}>
 <8, {546, 154}>
 <11, {193, 532, 43, 363}>
 ...
};

所以我基本上是尝试使用map结构。给定一个整数,我希望能够到达与之对应的集合。我使用了一个包含集合的元组来实现这一点。下面的代码并不完整,它是我正在尝试做的简化版本,但仍然无法正常工作。以下是我得到的错误:

Definition of formal parameter "t2" of type {int} not supported in this context.

我主要想学习如何迭代这个集合t2中的项目j。假设 dec1dec2 是我的决策变量。 我的结构如下:

tuple Neighborhood {
 int e1;
 {int} neigh;  
}

{Neighborhood} N_set = ...;

forall(p in P)
{               
    sum(<t1, t2> in N_set, j in t2) dec1[j][p]) == card(t2) * dec2[p]; 
};

我对这门语言完全陌生。也许我想做的是完全错误的。我将不胜感激任何建议。

谢谢。

您无法按照您尝试的方式对元组求和。但是,你可以这样写:

sum(t in N_set, j in t.neigh) ...

不是在 t1t2 中添加元组的字段,而是现在在 t.e1t.neigh 中添加它们。