Example Case 3 - Year Planning

Andrew Rosemberg
15th Feb 2019

Introduction

This an example of the HydroPowerModels package for solving a simple stochastic case with the following specifications:

  • 3 Buses

  • 3 Lines

  • 2 Generators

  • 1 Reservoir and Hydrogenerator

  • 3 Scenarios

  • 12 Stages

Case

Importing package and solver

using Clp
using HydroPowerModels

Load Case Specifications

data = HydroPowerModels.parse_folder(joinpath(WEAVE_ARGS[:testcases_dir],"case3"))

params = set_param( stages = 12, 
                    model_constructor_grid  = DCPPowerModel,
                    post_method             = PowerModels.post_opf,
                    solver                  = ClpSolver())

Build Model

m = hydrothermaloperation(data, params);

Solve

status = solve(m, iteration_limit = 60);
---------------------------------------------------------------------------
----
                          SDDP.jl © Oscar Dowson, 2017-2018
---------------------------------------------------------------------------
----
    Solver:
        Serial solver
    Model:
        Stages:         12
        States:         1
        Subproblems:    12
        Value Function: Default
---------------------------------------------------------------------------
----
              Objective              |  Cut  Passes    Simulations   Total 
   
     Simulation       Bound   % Gap  |   #     Time     #    Time    Time  
   
---------------------------------------------------------------------------
----
       10.790K         6.759K        |     1    1.6      0    0.0    1.6 
       11.329K         9.418K        |     2    1.6      0    0.0    1.8 
       11.409K         9.999K        |     3    1.6      0    0.0    1.8 
       13.200K        11.263K        |     4    1.6      0    0.0    1.8 
       10.268K        11.271K        |     5    1.6      0    0.0    1.8 
       10.811K        11.274K        |     6    1.6      0    0.0    1.8 
       11.660K        11.276K        |     7    1.6      0    0.0    1.8 
       11.000K        11.279K        |     8    1.6      0    0.0    1.8 
        8.753K        11.279K        |     9    1.6      0    0.0    1.9 
        9.854K        11.285K        |    10    1.7      0    0.0    1.9 
       12.400K        11.290K        |    11    1.7      0    0.0    1.9 
        9.200K        11.293K        |    12    1.7      0    0.0    1.9 
       11.928K        11.293K        |    13    1.7      0    0.0    1.9 
       11.653K        11.294K        |    14    1.7      0    0.0    1.9 
       11.053K        11.294K        |    15    1.7      0    0.0    1.9 
       10.000K        11.294K        |    16    1.7      0    0.0    1.9 
       12.401K        11.295K        |    17    1.7      0    0.0    1.9 
       11.800K        11.298K        |    18    1.7      0    0.0    2.0 
        8.311K        11.298K        |    19    1.7      0    0.0    2.0 
       10.900K        11.299K        |    20    1.8      0    0.0    2.0 
       11.054K        11.299K        |    21    1.8      0    0.0    2.0 
        9.800K        11.299K        |    22    1.8      0    0.0    2.0 
        9.607K        11.299K        |    23    1.8      0    0.0    2.0 
       11.900K        11.301K        |    24    1.8      0    0.0    2.0 
       12.300K        11.301K        |    25    1.8      0    0.0    2.0 
       11.002K        11.301K        |    26    1.8      0    0.0    2.0 
       11.300K        11.301K        |    27    1.8      0    0.0    2.1 
       13.800K        11.301K        |    28    1.8      0    0.0    2.1 
       10.500K        11.301K        |    29    1.9      0    0.0    2.1 
       11.053K        11.301K        |    30    1.9      0    0.0    2.1 
       11.600K        11.301K        |    31    1.9      0    0.0    2.1 
       12.600K        11.301K        |    32    1.9      0    0.0    2.1 
       11.400K        11.301K        |    33    1.9      0    0.0    2.1 
       12.913K        11.301K        |    34    1.9      0    0.0    2.1 
       11.054K        11.301K        |    35    1.9      0    0.0    2.1 
       11.700K        11.301K        |    36    1.9      0    0.0    2.2 
       11.200K        11.301K        |    37    1.9      0    0.0    2.2 
       10.000K        11.301K        |    38    2.0      0    0.0    2.2 
       12.008K        11.301K        |    39    2.0      0    0.0    2.2 
       11.947K        11.301K        |    40    2.0      0    0.0    2.2 
       13.600K        11.301K        |    41    2.0      0    0.0    2.2 
       12.700K        11.301K        |    42    2.0      0    0.0    2.3 
        8.101K        11.301K        |    43    2.0      0    0.0    2.3 
        9.400K        11.301K        |    44    2.0      0    0.0    2.3 
       11.800K        11.301K        |    45    2.0      0    0.0    2.3 
       11.600K        11.301K        |    46    2.1      0    0.0    2.3 
       10.654K        11.301K        |    47    2.1      0    0.0    2.3 
       12.616K        11.301K        |    48    2.1      0    0.0    2.3 
       12.100K        11.301K        |    49    2.1      0    0.0    2.3 
       12.302K        11.301K        |    50    2.1      0    0.0    2.3 
       11.100K        11.301K        |    51    2.1      0    0.0    2.4 
       13.510K        11.301K        |    52    2.1      0    0.0    2.4 
       11.700K        11.301K        |    53    2.1      0    0.0    2.4 
        9.604K        11.301K        |    54    2.2      0    0.0    2.4 
       10.854K        11.301K        |    55    2.2      0    0.0    2.4 
       10.300K        11.301K        |    56    2.2      0    0.0    2.4 
        9.900K        11.301K        |    57    2.2      0    0.0    2.4 
       11.054K        11.301K        |    58    2.2      0    0.0    2.5 
       11.200K        11.301K        |    59    2.2      0    0.0    2.5 
       10.000K        11.301K        |    60    2.2      0    0.0    2.5 
---------------------------------------------------------------------------
----
    Other Statistics:
        Iterations:         60
        Termination Status: iteration_limit
===========================================================================
====

Simulation

srand(1111)
results = simulate_model(m, 100);
elapsed time: 3.84692969 seconds

Testing Results

Objective

using Base.Test
@test isapprox(results["simulations"][1]["objective"], 12400.00, atol=1e-2)
Test Passed

Solution

@test results["simulations"][1]["solution"][1]["gen"]["4"]["pg"] == 0
@test isapprox(results["simulations"][1]["solution"][1]["gen"]["2"]["pg"],0.0, atol=1e-2)
@test isapprox(results["simulations"][1]["solution"][1]["gen"]["3"]["pg"],0.65, atol=1e-2)
@test isapprox(results["simulations"][1]["solution"][1]["gen"]["1"]["pg"],0.34, atol=1e-2)
Test Passed

Plotting Results

if !isdefined(:plot_bool)
    plot_bool = true
end

if plot_bool == true
    plotresults(results)
end