LOOP

Problems with syntax of GAMS
Rofice
User
User
Posts: 14
Joined: 6 months ago

LOOP

Postby Rofice » 2 weeks ago

Set i /0*100/ ;

parameter a(i)
;

a('0') = 0 ;
loop(i, a(i+1) = a(i)+1 ;
)
;
Display a;
How I can transform the above loop, so that iteration stop when a(i+1) = 20
I used the following
loop(i$(a(i) lt 20), a(i+1) = (a(i)+1)$(a(i) lt 20) ;
but when value reaches to 20, iteration keep going.

Best Regards

User avatar
Gideon Kruseman
User
User
Posts: 17
Joined: 5 months ago

Re: LOOP

Postby Gideon Kruseman » 2 weeks ago

When you reach 20 the calculation is not executed so a(i+1) is equal to zero. which means it is below 20 and the process starts over again. so you will need to build in a switch that tells you, you have reached your threshold level. Something along these lines will work.
Cheers, Gideon

Set i /0*100/ ;

parameter a(i)
;
scalar init;init=0;
a('0') = 0 ;
loop(i${(a(i) lt 20) and (init ne 1)},
a(i+1) = a(i)+1;
init${a(i+1) eq 20}=1;
) ;

Display a;
Gideon Kruseman
ex-ante and foresight lead @CIMMYT, big data focal point @CIMMYT, coordinator CoP socio-economic data @CGIAR_BigData

Rofice
User
User
Posts: 14
Joined: 6 months ago

Re: LOOP

Postby Rofice » 2 weeks ago

Thank you Sir, It works :)
Can you recommend any book with case studies or examples for loop functions?
Gideon Kruseman wrote:
2 weeks ago
When you reach 20 the calculation is not executed so a(i+1) is equal to zero. which means it is below 20 and the process starts over again. so you will need to build in a switch that tells you, you have reached your threshold level. Something along these lines will work.
Cheers, Gideon

Set i /0*100/ ;

parameter a(i)
;
scalar init;init=0;
a('0') = 0 ;
loop(i${(a(i) lt 20) and (init ne 1)},
a(i+1) = a(i)+1;
init${a(i+1) eq 20}=1;
) ;

Display a;


Who is online

Users browsing this forum: Bing [Bot] and 1 guest