[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-glpk] Invert a set-of-sets with mutually exclusive elements
From: |
Meketon, Marc |
Subject: |
Re: [Help-glpk] Invert a set-of-sets with mutually exclusive elements |
Date: |
Thu, 26 May 2016 15:57:09 -0500 |
Very clever solution. Thank you.
However, having the max/min_symbolic would be less esoteric maybe more useful.
Sent from my mobile
> On May 26, 2016, at 1:58 PM, Andrew Makhorin <address@hidden> wrote:
>
>
>> Both suggestions about max/min_symbolic and the iterated concatenate
>> function would be helpful, especially the max/min_symbolic one. One
>> of my attempts at this was to use the iterated "min" (similar to your
>> solution), but it came back with a nasty message about only working
>> for numbers, not symbols.
>>
>> In real life, the names of the pools are not Pool201 etc. but rather
>> names of companies. Pool201 would really be, say "Xerox" and Pool203
>> would really be, say, "Apple" so doing parsing of the name would not
>> help.
>>
>> The temporary solution that I choose was to begin with the inversion
>> (begin with PoolID), and derive the other sets, but that is not the
>> natural way of looking at the data. Like you, I've wanted to do this
>> in other situations in the past and never figured out how.
>
> The following should work (based on Heinrich's example):
>
> set POOLS := {"Pool201", "Pool203", "Pool204", "Pool205"};
>
> set x_IN_POOLS{POOLS};
>
> table foo1{pool in POOLS, x in x_IN_POOLS[pool]} OUT "CSV" "/tmp/foo":
> pool~POOL, x~X;
>
> set All_x;
>
> param PoolID{x in All_x}, symbolic;
>
> table foo2 IN "CSV" "/tmp/foo": All_x <- [X], PoolID~POOL;
>
> display PoolID;
>
> 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;
>
>
>
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.