
From:  Meketon, Marc 
Subject:  [Helpglpk] Invert a setofsets with mutually exclusive elements 
Date:  Wed, 25 May 2016 16:23:50 0500 
I have a simple set of sets that has mutually exclusive elements that I would like to invert into a param that, for each element, gives me the ID of the set it belongs to. Below is an example of the set of sets with mutually exclusive elements: set POOLS := {"Pool201", "Pool203", "Pool204", "Pool205"}; set x_IN_POOLS{POOLS}; check {pool1 in POOLS, pool2 in POOLS : pool1 != pool2} card(x_IN_POOL[pool1] inter x_IN_POOL[pool2])==0; data; set x_IN_POOLS ["Pool201"] := 234, 345, 456, 567, 678, 012, 543; set x_IN_POOLS ["Pool203"] := 789, 890; set x_IN_POOLS ["Pool204"] := 123, 901; set x_IN_POOLS ["Pool205"] := 987, 876, 765, 654; end; I would like to calculate a
param PoolID that, for a given “x”, gives the “Pool” it belongs to. This is equivalent to the following, but I want to use GMPL to calculate the following and not code this into the data: set All_x := setof{pool in POOLS, x in x_IN_POOL[pool]} x; param PoolID{All_x}, symbolic; data; param PoolID := 123 Pool204 234 Pool201 345 Pool201 456 Pool201 567 Pool201 678 Pool201 789 Pool203 890 Pool203 901 Pool204 012 Pool201 987 Pool205 876 Pool205 765 Pool205 654 Pool205 543 Pool201 ; I have not yet figured out a clever way to do the above with calculations and no “data” section.
BTW, I do know that I could begin with the definition of
All_x and PoolID, and derive the set
POOLS and the setofsets
x_IN_POOLS: set POOLS := setof{x in All_x} PoolID[x]; set x_IN_POOL{pool in POOLS} := setof{x in All_x : pool = PoolID[x]} x; display x_IN_POOL; But I didn’t want to model my data that way. Marc This email and any attachments may be confidential or legally privileged. If you received this message in error or are not the intended recipient, you should destroy the email message and any attachments or copies, and you are prohibited from retaining, distributing, disclosing or using any information contained herein. Please inform us of the erroneous delivery by return email. Thank you for your cooperation. 
[Prev in Thread]  Current Thread  [Next in Thread] 