使用 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。假设 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];
};
我对这门语言完全陌生。也许我想做的是完全错误的。我将不胜感激任何建议。
谢谢。
您无法按照您尝试的方式对元组求和。但是,你可以这样写:
sum(t in N_set, j in t.neigh) ...
不是在 t1
和 t2
中添加元组的字段,而是现在在 t.e1
和 t.neigh
中添加它们。
我正在尝试使用 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。假设 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];
};
我对这门语言完全陌生。也许我想做的是完全错误的。我将不胜感激任何建议。
谢谢。
您无法按照您尝试的方式对元组求和。但是,你可以这样写:
sum(t in N_set, j in t.neigh) ...
不是在 t1
和 t2
中添加元组的字段,而是现在在 t.e1
和 t.neigh
中添加它们。