Help with Simplification?

I think an easy question - how can I generalize the last two equations?

Set bottom /a,b,c/;
Set top /one, two/;
Set one(bottom) /a,b/;
Set two(bottom) /c/;

Parameter benefits(bottom) /a 1, b 2, c 3/;
Parameter limits(top) /one 5, two 4 /;

Variables
totbenefits total benefits
q(bottom) letters chosen
Positive Variable q ;

Equations
totalben total benefits
limit1 limits choices
limit2 limits choices;

totalben … totbenefits =e= sum(bottom,benefits(bottom)*q(bottom)) ;
limit1… q(‘a’)+q(‘b’) =l= limits(‘one’);
limit2… q(‘c’) =l= limits(‘two’);

model calc /all/;
solve calc using lp maximizing totbenefits;

It should be noted that simply by defining a set top /one, two/, GAMS does not anything about sets one(bottom) and two(bottom). The way to simplify this is using a multidimensional set and one to one mapping https://www.gams.com/latest/docs/UG_SetDefinition.html#UG_SetDefinition_Multi-dimensionalSets

In the following code I create a 2D set and use it to replace the constraints limit1 and limit2.

Set bottom /a,b,c/;
set top/one,two /;
set trial(top, bottom);


set two_d_set(top, bottom)
/
one.a
one.b
two.c
/
;


Parameter benefits(bottom)  /a 1, b 2, c 3/;
parameter limits(top) /one 5, two 4 /;

Variables
totbenefits total benefits
q(bottom) letters chosen
Positive Variable q ;

Equations
         totalben            total benefits
         limit
;

totalben ..                  totbenefits  =e= sum(bottom,benefits(bottom)*q(bottom))  ;
limit(top)..    sum(bottom $two_d_set(top, bottom), q(bottom))=l= limits(top);

model calc /all/;
solve calc using lp maximizing totbenefits;

Hope this helps.

  • Atharv

It does, I greatly appreciate it.