I am facing a classic problem that I don't know how solve.
I am allowing the technologies in the power sector to retire early if necessary. To do so I am defining Rcap_bnd~lo(year =0) = 1 for these techs.
I am also activating the option "retire" in the run file.
Furthermore, I am defining a constraint to force the coal based power plants capacity to be zero by 2025.
The problem is that I still have coal PPs in the model eventhough my run is optimal (cplex status : optimal solution).
I might have done some errors processing the results but can you tell if the way I am defining early retirement is wrong?
08-04-2021, 09:45 PM (This post was last modified: 08-04-2021, 09:50 PM by Antti-L.)
Make sure you don't have dummy imports for that UC. If you don't have any, please show how you defined the UC, and the results for the levels and marginals of the UC constraint (User_con, User_conFXM). The levels should be zero, and I think at least some marginals non-zero.
If you have dummies for the UC, your retirement activation might not be working. For checking that please show the full RUN file.
Here's how the cap_bnd is set to zero in 2030 in the region AT in my model, the same thing is used to define set the var_cap variable to zero for coal based PP in France in 2025. I am not able to see nor user_con nor user_confxm since i dind't generate a real UC.
And here's the var_capM of the concerned Power plants. If I am getting it Right, this can be interpreted as the cost derease in the objective function if the RHS of the capacity bound is to increase by one unit.
08-04-2021, 10:36 PM (This post was last modified: 08-04-2021, 10:37 PM by Antti-L.)
Ok, so it was VAR_CAP variable bounds, not UC constraints.
If you have defined CAP_BND(UP)=0, then it is impossible to have any capacity, if you indeed have retirements activated correctly. But if you don't have retirements activated, CAP_BND(UP)=0 will not (it cannot) eliminate existing capacities, only new ones. Is that what you are seeing (only old existing capacities left)?
As you did not post the RUN file, I cannot see if the early retirements are properly enabled or not.
I still have the same problem. Therefore, could you tell if the way RCAP_BND attribute is assigned to my process is correct?
Please find attached the run file of my scenario
Yes it is correct.
I also just tested with using such a RCAP_BND, and setting $SET RETIRE YES and $SET DSCAUTO YES like you did.
And I verified that the early retirements were correctly enabled. Moreover, I can see the technology, for which I enabled the retirements, was fully retired after the Base year (this test was with the DEMO model).
So, I can confirm it works quite as expected. As to your problem, I am sorry but I don't know what it is. If you constrain the capacities that have retirements enabled to zero, it should work well. In the VAR_CAP results, you should see both the original capacity (vintage '0' or '-') and the retired capacity (vintage '¤') reported, the latter as a negative term.
I had a bug in my processin code. when reading the VD file, I added a condition to eliminate all values < 0.001 because I have a lot of non zeros caused by the non use of crossover. I just changed from:
- eliminate all values<0.01 to eliminate all abs(values) < 0.001 and it worked just fine.
23-01-2025, 09:01 PM (This post was last modified: 23-01-2025, 09:13 PM by farzin.)
(26-04-2021, 08:37 PM)Mahmoud Wrote: Thank you Antti for your help.
I had a bug in my processin code. when reading the VD file, I added a condition to eliminate all values < 0.001 because I have a lot of non zeros caused by the non use of crossover. I just changed from:
- eliminate all values<0.01 to eliminate all abs(values) < 0.001 and it worked just fine.
Thanks again Antti
Best regards,
Mahmoud
Hi Mahmoud,
Firstly, I wanted to know if the issue related to retirement was resolved. Did you change anything other than enabling the retire option?
Also, I was wondering how you were able to tell GAMS to do this. I might have a similar problem where I want to eliminate small values like this. But I do not know how and where to implement such a condition. Weren't you using Veda? What do you mean by processing code? Thanks in advance!