[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-glpk] Invert a set-of-sets with mutually exclusive elements

From: Meketon, Marc
Subject: [Help-glpk] Invert a set-of-sets 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"};



check {pool1 in POOLS, pool2 in POOLS : pool1 != pool2} card(x_IN_POOL[pool1] inter x_IN_POOL[pool2])==0;



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;




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;



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 set-of-sets 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.



This e-mail 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 e-mail 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 e-mail. Thank you for your cooperation.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]