help-glpk
[Top][All Lists]
Advanced

[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: Michael Hennebry
Subject: Re: [Help-glpk] Invert a set-of-sets with mutually exclusive elements
Date: Fri, 27 May 2016 01:54:03 -0500 (CDT)
User-agent: Alpine 1.00 (DEB 882 2007-12-20)

I think the following will do approximately what OP wants.
param sn0 integer ;
param names0{ 0..sn0-1 } symbolic ;

set breaks := setof{ j in 0..sn0-1 : "break" == names0[j] } j ;
set names := setof { j in 0..sn0-1 : names0[j] != "break" } names0[j] ;

param name2index0{ name in names } :=
                           min { j in 0..sn0-1 : names0[j]==name } j ;

param name2subsetindex{ name in names } :=
                                sum { j in breaks : name2index0[name]< j } 1 ;

param sizeofbreaks := sum { j in breaks } 1 ;

set index2subset{ j in 0..sizeofbreaks }  :=
               setof { name in names : j == name2subsetindex[name] } name ;

set name2subset{ name in names } := index2subset[name2subsetindex[name]] ;


var x >= 0 ;

minimize  z : x ;

display names0 ;
display sizeofbreaks ;
display names ;
display name2subsetindex ;
display name2subset ;

data ;

param sn0 := 9 ;

param names0 default break ,
    0 fred
    1 greg
    2 break
    3 hank

    5 ivan
  ;
end ;

I know of no convenient way to remove all the explicit indices.
Building up names0 from an 8 x whatever array would eliminate most of them.
Also, replacing the break's with subset
indices might result in a tidier model.

--
Michael   address@hidden
"Sorry but your password must contain an uppercase letter, a number,
a haiku, a gang sign, a heiroglyph, and the blood of a virgin."
                                                             --  someeecards



reply via email to

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