## LOOP Problem

Problems with syntax of GAMS
Ali
User
Posts: 2
Joined: 9 months ago

### LOOP Problem

Hi,

I want to code the following BASIC program into GAMS. This program computes variable Z based on variable L and assumes that L in the last period is zero (T= 0,...,10). Reversely, it computes L variable up to the first time. Below please find my loop command but it doesn't give me the correct loop answer.

Thanks for the help,

0 REM PROGRAM 1.1: MINE PROBLEM
20 DIM X(11},Y(11).Z(11).L(11}
30 L(10) = 0
40 FOR T = 9 TO 0 STEP -1
50 Z(T} = (1- L(T+1))
60 L(T) = L(T+1) + Z(T)^2
70 NEXT T
80 X(0) = 1000
90 FOR T = 0 TO 9
100 Y(T) = X(T} * Z(T)
110 X(T+1) = X(T) - Y(T}
120 NEXT T
130 LPRINT " T X(T} Y(T) L(T)"
140 LPRINT "------------------------------------------------"
150 LPRINT 0,X(0),Y(0)
160 FOR T = 1 TO 10
170 LPRINT T,X(T),Y(T),L(T}
180 NEXT T
190 END

set t Time periods /0*10/;

variable L(t);

L.up(t) = 0;

loop(t, L.l(t) = L.l(t+1)+((1-L.l(t+1)/2)**2));

display L.l;
Attachments

dirkse
Moderator
Posts: 33
Joined: 1 year ago
Location: Fairfax, VA

### Re: LOOP Problem

Have you had a chance to look over the rules for this forum (see the Rules tab)? It's good form to provide your name and affiliation. That increases the chance you'll get a helpful answer.

In this case, divide and conquer is a good strategy. The first loop in the BASIC code computes L and Z, but it does so with a backwards loop. Your loop is forwards, so that won't work. Also, you can just use parameters here, since you are doing computations. Some example code is below. If you run it in the IDE with gdx=lookAtMe and then view the lookAtMe.gdx file in the GDX browser of the IDE you can have a good look at not only the output L and Z but also the interesting sets here: tLast, revt, etc.

-Steve

Code: Select all

``````\$ontext
0 REM PROGRAM 1.1: MINE PROBLEM
20 DIM X(11},Y(11).Z(11).L(11}
30 L(10) = 0
40 FOR T = 9 TO 0 STEP -1
50 Z(T} = (1- L(T+1)) / 2
60 L(T) = L(T+1) + Z(T)^2
70 NEXT T
\$offtext

set t / 0 * 10 /;
singleton set tLast(t);
tLast(t) = card(t) eq ord(t);
alias (t,rt);
set revt(t,rt) 'reverse t';
revt(t,t+[card(t)-2*ord(t)+1]) = yes;
display revt;

parameters L(t), Z(t);
L(t) = na;
L(tLast) = 0;
loop {revt(t,rt)\$[not tLast(rt)],
Z(rt) = (1 - L(rt+1)) / 2;
L(rt) = L(rt+1) + sqr(Z(rt));
};
display L;
``````

Ali
User
Posts: 2
Joined: 9 months ago

### Re: LOOP Problem

Dear Steve,
Hi

Thanks for your kind reply. But I got an error message for "singleton set" by GMAS IDE. Would you please let me know, where is the problem ?

Regards,
Ali

bussieck
Moderator
Posts: 147
Joined: 2 years ago

### Re: LOOP Problem

You are probably using an old version of GAMS. Singleton sets where introduced in 24.6 (7/2014). You probably should update your GAMS system.

-Michael