distributed hydropower models in stochasticprograms jl
play

Distributed Hydropower Models in StochasticPrograms.jl Martin Biel - PowerPoint PPT Presentation

KTH ROYAL INSTITUTE OF TECHNOLOGY Distributed Hydropower Models in StochasticPrograms.jl Martin Biel KTH - Royal Institute of Technology July 30, 2019 Motivation Simulation of hydro power operations for decision-support Martin Biel (KTH)


  1. StochasticPrograms.jl - Simple model ✞ ☎ simple_model = @stochastic_model begin @stage 1 begin @variable(model, x 1 >= 40) @variable(model, x 2 >= 20) @objective(model, Min, 100*x 1 + 150*x 2 ) @constraint(model, x 1 + x 2 <= 120) minimize q 1 ( ξ ) y 1 + q 2 ( ξ ) y 2 y 1 , y 2 ∈ R end @stage 2 begin s.t. 6 y 1 + 10 y 2 ≤ 60 x 1 @decision x 1 x 2 8 y 1 + 5 y 2 ≤ 80 x 2 @uncertain q 1 q 2 d 1 d 2 @variable(model, 0 <= y 1 <= d 1 ) 0 ≤ y 1 ≤ d 1 ( ξ ) @variable(model, 0 <= y 2 <= d 2 ) @objective(model, Min, q 1 *y 1 + q 2 *y 2 ) 0 ≤ y 2 ≤ d 2 ( ξ ) @constraint(model, 6*y 1 + 10*y 2 <= 60*x 1 ) @constraint(model, 8*y 1 + 5*y 2 <= 80*x 2 ) end end ✝ ✆ Martin Biel (KTH) July 30, 2019 7/31

  2. StochasticPrograms.jl - Simple model ✞ ☎ simple_model = @stochastic_model begin @stage 1 begin @variable(model, x 1 >= 40) @variable(model, x 2 >= 20) @objective(model, Min, 100*x 1 + 150*x 2 ) @constraint(model, x 1 + x 2 <= 120) minimize q 1 ( ξ ) y 1 + q 2 ( ξ ) y 2 y 1 , y 2 ∈ R end @stage 2 begin s.t. 6 y 1 + 10 y 2 ≤ 60 x 1 @decision x 1 x 2 8 y 1 + 5 y 2 ≤ 80 x 2 @uncertain q 1 q 2 d 1 d 2 @variable(model, 0 <= y 1 <= d 1 ) 0 ≤ y 1 ≤ d 1 ( ξ ) @variable(model, 0 <= y 2 <= d 2 ) @objective(model, Min, q 1 *y 1 + q 2 *y 2 ) 0 ≤ y 2 ≤ d 2 ( ξ ) @constraint(model, 6*y 1 + 10*y 2 <= 60*x 1 ) @constraint(model, 8*y 1 + 5*y 2 <= 80*x 2 ) end end ✝ ✆ Martin Biel (KTH) July 30, 2019 7/31

  3. StochasticPrograms.jl - Discrete distribution ✞ ☎ s 1 = Scenario(q 1 = -24.0, q 2 = -28.0, d 1 = 500.0, d 2 = 100.0, probability = 0.4); s 2 = Scenario(q 1 = -28.0, q 2 = -32.0, d 1 = 300.0, d 2 = 300.0, probability = 0.6); simple_discrete = instantiate(simple_model, [s 1 ,s 2 ]) Stochastic program with: * 2 decision variables * 2 recourse variables * 2 scenarios of type Scenario Solver is default solver ✝ ✆ Martin Biel (KTH) July 30, 2019 8/31

  4. StochasticPrograms.jl - Discrete distribution ✞ ☎ p r i n t ( s i m p l e _ d i s c r e t e ) F i r s t - s t a g e ============== Min 100 x 1 + 150 x 2 S u b j e c t t o x 1 + x 2 120 ≤ x 1 40 ≥ x 2 20 ≥ Second - s t a g e ============== Subproblem 1 ( p = 0 .4 0 ) : Min - 24 y 1 - 28 y 2 S u b j e c t t o - 60 x 1 + 6 y 1 + 10 y 2 0 ≤ - 80 x 2 + 8 y 1 + 5 y 2 0 ≤ 0 y 1 500 ≤ ≤ 0 y 2 100 ≤ ≤ Subproblem 2 ( p = 0 .6 0 ) : Min - 28 y 1 - 32 y 2 S u b j e c t t o 6 y 1 + 10 y 2 - 60 x 1 0 ≤ 8 y 1 + 5 y 2 - 80 x 2 0 ≤ 0 y 1 300 ≤ ≤ 0 y 2 300 ≤ ≤ ✝ ✆ Martin Biel (KTH) July 30, 2019 8/31

  5. StochasticPrograms.jl - Discrete distribution ✞ ☎ dep = DEP(simple_discrete) print(dep) Min 100 x 1 + 150 x 2 - 9.6 y 11 - 11.2 y 2 1 - 16.8 y 12 - 19.2 y 2 2 Subject to x 1 + x 2 ≤ 120 6 y 11 + 10 y 2 1 - 60 x 1 ≤ 0 8 y 11 + 5 y 2 1 - 80 x 2 ≤ 0 6 y 12 + 10 y 2 2 - 60 x 1 ≤ 0 8 y 12 + 5 y 2 2 - 80 x 2 ≤ 0 x 1 ≥ 40 x 2 ≥ 20 0 ≤ y 11 ≤ 500 0 ≤ y 2 1 ≤ 100 0 ≤ y 12 ≤ 300 0 ≤ y 2 2 ≤ 300 ✝ ✆ Martin Biel (KTH) July 30, 2019 8/31

  6. StochasticPrograms.jl - Discrete distribution ✞ ☎ vrp = VRP(simple_discrete, solver = glpk) -855.83 vss = VSS(simple_discrete, solver = glpk) 286.92 evpi = EVPI(simple, solver = glpk) 662.92 ✝ ✆ Martin Biel (KTH) July 30, 2019 8/31

  7. StochasticPrograms.jl - Continuous distribution ✞ ☎ @sampler SimpleSampler = begin N::MvNormal SimpleSampler( µ , Σ ) = new(MvNormal( µ , Σ )) @sample Scenario begin x = rand(sampler.N) return Scenario(q 1 = x[1], q 2 = x[2], d 1 = x[3], d 2 = x[4]) end end µ = [-28, -32, 300, 300] Σ = [2 0.5 0 0 0.5 1 0 0 0 0 50 20 0 0 20 30] sampler = SimpleSampler( µ , Σ ) ✝ ✆ Martin Biel (KTH) July 30, 2019 9/31

  8. StochasticPrograms.jl - Continuous distribution ✞ ☎ saa = SAA(simple_model, sampler, 100) Stochastic program with: * 2 decision variables * 2 recourse variables * 100 scenarios of type Scenario Solver is default solver ✝ ✆ Martin Biel (KTH) July 30, 2019 9/31

  9. StochasticPrograms.jl - Continuous distribution ✞ ☎ saa = SAA(simple_model, sampler, 100) Stochastic program with: * 2 decision variables * 2 recourse variables * 100 scenarios of type Scenario Solver is default solver ✝ ✆ ✞ ☎ confidence_interval(simple_model, sampler; solver = glpk, confidence = 0.95, N = 100) Confidence interval (p = 95%): [-2630.44 � -2389.31] ✝ ✆ Martin Biel (KTH) July 30, 2019 8/31

  10. StochasticPrograms.jl - Continuous distribution ✞ ☎ saa = SAA(simple_model, sampler, 100) Stochastic program with: * 2 decision variables * 2 recourse variables * 100 scenarios of type Scenario Solver is default solver ✝ ✆ ✞ ☎ confidence_interval(simple_model, sampler; solver = glpk, confidence = 0.95, N = 100) Confidence interval (p = 95%): [-2630.44 � -2389.31] ✝ ✆ ✞ ☎ confidence_interval(simple_model, sampler; solver = glpk, confidence = 0.95, N = 1000) Confidence interval (p = 95%): [-2568.90 � -2509.78] ✝ ✆ Martin Biel (KTH) July 30, 2019 7/31

  11. Day-ahead problem - Electricity market Actor 1 P 1 E 1 Day- Ahead P 2 E 2 Actor 2 Martin Biel (KTH) July 30, 2019 8/31

  12. Day-ahead problem - Electricity market Actor 1 P 1 E 1 Day- Ahead P 2 E 2 Actor 2 Market closes Martin Biel (KTH) July 30, 2019 8/31

  13. Day-ahead problem - Electricity market Balance responsible Actor 1 Actor 1 P M , E 1 P 1 E 1 Day- Ahead P 2 E 2 P M , E 2 Actor 2 Actor 2 Balance responsible Next day Market closes Martin Biel (KTH) July 30, 2019 8/31

  14. Day-ahead problem - Electricity market Balance responsible Actor 1 Actor 1 P M , E 1 P 1 E 1 P E Day- Intraday Ahead P E P 2 E 2 P M , E 2 Actor 2 Actor 2 Balance responsible Next day Market closes Martin Biel (KTH) July 30, 2019 8/31

  15. Day-ahead problem - Electricity market Order Types • Single Hourly Order ◮ Price independent ◮ Price Dependent • Block Order ◮ Regular ◮ Linked • Exclusive Group • Flexible Order Martin Biel (KTH) July 30, 2019 9/31

  16. Day-ahead problem - Electricity market Order Types • Single Hourly Order ◮ Price independent ◮ Price Dependent • Block Order ◮ Regular ◮ Linked • Exclusive Group • Flexible Order Martin Biel (KTH) July 30, 2019 9/31

  17. Day-ahead problem - Single order Order Curve Price Independent Order Price Dependent Order 59.25 47.40 Price [EUR/MWh] 35.55 23.70 11.85 0.00 0.00 121.73 243.47 365.20 486.93 608.66 730.40 Order Volume [MWh/h] Figure: Single hourly order. Martin Biel (KTH) July 30, 2019 10/31

  18. Day-ahead problem - Single order Order Curve Price Independent Order Price Dependent Order Trading Outcome 59.25 47.40 Price [EUR/MWh] 35.55 23.70 11.85 0.00 0.00 121.73 243.47 365.20 486.93 608.66 730.40 Order Volume [MWh/h] Figure: Interpolated energy volume for a given market price. Martin Biel (KTH) July 30, 2019 10/31

  19. Day-ahead problem - Block order Block Order 14.93 [EUR/MWh] 500.00 [MWh/h] 15 20 Hour Figure: Block order between 15:00-20:00. Martin Biel (KTH) July 30, 2019 11/31

  20. Day-ahead problem - Block order Block Order 18.21 Rejected Order Market price 15.33 14.93 [EUR/MWh] 500.00 [MWh/h] Price [EUR/MWh] 12.46 9.58 6.71 15 20 Hour Figure: Rejected after market price settlement. Martin Biel (KTH) July 30, 2019 11/31

  21. Day-ahead problem - Block order Block Order Accepted Order 65.88 Market price 62.28 58.69 55.10 14.93 [EUR/MWh] 500.00 [MWh/h] Price [EUR/MWh] 51.50 47.91 44.31 40.72 37.13 33.53 15 20 Hour Figure: Accepted after market price settlement. Martin Biel (KTH) July 30, 2019 11/31

  22. Day-ahead problem - Setting • Price taking hydropower producer trading in the NordPool market Martin Biel (KTH) July 30, 2019 12/31

  23. Day-ahead problem - Setting • Price taking hydropower producer trading in the NordPool market • All power stations in the Swedish river Skellefteälven Martin Biel (KTH) July 30, 2019 12/31

  24. Day-ahead problem - Setting • Price taking hydropower producer trading in the NordPool market • All power stations in the Swedish river Skellefteälven • First stage: hourly electricity volume bids for the upcoming day ◮ Single hourly orders ◮ Block orders Martin Biel (KTH) July 30, 2019 12/31

  25. Day-ahead problem - Setting • Price taking hydropower producer trading in the NordPool market • All power stations in the Swedish river Skellefteälven • First stage: hourly electricity volume bids for the upcoming day ◮ Single hourly orders ◮ Block orders • Second stage: optimize day-ahead production ◮ Bid dispatch after market price realization ◮ Imbalances penalized in intraday market ◮ Water flow conversation (including water travel time) ◮ Maximize profits in the market and the future value of water Martin Biel (KTH) July 30, 2019 12/31

  26. Day-ahead problem - Setting • Price taking hydropower producer trading in the NordPool market • All power stations in the Swedish river Skellefteälven • First stage: hourly electricity volume bids for the upcoming day ◮ Single hourly orders ◮ Block orders • Second stage: optimize day-ahead production ◮ Bid dispatch after market price realization ◮ Imbalances penalized in intraday market ◮ Water flow conversation (including water travel time) ◮ Maximize profits in the market and the future value of water • Full model defined in HydroModels.jl Martin Biel (KTH) July 30, 2019 12/31

  27. Day-ahead problem - Data Deterministic • Physical parameters for power plants in Skellefteälven • Trade regulations from NordPool Uncertain • Day-ahead prices from NordPool • Mean water flows in Skellefteälven from SMHI Martin Biel (KTH) July 30, 2019 13/31

  28. Day-ahead problem - Data Figure: Schematic of the power stations in Skellefteälven. Martin Biel (KTH) July 30, 2019 13/31

  29. Day-ahead problem - Data Figure: Historical day-ahead prices 2013-2018 from NordPool. Martin Biel (KTH) July 30, 2019 13/31

  30. Day-ahead problem - Data Figure: Mean water flow in Skellefteälven 1999-2018 from SMHI. Martin Biel (KTH) July 30, 2019 13/31

  31. Day-ahead problem - Forecasts • Recurrent neural networks (GRU) Martin Biel (KTH) July 30, 2019 14/31

  32. Day-ahead problem - Forecasts • Recurrent neural networks (GRU) • Trained on price data and mean flow data separately Martin Biel (KTH) July 30, 2019 14/31

  33. Day-ahead problem - Forecasts • Recurrent neural networks (GRU) • Trained on price data and mean flow data separately • Early stopping to prevent overfitting Martin Biel (KTH) July 30, 2019 14/31

  34. Day-ahead problem - Forecasts • Recurrent neural networks (GRU) • Trained on price data and mean flow data separately • Early stopping to prevent overfitting • Seasonality modeled through separate inputs to the network Martin Biel (KTH) July 30, 2019 14/31

  35. Day-ahead problem - Forecasts • Recurrent neural networks (GRU) • Trained on price data and mean flow data separately • Early stopping to prevent overfitting • Seasonality modeled through separate inputs to the network • Driven by Gaussian noise Martin Biel (KTH) July 30, 2019 14/31

  36. Day-ahead problem - Forecasts 100 80 75 60 50 40 25 20 0 0 5 10 15 20 5 10 15 20 2013 2014 200 80 150 60 100 40 20 50 0 0 5 10 15 20 5 10 15 20 2015 2016 200 125 100 150 75 100 50 50 25 0 5 10 15 20 5 10 15 20 2017 2018 Figure: Price forecasts (black) and raw data (colored). Martin Biel (KTH) July 30, 2019 15/31

  37. Day-ahead problem - Forecasts 125 100 Price [Eur] 75 50 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Figure: 1000 sampled price curves using RNN. Martin Biel (KTH) July 30, 2019 16/31

  38. Day-ahead problem - Forecasts 125 100 Price [Eur] 75 50 25 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Month Figure: Price forecasts throughout a year. Martin Biel (KTH) July 30, 2019 17/31

  39. Day-ahead problem - Forecasts 700 600 500 400 300 200 100 1 31 61 91 121 151 181 211 241 271 301 331 361 2018 150 125 100 75 50 0 100 200 300 Figure: Mean flow forecasts (black) and raw data (colored). Martin Biel (KTH) July 30, 2019 17/31

  40. Day-ahead problem - Sampler ✞ ☎ @scenario DayAheadScenario = begin ρ ::PriceCurve{Float64} Q ˜ ::Vector{Float64} end @sampler RecurrentDayAheadSampler = begin date::Date price_forecaster::Forecaster{:price} flow_forecaster::Forecaster{:flow} @sample DayAheadScenario begin prices = forecast(sampler.price_forecaster, month(sampler.date)) flows = forecast(sampler.flow_forecaster, week(sampler.date)) return DayAheadScenario(PriceCurve(prices), flows[1]) end end ✝ ✆ Martin Biel (KTH) July 30, 2019 18/31

  41. Day-ahead problem - Bidlevels Expected price Bidlevels 60 50 Price [Eur] 40 30 20 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Figure: Available price points for bidding. Martin Biel (KTH) July 30, 2019 19/31

  42. Day-ahead problem - Value of water • Marginal value of water has large impact on optimal dispatch Martin Biel (KTH) July 30, 2019 20/31

  43. Day-ahead problem - Value of water • Marginal value of water has large impact on optimal dispatch • Sometimes optimal to accept imbalance penalty and save water Martin Biel (KTH) July 30, 2019 20/31

  44. Day-ahead problem - Value of water • Marginal value of water has large impact on optimal dispatch • Sometimes optimal to accept imbalance penalty and save water • Naive approach: production from excess water solved at mean price Martin Biel (KTH) July 30, 2019 20/31

  45. Day-ahead problem - Value of water • Marginal value of water has large impact on optimal dispatch • Sometimes optimal to accept imbalance penalty and save water • Naive approach: production from excess water solved at mean price • Leads to crude order strategies Martin Biel (KTH) July 30, 2019 20/31

  46. Day-ahead problem - Value of water • Solve a dummy stochastic program: ◮ First stage: water content in reservoirs ◮ Second stage: optimize production over the coming week ◮ Future prices and water inflows are uncertain Martin Biel (KTH) July 30, 2019 21/31

  47. Day-ahead problem - Value of water • Solve a dummy stochastic program: ◮ First stage: water content in reservoirs ◮ Second stage: optimize production over the coming week ◮ Future prices and water inflows are uncertain • L-shaped generates a polyhedral objective approximation Martin Biel (KTH) July 30, 2019 21/31

  48. Day-ahead problem - Value of water • Solve a dummy stochastic program: ◮ First stage: water content in reservoirs ◮ Second stage: optimize production over the coming week ◮ Future prices and water inflows are uncertain • L-shaped generates a polyhedral objective approximation • Approximation used to model the expected future value of water Figure: Polyhedral approximation. Martin Biel (KTH) July 30, 2019 21/31

  49. Day-ahead problem - Model ✞ ☎ @stage 1 begin @parameters begin horizon = horizon indices = indices data = data end @unpack hours, plants, bids, blockbids, blocks = indices @unpack hydrodata, regulations = data # Variables # ======================================================== @variable(model, xt_i[t = hours] >= 0) @variable(model, xt_d[i = bids, t = hours] >= 0) @variable(model, xb[i = blockbids, b = blocks] >= 0) ... end ✝ ✆ Martin Biel (KTH) July 30, 2019 22/31

  50. Day-ahead problem - Model ✞ ☎ @stage 2 begin ... @uncertain ρ , V from ξ ::DayAheadScenario @decision xt_i xt_d xb # ------------------------------------------------------- @variable(model, yt[t = hours] >= 0) # Hourly dispatch @variable(model, yb[b = blocks] >= 0) # Block dispatch @variable(model, z_up[t = hours] >= 0) # Power bought from intraday @variable(model, z_do[t = hours] >= 0) # Power sold to intraday @variable(model, 0 <= Q[p = plants, t = hours] <= Q ) # Water discharge ¯ @variable(model, S[p = plants, t = hours] >= 0) # Spillage @variable(model, Qf[p = plants, t = hours] >= 0) # Incoming discharge @variable(model, Sf[p = plants, t = hours] >= 0) # Incoming spillage @variable(model, 0 <= M[p = plants, t = hours] <= M ¯ # Reservoir content @variable(model, H[t = hours] >= 0) # Power production ... @objective(model, Max, net_profit + value_of_stored_water) ... ✝ ✆ Martin Biel (KTH) July 30, 2019 22/31

  51. Day-ahead problem - Model ✞ ☎ ... # Bid-dispatch links @constraint(model, hourlybids[t = hours], yt[t] == interpolate( ρ [t], bidlevels, xt_d[t]) + xt_i[t] ) @constraint(model, bidblocks[b = blocks], yb[b] == sum(xb[j,b] for j = accepted_blocks(b)) ) # Hydrological balance @constraint(model, hydro_constraints[p = plants, t = hours], # Previous reservoir content M[p,t] == (t > 1 ? M[p,t-1] : M 0 [p]) # Inflow + sum(Qf[i,t]+Sf[i,t] for i = upstream_plants[p]) # Local inflow + V[p] # Outflow - (Q[p,t] + S[p,t]) ) ... ✝ ✆ Martin Biel (KTH) July 30, 2019 22/31

  52. Day-ahead problem - Model ✞ ☎ ... # Production @constraint(model, production[t = hours], H[t] == sum(hydrodata[p]. µ [s]*Q[p,s,t] for p = plants, s = segments) ) # Load balance @constraint(model, loadbalance[t = hours], yt[t] + sum(yb[b] for b = blocks[t]) - H[t] == z_up[t] - z_do[t] ) ... # Water travel time ... # Water value @constraint(model, water_value_approximation[c = 1:ncuts(water_value)], sum(water_value[c][p]*M[p,nhours(horizon)] for p in plants) + sum(W[i] for i in cut_indices(water_value[c])) >= cut_lb(water_value[c])) end ✝ ✆ Martin Biel (KTH) July 30, 2019 22/31

  53. Day-ahead problem - Algorithm • VSS typically low in day-ahead problems Martin Biel (KTH) July 30, 2019 23/31

  54. Day-ahead problem - Algorithm • VSS typically low in day-ahead problems • Generate tight confidence intervals trough sequential SAA algorithm Martin Biel (KTH) July 30, 2019 23/31

  55. Day-ahead problem - Algorithm • VSS typically low in day-ahead problems • Generate tight confidence intervals trough sequential SAA algorithm • Ensure statistically significant VSS Martin Biel (KTH) July 30, 2019 23/31

  56. Day-ahead problem - Algorithm • VSS typically low in day-ahead problems • Generate tight confidence intervals trough sequential SAA algorithm • Ensure statistically significant VSS • SAA instances of ~2000 scenarios required to reach this bound ◮ ~5 million variables ◮ ~3.3 million constraints Martin Biel (KTH) July 30, 2019 23/31

  57. Day-ahead problem - Algorithm Sequential SAA • Lower bound: solve M SAA models of size N • Upper bound: decision evaluation on T SAA models of size ˜ N > N • Increase N iteratively until confidence interval is tight enough Martin Biel (KTH) July 30, 2019 24/31

  58. Day-ahead problem - Algorithm Sequential SAA • Lower bound: solve M SAA models of size N • Upper bound: decision evaluation on T SAA models of size ˜ N > N • Increase N iteratively until confidence interval is tight enough Distributed L-shaped • Regularization ◮ Trust-regions ◮ Level-sets ◮ . . . • Aggregation ◮ Static ◮ Dynamic ◮ Clustering ◮ . . . Martin Biel (KTH) July 30, 2019 24/31

  59. Results - Benchmarks Distributed L-shaped with trust-region Distributed L-shaped 91.4 Computation Time T [s] 66.9 42.5 18.0 1 2 4 8 16 Number of Cores P Figure: Distributed L-shaped performance. Martin Biel (KTH) July 30, 2019 25/31

  60. Results - Benchmarks Distributed bundled L-shaped with trust-region 24.1 Computation Time T [s] 20.1 16.1 12.1 1 10 50 100 125 # Cuts in Bundle B Figure: Distributed L-shaped performance using aggregation. Martin Biel (KTH) July 30, 2019 25/31

  61. Results - Day-ahead Day-ahead Day-ahead VRP 5.7×10 Day-ahead EEV 5.6×10 5.5×10 Profit [Eur] 5.4×10 5.3×10 5.2×10 5.1×10 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Month Figure: Day-ahead profits. Martin Biel (KTH) July 30, 2019 26/31

  62. Results - Day-ahead Day-ahead Day-ahead VRP 5.2×10 Day-ahead EEV Profit [Eur] 5.1×10 Apr May Jun Jul Aug Month Figure: Day-ahead profits. Martin Biel (KTH) July 30, 2019 26/31

  63. Results - Day-ahead Day-ahead Day-ahead VSS 0.4 % Profit [% of VRP] 0.3 % 0.2 % 0.1 % Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Month Figure: Day-ahead value of stochastic solution. Martin Biel (KTH) July 30, 2019 27/31

  64. Results - Day-ahead Day-ahead 2.5×10 Day-ahead VSS 2.0×10 Profit [Eur] 1.5×10 1.0×10 5.0×10³ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Month Figure: Day-ahead value of stochastic solution. Martin Biel (KTH) July 30, 2019 27/31

  65. Results - Order strategies Single Orders Dependent Volumes [Mwh] 79.32 Price [EUR/MWh] 174.6 66.10 708.6 17.61 611.3 1.1e+03 52.88 175.4 611.3 1.1e+03 1.1e+03 39.66 1.1e+03 507.3 364.7 817.0 12.56 1.0e+03 Independent Volume [MWh] 58.80 891.3 1.0e+03 26.44 736.8 440.7 508.5 742.8 0.0 671.1 642.3 622.2 675.6 692.9 1.0e+03 1.0e+03 485.9 982.1 696.6 398.8 0.0 13.22 1.0e+03 721.3 797.8 0.0 0.0 0.00 401.1 520.5 867.8 865.6 45.14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Block Orders Price [EUR/MWh] Volume [MWh/h] 52.57 0.80 23.78 2.39 23.33 8.03 14.93 500.0 13.68 428.6 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Figure: Day-ahead order strategy. Martin Biel (KTH) July 30, 2019 28/31

  66. Results - Order strategies Single Orders Dependent Volumes [Mwh] 79.32 174.6 66.10 708.6 17.61 611.3 Price [EUR/MWh] 1.1e+03 175.4 52.88 611.3 1.1e+03 1.1e+03 364.7 12.56 39.66 507.3 817.0 1.0e+03 1.1e+03 58.80 891.3 1.0e+03 440.7 736.8 Independent Volume [MWh] 26.44 508.5 742.8 0.0 1.0e+03 1.0e+03 671.1 692.9 642.3 622.2 675.6 485.9 982.1 398.8 0.0 696.6 1.0e+03 13.22 721.3 797.8 0.0 0.0 0.00 401.1 520.5 867.8 865.6 45.14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Figure: Day-ahead single hourly order strategy. Martin Biel (KTH) July 30, 2019 28/31

  67. Results - Order strategies Single Orders Accepted Orders 74.27 Rejected Orders Market price Dependent Volumes [Mwh] 61.89 49.51 Price [EUR/MWh] 37.13 509.3 802.3 60.89 364.7 817.0 891.3 16.15 509.8 440.7 27.77 24.76 739.7 505.4 1.0e+03 1.0e+03 699.1 Independent Volume [MWh] 1.0e+03 1.0e+03 675.6 692.9 671.1 642.3 622.2 12.38 0.00 401.1 520.5 867.8 865.6 45.14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Figure: Result of single order strategy after realized market price. Martin Biel (KTH) July 30, 2019 29/31

  68. Results - Order strategies Single Orders 74.27 Dependent Volumes [Mwh] Accepted Orders 61.89 Rejected Orders Price [EUR/MWh] Market price 49.51 37.13 802.3 509.3 364.7 60.89 817.0 891.3 509.8 Independent Volume [MWh] 440.7 27.77 16.15 24.76 739.7 505.4 1.0e+03 699.1 1.0e+03 675.6 692.9 1.0e+03 1.0e+03 671.1 642.3 622.2 12.38 0.00 401.1 520.5 867.8 865.6 45.14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Block Orders Price [EUR/MWh] Volume [MWh/h] Accepted Orders 66.23 Market price Price [EUR/MWh] 62.59 2.39 58.08 8.03 56.92 428.6 55.33 54.97 54.93 500.0 0.80 44.43 33.53 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Figure: Result of complete order strategy after realized market price. Martin Biel (KTH) July 30, 2019 29/31

  69. Results - Order strategies Single Orders Dependent Volumes [Mwh] 79.32 Price [EUR/MWh] 66.10 52.88 118.6 180.1 1.1e+03 260.1 258.6 39.66 378.0 131.7 Independent Volume [MWh] 405.5 1.1e+03 101.1 437.9 1.1e+03 1.1e+03 1.1e+03 1.1e+03 1.1e+03 26.44 713.5 1.0e+03 663.0 649.8 664.2 698.0 1.0e+03 0.0 0.0 0.0 0.0 0.0 13.22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 674.2 706.6 734.1 926.0 887.5 803.5 932.0 852.0 853.5 862.6 85.37 88.17 1.0e+03 980.7 980.4 1.0e+03 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Block Orders Price [EUR/MWh] Volume [MWh/h] 23.33 500.0 12.18 408.2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Hour Figure: Deterministic order strategy. Martin Biel (KTH) July 30, 2019 29/31

  70. Final Remarks Discussion • VSS linked to imbalance penalties in the intraday market Martin Biel (KTH) July 30, 2019 30/31

  71. Final Remarks Discussion • VSS linked to imbalance penalties in the intraday market • Results are only as accurate/useful as the water valuation Martin Biel (KTH) July 30, 2019 30/31

  72. Final Remarks Discussion • VSS linked to imbalance penalties in the intraday market • Results are only as accurate/useful as the water valuation • Model improvements required. Martin Biel (KTH) July 30, 2019 30/31

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend