{ "cells": [ { "cell_type": "markdown", "source": [ "# 5-bus Market simulation with [PowerSimulations.jl](https://github.com/NREL-SIIP/PowerSimulations.jl)" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "**Originally Contributed by**: Clayton Barrows" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Introduction" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "PowerSimulations.jl supports simulations that consist of sequential optimization problems\n", "where results from previous problems inform subsequent problems in a variety of ways. This\n", "example demonstrates some of these capabilities to represent electricity market clearing." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Dependencies and Data\n", "First, let's create `System`s to represent the Day-Ahead and Real-Time market clearing\n", "process with hourly, and 5-minute time series data, respectively." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Modeling Packages" ], "metadata": {} }, { "outputs": [], "cell_type": "code", "source": [ "using PowerSystems\n", "using PowerSimulations\n", "using PowerSystemCaseBuilder" ], "metadata": {}, "execution_count": 1 }, { "cell_type": "markdown", "source": [ "### Data management packages" ], "metadata": {} }, { "outputs": [], "cell_type": "code", "source": [ "using Dates\n", "using DataFrames" ], "metadata": {}, "execution_count": 2 }, { "cell_type": "markdown", "source": [ "### Optimization packages" ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "MathOptInterface.OptimizerWithAttributes(Ipopt.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[MathOptInterface.RawParameter(\"print_level\") => 0])" }, "metadata": {}, "execution_count": 3 } ], "cell_type": "code", "source": [ "using Cbc # mip solver\n", "solver = optimizer_with_attributes(Cbc.Optimizer, \"logLevel\" => 1, \"ratioGap\" => 0.5)\n", "using Ipopt # solver that supports duals\n", "ipopt_solver = optimizer_with_attributes(Ipopt.Optimizer, \"print_level\" => 0)" ], "metadata": {}, "execution_count": 3 }, { "cell_type": "markdown", "source": [ "### 5-bus Data\n", "The five bus system data here includes hourly day-ahead data, 5-minute real-time market\n", "data, and 6-second actual data. We'll only use the hourly and 5-minute data for the\n", "example simulations below, but the 6-second data is included for future development." ], "metadata": {} }, { "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "┌ Info: Building new system 5_bus_matpower_DA from raw data\n", "└ sys_descriptor.raw_data = \"/Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/4FIfo/data/matpower/case5_re_uc.m\"\n", "[ Info: extending matpower format with data: areas 1x3\n", "[ Info: extending matpower format with data: gen_name 7x4\n", "[ Info: extending matpower format by appending matrix \"gen_name\" in to \"gen\"\n", "[ Info: reversing the orientation of branch 6 (4, 3) to be consistent with other parallel branches\n", "[ Info: the voltage setpoint on generator 4 does not match the value at bus 4\n", "[ Info: the voltage setpoint on generator 1 does not match the value at bus 1\n", "[ Info: the voltage setpoint on generator 5 does not match the value at bus 10\n", "[ Info: the voltage setpoint on generator 2 does not match the value at bus 1\n", "[ Info: the voltage setpoint on generator 3 does not match the value at bus 3\n", "[ Info: removing 1 cost terms from generator 4: [4000.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 1: [1400.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 5: [1000.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 2: [1500.0, 0.0]\n", "[ Info: removing 3 cost terms from generator 6: Float64[]\n", "[ Info: removing 3 cost terms from generator 7: Float64[]\n", "[ Info: removing 1 cost terms from generator 3: [3000.0, 0.0]\n", "┌ Info: Constructing System from Power Models\n", "│ data[\"name\"] = \"nesta_case5_pjm\"\n", "└ data[\"source_type\"] = \"matpower\"\n", "[ Info: Reading bus data\n", "[ Info: Reading generator data\n", "[ Info: Reading branch data\n", "┌ Warning: Rate 1200.0 MW for bus2-bus3-i_4 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 200.0 MW for bus1-bus2-i_1 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 200.0 MW for bus1-bus4-i_2 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 200.0 MW for bus4-bus5-i_7 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 1000.0 MW for bus1-bus5-i_3 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "[ Info: Reading branch data\n", "[ Info: Reading DC Line data\n", "[ Info: Reading storage data\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch2\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch2\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "[ Info: Serialized time series data to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/4FIfo/data/serialized_system/ForecastOnly/5_bus_matpower_DA_time_series_storage.h5.\n", "[ Info: Serialized System to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/4FIfo/data/serialized_system/ForecastOnly/5_bus_matpower_DA.json\n", "┌ Info: Building new system 5_bus_matpower_RT from raw data\n", "└ sys_descriptor.raw_data = \"/Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/4FIfo/data/matpower/case5_re_uc.m\"\n", "[ Info: extending matpower format with data: areas 1x3\n", "[ Info: extending matpower format with data: gen_name 7x4\n", "[ Info: extending matpower format by appending matrix \"gen_name\" in to \"gen\"\n", "[ Info: reversing the orientation of branch 6 (4, 3) to be consistent with other parallel branches\n", "[ Info: the voltage setpoint on generator 4 does not match the value at bus 4\n", "[ Info: the voltage setpoint on generator 1 does not match the value at bus 1\n", "[ Info: the voltage setpoint on generator 5 does not match the value at bus 10\n", "[ Info: the voltage setpoint on generator 2 does not match the value at bus 1\n", "[ Info: the voltage setpoint on generator 3 does not match the value at bus 3\n", "[ Info: removing 1 cost terms from generator 4: [4000.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 1: [1400.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 5: [1000.0, 0.0]\n", "[ Info: removing 1 cost terms from generator 2: [1500.0, 0.0]\n", "[ Info: removing 3 cost terms from generator 6: Float64[]\n", "[ Info: removing 3 cost terms from generator 7: Float64[]\n", "[ Info: removing 1 cost terms from generator 3: [3000.0, 0.0]\n", "┌ Info: Constructing System from Power Models\n", "│ data[\"name\"] = \"nesta_case5_pjm\"\n", "└ data[\"source_type\"] = \"matpower\"\n", "[ Info: Reading bus data\n", "[ Info: Reading generator data\n", "[ Info: Reading branch data\n", "┌ Warning: Rate 1200.0 MW for bus2-bus3-i_4 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 200.0 MW for bus1-bus2-i_1 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 200.0 MW for bus1-bus4-i_2 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 200.0 MW for bus4-bus5-i_7 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "┌ Warning: Rate 1000.0 MW for bus1-bus5-i_3 is larger than the max expected in the range of (min = 134.0, max = 145.0).\n", "└ @ PowerSystems ~/.julia/packages/PowerSystems/61h6O/src/utils/IO/branchdata_checks.jl:148\n", "[ Info: Reading branch data\n", "[ Info: Reading DC Line data\n", "[ Info: Reading storage data\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch2\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/3LlGM/src/system_data.jl:478\n", "[ Info: Serialized time series data to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/4FIfo/data/serialized_system/ForecastOnly/5_bus_matpower_RT_time_series_storage.h5.\n", "[ Info: Serialized System to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/4FIfo/data/serialized_system/ForecastOnly/5_bus_matpower_RT.json\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "System\n======\nSystem Units Base: SYSTEM_BASE\nBase Power: 100.0\nBase Frequency: 60.0\n\nComponents\n==========\nNum components: 30\n\n\u001b[1m9×3 DataFrame\u001b[0m\n\u001b[1m Row \u001b[0m│\u001b[1m ConcreteType \u001b[0m\u001b[1m SuperTypes \u001b[0m\n\u001b[1m \u001b[0m│\u001b[90m String \u001b[0m\u001b[90m String \u001b[0m\n─────┼────────────────────────────────────────────────────────────────\n 1 │ Arc Topology <: Component <: Infrast…\n 2 │ Area AggregationTopology <: Topology …\n 3 │ Bus Topology <: Component <: Infrast…\n 4 │ Line ACBranch <: Branch <: Device <: …\n 5 │ LoadZone AggregationTopology <: Topology …\n 6 │ PhaseShiftingTransformer ACBranch <: Branch <: Device <: …\n 7 │ PowerLoad StaticLoad <: ElectricLoad <: St…\n 8 │ RenewableDispatch RenewableGen <: Generator <: Sta…\n 9 │ ThermalStandard ThermalGen <: Generator <: Stati…\n\u001b[36m 1 column omitted\u001b[0m\n\nTimeSeriesContainer\n===================\nComponents with time series data: 5\nTotal StaticTimeSeries: 5\nTotal Forecasts: 5\nResolution: 60 minutes\nFirst initial time: 2020-01-01T00:00:00\nLast initial time: 2020-03-24T12:00:00\nHorizon: 12\nInterval: 60 minutes\nForecast window count: 2005\n", "text/html": [ "
Base Power: 100.0
\n", "Num components: 30
\n", "9 rows × 3 columns
ConcreteType | SuperTypes | Count | |
---|---|---|---|
String | String | Int64 | |
1 | Arc | Topology <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 6 |
2 | Area | AggregationTopology <: Topology <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 1 |
3 | Bus | Topology <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 5 |
4 | Line | ACBranch <: Branch <: Device <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 5 |
5 | LoadZone | AggregationTopology <: Topology <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 1 |
6 | PhaseShiftingTransformer | ACBranch <: Branch <: Device <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 2 |
7 | PowerLoad | StaticLoad <: ElectricLoad <: StaticInjection <: Device <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 3 |
8 | RenewableDispatch | RenewableGen <: Generator <: StaticInjection <: Device <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 2 |
9 | ThermalStandard | ThermalGen <: Generator <: StaticInjection <: Device <: Component <: InfrastructureSystemsComponent <: InfrastructureSystemsType <: Any | 5 |
Components with time series data: 5
\n", "Total StaticTimeSeries: 5
\n", "Total Forecasts: 5
\n", "Resolution: 60 minutes
\n", "First initial time: 2020-01-01T00:00:00
\n", "Last initial time: 2020-03-24T12:00:00
\n", "Horizon: 12
\n", "Interval: 60 minutes
\n", "Forecast window count: 2005
\n" ] }, "metadata": {}, "execution_count": 4 } ], "cell_type": "code", "source": [ "sys_DA = build_system(SIIPExampleSystems, \"5_bus_matpower_DA\")\n", "sys_RT = build_system(SIIPExampleSystems, \"5_bus_matpower_RT\")" ], "metadata": {}, "execution_count": 4 }, { "cell_type": "markdown", "source": [ "## `OperationsProblemTemplate`s" ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "\nOperations Problem Specification\n============================================\nTransmission: CopperPlatePowerModel\n============================================\nDevices Models: \n\n\tType: ThermalStandard\n \tFormulation: ThermalDispatch\n\n\tType: HydroDispatch\n \tFormulation: HydroDispatchRunOfRiver\n\n\tType: PowerLoad\n \tFormulation: StaticPowerLoad\n\n\tType: RenewableFix\n \tFormulation: FixedOutput\n\n\tType: RenewableDispatch\n \tFormulation: RenewableFullDispatch\n\n\tType: HydroEnergyReservoir\n \tFormulation: HydroDispatchRunOfRiver\n\n\tType: InterruptibleLoad\n \tFormulation: InterruptiblePowerLoad\n\n============================================\nBranches Models: \n\n\tType: Line\n \tFormulation: StaticBranch\n\n\tType: TapTransformer\n \tFormulation: StaticBranch\n\n\tType: Transformer2W\n \tFormulation: StaticBranch\n\n\tType: HVDCLine\n \tFormulation: HVDCDispatch\n\n============================================\nServices Models:\n\n\tType: VariableReserve{ReserveDown}\n \tFormulation: RangeReserve\n\n\tType: VariableReserve{ReserveUp}\n \tFormulation: RangeReserve\n\n============================================\n" }, "metadata": {}, "execution_count": 5 } ], "cell_type": "code", "source": [ "template_uc = template_unit_commitment()\n", "template_ed = template_economic_dispatch()" ], "metadata": {}, "execution_count": 5 }, { "cell_type": "markdown", "source": [ "### Define the Simulation Sequence" ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Feed Forward Chronology\n-----------------------\n\nED: SemiContinuousFF -> ThermalStandard\n\n UC--┐ from : On\n |\n┌----┬----┬----┬----┬----┼----┬----┬----┬----┬----┬----┐\n| | | | | | | | | | | |\n| | | | | | | | | | | |\n└─ED └─ED └─ED └─ED └─ED └─ED └─ED └─ED └─ED └─ED └─ED └─ED ... (x24) to : [\"P\"]\n\nInitial Condition Chronology\n----------------------------\n\n1\n|\n|\n2 --> 2 ... (x24) \n" }, "metadata": {}, "execution_count": 6 } ], "cell_type": "code", "source": [ "problems = SimulationProblems(\n", " UC = OperationsProblem(\n", " template_uc,\n", " sys_DA,\n", " optimizer = solver,\n", " balance_slack_variables = true,\n", " ),\n", " ED = OperationsProblem(\n", " template_ed,\n", " sys_RT,\n", " optimizer = ipopt_solver,\n", " constraint_duals = [:CopperPlateBalance],\n", " ),\n", ")\n", "\n", "feedforward_chronologies = Dict((\"UC\" => \"ED\") => Synchronize(periods = 24))\n", "\n", "feedforward = Dict(\n", " (\"ED\", :devices, :ThermalStandard) => SemiContinuousFF(\n", " binary_source_problem = ON,\n", " affected_variables = [ACTIVE_POWER],\n", " ),\n", ")\n", "\n", "#cache = Dict(\"UC\" => [TimeStatusChange(ThermalStandard, PSI.ON)])\n", "intervals = Dict(\"UC\" => (Hour(24), Consecutive()), \"ED\" => (Hour(1), Consecutive()))\n", "\n", "DA_RT_sequence = SimulationSequence(\n", " problems = problems,\n", " intervals = intervals,\n", " ini_cond_chronology = InterProblemChronology(),\n", " feedforward_chronologies = feedforward_chronologies,\n", " feedforward = feedforward,\n", ")" ], "metadata": {}, "execution_count": 6 }, { "cell_type": "markdown", "source": [ "## `Simulation`" ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Simulation()\n" }, "metadata": {}, "execution_count": 7 } ], "cell_type": "code", "source": [ "file_path = mkpath(joinpath(\".\", \"5-bus-simulation\"))\n", "sim = Simulation(\n", " name = \"5bus-test\",\n", " steps = 1,\n", " problems = problems,\n", " sequence = DA_RT_sequence,\n", " simulation_folder = file_path,\n", ")" ], "metadata": {}, "execution_count": 7 }, { "cell_type": "markdown", "source": [ "### Build simulation" ], "metadata": {} }, { "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "┌ Info: \n", "│ ──────────────────────────────────────────────────────────────────────────────\n", "│ Time Allocations \n", "│ ────────────────────── ───────────────────────\n", "│ Tot / % measured: 7.83s / 100% 874MiB / 100% \n", "│ \n", "│ Section ncalls time %tot avg alloc %tot avg\n", "│ ──────────────────────────────────────────────────────────────────────────────\n", "│ Build Simulation 1 7.83s 100% 7.83s 874MiB 100% 874MiB\n", "│ Build Problems 1 7.77s 99.3% 7.77s 863MiB 98.6% 863MiB\n", "│ Problem UC 1 7.09s 90.6% 7.09s 808MiB 92.4% 808MiB\n", "│ Services 1 3.04s 38.9% 3.04s 364MiB 41.6% 364MiB\n", "│ ThermalStandard 1 947ms 12.1% 947ms 98.2MiB 11.2% 98.2MiB\n", "│ RenewableDis... 1 739ms 9.45% 739ms 87.5MiB 10.0% 87.5MiB\n", "│ Interruptibl... 1 420ms 5.36% 420ms 47.3MiB 5.41% 47.3MiB\n", "│ HydroDispatch 1 301ms 3.85% 301ms 31.0MiB 3.54% 31.0MiB\n", "│ Build pre-step 1 189ms 2.41% 189ms 5.34MiB 0.61% 5.34MiB\n", "│ RenewableFix 1 123ms 1.58% 123ms 16.3MiB 1.87% 16.3MiB\n", "│ CopperPlateP... 1 109ms 1.39% 109ms 11.7MiB 1.34% 11.7MiB\n", "│ PowerLoad 1 4.06ms 0.05% 4.06ms 323KiB 0.04% 323KiB\n", "│ Line 1 236μs 0.00% 236μs 47.4KiB 0.01% 47.4KiB\n", "│ TapTransformer 1 141μs 0.00% 141μs 47.1KiB 0.01% 47.1KiB\n", "│ HydroEnergyR... 1 135μs 0.00% 135μs 4.92KiB 0.00% 4.92KiB\n", "│ Transformer2W 1 120μs 0.00% 120μs 47.1KiB 0.01% 47.1KiB\n", "│ HVDCLine 1 120μs 0.00% 120μs 48.1KiB 0.01% 48.1KiB\n", "│ Objective 1 75.0μs 0.00% 75.0μs 109KiB 0.01% 109KiB\n", "│ Problem ED 1 681ms 8.70% 681ms 54.5MiB 6.23% 54.5MiB\n", "│ ThermalStandard 1 67.4ms 0.86% 67.4ms 8.03MiB 0.92% 8.03MiB\n", "│ PowerLoad 1 3.24ms 0.04% 3.24ms 113KiB 0.01% 113KiB\n", "│ RenewableDis... 1 1.84ms 0.02% 1.84ms 229KiB 0.03% 229KiB\n", "│ Services 1 1.22ms 0.02% 1.22ms 53.0KiB 0.01% 53.0KiB\n", "│ CopperPlateP... 1 586μs 0.01% 586μs 288KiB 0.03% 288KiB\n", "│ Objective 1 398μs 0.01% 398μs 245KiB 0.03% 245KiB\n", "│ Build pre-step 1 128μs 0.00% 128μs 15.7KiB 0.00% 15.7KiB\n", "│ HydroDispatch 1 71.4μs 0.00% 71.4μs 4.72KiB 0.00% 4.72KiB\n", "│ RenewableFix 1 61.2μs 0.00% 61.2μs 4.72KiB 0.00% 4.72KiB\n", "│ HydroEnergyR... 1 45.6μs 0.00% 45.6μs 4.86KiB 0.00% 4.86KiB\n", "│ Interruptibl... 1 26.6μs 0.00% 26.6μs 4.78KiB 0.00% 4.78KiB\n", "│ Line 1 2.80μs 0.00% 2.80μs 64.0B 0.00% 64.0B\n", "│ TapTransformer 1 2.45μs 0.00% 2.45μs 64.0B 0.00% 64.0B\n", "│ HVDCLine 1 2.26μs 0.00% 2.26μs 64.0B 0.00% 64.0B\n", "│ Transformer2W 1 907ns 0.00% 907ns 64.0B 0.00% 64.0B\n", "│ Serializing Simu... 1 47.5ms 0.61% 47.5ms 11.3MiB 1.29% 11.3MiB\n", "│ Assign FeedForward 1 6.36ms 0.08% 6.36ms 404KiB 0.05% 404KiB\n", "│ Initialize Simul... 1 2.03ms 0.03% 2.03ms 20.7KiB 0.00% 20.7KiB\n", "│ Check Steps 1 11.0μs 0.00% 11.0μs 1.30KiB 0.00% 1.30KiB\n", "└ ──────────────────────────────────────────────────────────────────────────────\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "BuildStatus.BUILT = 0" }, "metadata": {}, "execution_count": 8 } ], "cell_type": "code", "source": [ "build!(sim)" ], "metadata": {}, "execution_count": 8 }, { "cell_type": "markdown", "source": [ "### Execute simulation\n", "```julia" ], "metadata": {} }, { "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "******************************************************************************\n", "This program contains Ipopt, a library for large-scale nonlinear optimization.\n", " Ipopt is released as open source code under the Eclipse Public License (EPL).\n", " For more information visit https://github.com/coin-or/Ipopt\n", "******************************************************************************\n", "\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "RunStatus.SUCCESSFUL = 0" }, "metadata": {}, "execution_count": 9 } ], "cell_type": "code", "source": [ "execute!(sim, enable_progress_bar = false)" ], "metadata": {}, "execution_count": 9 }, { "cell_type": "markdown", "source": [ "```" ], "metadata": {} }, { "outputs": [], "cell_type": "code", "source": [ "# Results" ], "metadata": {}, "execution_count": 10 }, { "cell_type": "markdown", "source": [ "First we can load the result metadata\n", "```julia\n", "results = SimulationResults(sim);\n", "uc_results = get_problem_results(results, \"UC\")\n", "ed_results = get_problem_results(results, \"ED\");\n", "```" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Then we can read and examine the results of interest\n", "```julia\n", "prices = read_dual(ed_results, :CopperPlateBalance)\n", "```" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "or if we want to look at the realized values\n", "```julia\n", "read_realized_duals(ed_results)[:CopperPlateBalance]\n", "```" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "*note that in this simulation the prices are all equal to the balance slack\n", "penalty value of $100000/MWh because there is unserved energy in the result*" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "---\n", "\n", "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" ], "metadata": {} } ], "nbformat_minor": 3, "metadata": { "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.6.0" }, "kernelspec": { "name": "julia-1.6", "display_name": "Julia 1.6.0", "language": "julia" } }, "nbformat": 4 }