looping solve statement over time set Topic is solved

Problems with syntax of GAMS
Post Reply
bigakrim
User
User
Posts: 12
Joined: 4 years ago

looping solve statement over time set

Post by bigakrim »

I have an objective function equation which is time-dependent. Indeed I want to have an optimal solution for each time t.
Hence for each time t an optimal objective. I don't know how to loop the solve statement over the time set t.
I had tried with the attached gams code and excel input data file but I have gotten errors.
Please help me.
opt_data.xlsx
(68.25 KiB) Downloaded 227 times
opt_myopic_1.gms
(8.07 KiB) Downloaded 214 times
User avatar
Renger
Posts: 639
Joined: 7 years ago

Re: looping solve statement over time set

Post by Renger »

Hi

It looks like you want to model a recursive model, where the values of R and Q for the next period are defined using the actual period.
You have to do the following to be able to run over t.
  • You keep your original parameters but define new parameters for the model without a time index. E.g. you read the parameter E_L(t) from your excel sheet and define a model parameter E_Lm for the model. Same for all other parameters. In the loop, they are assigned the value for the actual period.
  • You remove in your model definition all the indices t from the variables and use the model parameters mentioned above (e.g. E_Lm and not E_L(t)).
  • You define R and Q as parameters and assign them values for the first period.
  • You write your two first equations as assignments just after the solve in the loop and use the solution to get the values for R and Q for the next period.

Code: Select all

* Remove R and Q from the variables and make them parameters
parameter R, Q;
* Initialize R and Q for the first period
R = ....;
Q = ....;

* Remove the time indices in all equations of the model
....
eq4.. x1 + x5 +beta_d_E*x9 =l= E_L;
....
eq12.. beta_c_E*(x2 +x6) -beta_d_E*x9 =l=Rmax - R;
...
* Loop over t
* Define the model parameters

parameter E_Lm, P_rerm, ....

loop(t, 
* Assign the values to the model parameters
     E_Lm = E_L(t);
     P_rerm = P_rer(t);
     ...      
     
* Solve your model
 
* Report your results using the time index
   results(t, "X2") = X2.L:
* Assign the values for the next period for R and Q 
   R = R + beta_c_E*(x2.L  + x6.L) - beta_d_E * x9.L;
   Q = Q + beta_c_T*(QchST.L + sum(i,k1(i) * x11.L(i)))- sum(i, beta_d_T*x12.L(i));
);


I hope this helps

Cheers
Renger
____________________________________
Enjoy modeling even more: Read my blog on modeling at The lazy economist
bigakrim
User
User
Posts: 12
Joined: 4 years ago

Re: looping solve statement over time set

Post by bigakrim »

Many thanks to you Ms. Renger
I integrated your recommendations.
the model works fine but there is a problem, taking R, and Q as parameters
allows GAMS to give them any value during the optimization process.
Yet R and Q as used as energy storage levels and can not take negative values.
I attached the model with your recommendations.
opt_myopic_1.gms
(7.31 KiB) Downloaded 214 times
Please share another trick that enables me to consider R and Q as variables
thanks best regards.
User avatar
Renger
Posts: 639
Joined: 7 years ago

Re: looping solve statement over time set

Post by Renger »

Hi
You could introduce two positive variables Rn, Qn and add the following equations:

Code: Select all

positive variables 
	Rn Reserve in next period,
	Qn ....;
eqR..
    Rn =E= R + beta_c_E*(x2  + x6) - beta_d_E * x9;

eqQ..
    Qn =E= Q + beta_c_T*(QchST + sum(i,k1(i) * x11(i)))- sum(i, beta_d_T*x12(i));
After the solve, you assign R and Q

Code: Select all

R = Rn.L;
Q = Qn.L;
cheers
Renger
____________________________________
Enjoy modeling even more: Read my blog on modeling at The lazy economist
bigakrim
User
User
Posts: 12
Joined: 4 years ago

Re: looping solve statement over time set

Post by bigakrim »

Many thanks Ms Renger
the code works very well.
Post Reply