【问题标题】:Traversing the elements of set in a set of tuples using OPL使用 OPL 在一组元组中遍历 set 的元素
【发布时间】:2019-09-26 07:26:40
【问题描述】:

我正在尝试使用 OPL、cplex 对问题进行建模。我陷入了一个约束。我有一组格式为:

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

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

不支持 {int} 类型的形参“t2”的定义 这个上下文。

我主要想学习如何遍历这个集合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]; 
};

我对这门语言完全陌生。也许我正在尝试做的是完全错误的。我会很感激任何建议。

谢谢。

【问题讨论】:

    标签: cplex integer-programming opl


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊,听起来很简单:)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2015-01-16
    • 2016-05-25
    • 2010-12-20
    • 1970-01-01
    • 2019-10-06
    • 2021-08-12
    相关资源
    最近更新 更多