在 OPL 中定义集合的集合(或索引集合)
Defining Set of Set in OPL (or indexed set)
我尝试在 OPL 中定义 set of set。问题是:
- 我有几个计算平台,例如:{"DC1", "DC2", "MP1"}
- 每个计算平台可以有多种配置,例如:DC1可以有{"conf1", "conf3"},DC2可以有{"conf1", "conf2", "conf3"},MP1可以有{ "conf1", "conf3"}
- 每个计算平台都有几个属性,例如容量 (vcpu)
- AMPL中set的集合,参数可以简单写成:
set COMPPLATFORMS;
set CONFCP{COMPPLATFORMS}
param vcpu {d in COMPPLATFORMS, CONFCP[d]};
但是,在 OPL 中,我们没有直接声明索引集的方法。我注意到我们可以使用元组或一些预处理。但是现在我不确定如何为索引集声明参数“vcpu”?
我知道我们可以有一组数组,或一组数组。但是我们可以来一套吗?
OPL中有类似结构的例子吗?
谢谢
例子见套套power sets in how to with OPL
{string} s={"A","B","C","D"};
range r=1.. ftoi(pow(2,card(s)));
{string} s2 [k in r] = {i | i in s: ((k div (ftoi(pow(2,(ord(s,i))))) mod 2) == 1)};
execute
{
writeln(s2);
}
我尝试在 OPL 中定义 set of set。问题是:
- 我有几个计算平台,例如:{"DC1", "DC2", "MP1"}
- 每个计算平台可以有多种配置,例如:DC1可以有{"conf1", "conf3"},DC2可以有{"conf1", "conf2", "conf3"},MP1可以有{ "conf1", "conf3"}
- 每个计算平台都有几个属性,例如容量 (vcpu)
- AMPL中set的集合,参数可以简单写成:
set COMPPLATFORMS;
set CONFCP{COMPPLATFORMS}
param vcpu {d in COMPPLATFORMS, CONFCP[d]};
但是,在 OPL 中,我们没有直接声明索引集的方法。我注意到我们可以使用元组或一些预处理。但是现在我不确定如何为索引集声明参数“vcpu”?
我知道我们可以有一组数组,或一组数组。但是我们可以来一套吗?
OPL中有类似结构的例子吗? 谢谢
例子见套套power sets in how to with OPL
{string} s={"A","B","C","D"};
range r=1.. ftoi(pow(2,card(s)));
{string} s2 [k in r] = {i | i in s: ((k div (ftoi(pow(2,(ord(s,i))))) mod 2) == 1)};
execute
{
writeln(s2);
}