Nikou
1
Hello
I would like to conditionally write constraints. In order to explain what I mean, consider the following example
Let i, s be sets.
s = {a,b}
i = {1,2}
The statement eq(i,s)… generates the equations eq(1,a), eq(1,b), eq(2,a), eq(2,b)
I would like to tell GAMS to only generate equations by only considering 1 element of s (I don’t know which one).
The result would be either
eq(1,a), eq(2,a) or eq(1,b), eq(2,b)
So, I would like to implement the following :
SCALAR written ;
written = 0 ;
loop(i,
written = 0 ;
loop(s,
if (written = 0,
write equation eq(i,s)..
written = 1 ;
)
)
)
How can I do this?
These things are much easier in GAMS than you would expect. You need a set and condition. You can read about set manipulation here: https://www.gams.com/latest/docs/UG_SetDefinition.html
and condition here: https://www.gams.com/latest/docs/UG_CondExpr.html#UG_CondExpr_TheDollarCondition
set flag(s);
flag(s) = no;
* you can change it to b if you need
flag("a") = yes;
eq(i, s) $flag(s).. writeequation as usual
Nikou
3
Thank you very much for your reply.
My question is somehow more complex.
I am generating equations eq(i,j,s), where i,j,s are sets.
It happens that equations eq(i,j,“s1”) and eq(i,j,“s2”) are identical.
This is because the values of s are not included in the output of the gams equation statement.
How can I make sure that these equations are generated only once?
Do you mean s is not included in the equation itself? Then have you tried defining equation over (i, j) instead of (i, j, s) ?
Please clarify your question if this doesn’t answer your question.