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

Recommend


More recommend