我有一套我已经读到我的OPL项目的内容,如下所示:
S' = {<"A",{""}>, <"B",{""}>, <"C",{""}>, <"AB",{"A","B"}>, <"ABC",{"A","B","C","AB"}>},
其中每个元素&lt;,&gt;是一个有两个字符串元素的元组。该集合表示感兴趣的项目之间的父子关系。
从这个集合我需要创建一个新集合:
tuple child{
string Item;
string Child;
}
{child} Children = ...; //Reads in the set S
tuple dependents{
string Item;
{string} ItemChildren;
}
{dependents} dependentsSet = {<x.Item, y.Child> | x in Children, (y in Children : <x,y> in Children)};
其中每个元素&lt;,&gt;是一个元组,每个元组的第一个元素是一个字符串,每个元组的第二个元素是一组字符串。我创建这个集合的尝试是:
{{1}}
使用上面代码中的变量名,创建 S'的目的是因为我的程序后面需要创建一个约束集合,每个Item一个,并且在每个约束中我需要索引ItemChildren。我是OPL的相对新手所以我知道我在dependentsSet变量的初始化中使用语法不正确,但我不知道如何正确编写这个语句,以便它创建我正在寻找的集合。
任何人都可以帮助我理解创建我之后所需的语句吗?
答案 0 :(得分:1)
tuple child{
string Item;
string Child;
}
{child} Children
= {<"A","">, <"B","">, <"AB","A">, <"AB","B">, <"C","">, <"ABC","A">,
<"ABC","B">, <"ABC","C">, <"ABC","AB">};
{string} setOfParents={i.Item | i in Children};
{string} setOfChildren={i.Child | i in Children};
tuple dependents{
string Item;
{string} ItemChildren;
}
{string} kids[p in setOfParents]={k | k in setOfChildren : <p,k> in Children};
{dependents} dependentsSet = {<x, kids[x]> | x in setOfParents};
execute
{
writeln(dependentsSet);
}
给出
{<"A" {""}> <"B" {""}> <"AB" {"A" "B"}> <"C" {""}>
<"ABC" {"A" "B" "C" "AB"}>}