I am trying to optimize an energy production process in a year, based on the hourly resolutions. The purchased electricity price from the grid has two different values based on the two times of a day; between 07:00-18:00 the price is 10, between 18:00-07:00 the price is 5.
The time sets are:
P_el electricityprice /t7*t18 10, t19*t6 5, ....../
t time /t1*t8760/
How can create the P_el automatically, so that I dont' need to write different sets by hand until the 8760th hour?
Daily subsets of annual data Topic is solved
Re: Daily subsets of annual data
Hi,
One way to do this, is using the "mod" function together with the "ord" operator:
If you need more structure about the time steps in your model anyway, like a mapping between your set t and the days of the year and the hours of a day, you could also build up such a mapping first, using the matching operator (https://www.gams.com/latest/docs/usergu ... ny-to-many) and use that to assign the different prices:
Hope that helps!
Lutz
One way to do this, is using the "mod" function together with the "ord" operator:
Code: Select all
set t hours of a year /t1*t8760/;
* Init everything to 5
parameter P_el(t) electricity price /#t 5/;
* Set peak hours to 10
P_el(t)$(mod(ord(t),24)>=7 and mod(ord(t),24)<=18 ) = 10;
Code: Select all
set h hours of a day / h1*h24 /
d days of a year / d1*d365 /
dh(d,h) each day has 24 h / #d.#h /
t hours of a year / t1*t8760 /
tdh(t,d,h) map hours of year to days of year and hours of day / #t:#dh /;
* Init everything to 5
parameter P_el(t) electricity price /#t 5/;
* Set peak hours to 10
P_el(t)$sum(tdh(t,d,h)$(ord(h)>=7 and ord(h)<=18), 1) = 10;
Lutz
Re: Daily subsets of annual data
thank you so very much Lutz! A great explanation. Thank you for your effort!Lutz wrote:Hi,
One way to do this, is using the "mod" function together with the "ord" operator:
If you need more structure about the time steps in your model anyway, like a mapping between your set t and the days of the year and the hours of a day, you could also build up such a mapping first, using the matching operator (https://www.gams.com/latest/docs/usergu ... ny-to-many) and use that to assign the different prices:Code: Select all
set t hours of a year /t1*t8760/; * Init everything to 5 parameter P_el(t) electricity price /#t 5/; * Set peak hours to 10 P_el(t)$(mod(ord(t),24)>=7 and mod(ord(t),24)<=18 ) = 10;
Hope that helps!Code: Select all
set h hours of a day / h1*h24 / d days of a year / d1*d365 / dh(d,h) each day has 24 h / #d.#h / t hours of a year / t1*t8760 / tdh(t,d,h) map hours of year to days of year and hours of day / #t:#dh /; * Init everything to 5 parameter P_el(t) electricity price /#t 5/; * Set peak hours to 10 P_el(t)$sum(tdh(t,d,h)$(ord(h)>=7 and ord(h)<=18), 1) = 10;
Lutz