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