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   [email protected]
"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

_______________________________________________
Help-glpk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to