使用OPL遍历一组元组中的set元素

时间:2019-05-08 14:13:15

标签: cplex integer-programming opl

我正在尝试使用OPL cplex建模问题。我陷入了限制。我有一组元组,格式为:

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

因此,我基本上尝试使用地图结构。给定一个整数,我希望能够达到与其对应的设置核心。我使用了一个包含一组的元组来实现此目的。下面的代码不完整,它是我正在尝试做的简化版本,但仍然无法正常工作。以下是我得到的错误:

  

不支持类型为{int}的形式参数“ t2”的定义   这种情况。

我主要想学习如何遍历此集合 t2 中的项目 j 。假设 dec1 dec2 是我的决策变量。 我的结构如下:

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]; 
};

我是该语言的新手。也许我想做的是完全错误的。我将不胜感激任何建议。

谢谢。

1 个答案:

答案 0 :(得分:2)

您不能以尝试的方式总结元组。但是,您可以这样写:

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

您现在不必在t1t2中使用元组字段,而只需在t.e1t.neigh中使用元组字段即可。