У меня есть набор, который я прочитал в моем проекте OPL, который выглядит следующим образом:
S = {<"A","">, <"B","">, <"AB","A">, <"AB","B">, <"C","">, <"ABC","A">,<"ABC","B">, <"ABC","C">, <"ABC","AB">},
где каждый элемент ‹,> представляет собой кортеж с двумя строковыми элементами. Этот набор представляет родительско-дочерние отношения между интересующими элементами.
Из этого набора мне нужно создать новый набор:
S' = {<"A",{""}>, <"B",{""}>, <"C",{""}>, <"AB",{"A","B"}>, <"ABC",{"A","B","C","AB"}>},
где каждый элемент ‹,> является кортежем, первый элемент каждого кортежа представляет собой строку, а второй элемент каждого кортежа - набор строк. Моя попытка создать этот набор:
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)};
Используя имена переменных из приведенного выше кода, цель создания S ' заключается в том, что позже в моей программе мне нужно создать набор ограничений, по одному для каждого элемента, и в каждом ограничении, которое мне нужно проиндексировать. над ItemChildren. Я относительный новичок в OPL, поэтому я знаю, что неправильно использую синтаксис при инициализации переменной dependentSet, но я не знаю, как правильно написать этот оператор, чтобы он создавал набор, который я ищу.
Может ли кто-нибудь помочь мне понять утверждения, необходимые для создания набора, который мне нужен?