{ "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": [ { "name": "stdout", "output_type": "stream", "text": [ "[ Info: Precompiling Ipopt [b6b21f68-93f8-5de0-b562-5493be1d77c9]\n" ] }, { "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/UaGGi/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/4kGrw/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/4kGrw/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/4kGrw/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/4kGrw/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/4kGrw/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/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch2\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch2\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "[ Info: Serialized time series data to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/UaGGi/data/serialized_system/ForecastOnly/5_bus_matpower_DA_time_series_storage.h5.\n", "[ Info: Serialized System to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/UaGGi/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/UaGGi/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/4kGrw/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/4kGrw/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/4kGrw/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/4kGrw/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/4kGrw/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/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch2\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch1\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "┌ Warning: no component category=Generator name=HydroDispatch3\n", "└ @ InfrastructureSystems ~/.julia/packages/InfrastructureSystems/v75Hd/src/system_data.jl:448\n", "[ Info: Serialized time series data to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/UaGGi/data/serialized_system/ForecastOnly/5_bus_matpower_RT_time_series_storage.h5.\n", "[ Info: Serialized System to /Users/cbarrows/.julia/packages/PowerSystemCaseBuilder/UaGGi/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\u001b[1m Count \u001b[0m\n\u001b[1m \u001b[0m│\u001b[90m String \u001b[0m\u001b[90m String \u001b[0m\u001b[90m Int64 \u001b[0m\n─────┼────────────────────────────────────────────────────────────────────\n 1 │ Arc Topology <: Component <: Infrast… 6\n 2 │ Area AggregationTopology <: Topology … 1\n 3 │ Bus Topology <: Component <: Infrast… 5\n 4 │ Line ACBranch <: Branch <: Device <: … 5\n 5 │ LoadZone AggregationTopology <: Topology … 1\n 6 │ PhaseShiftingTransformer ACBranch <: Branch <: Device <: … 2\n 7 │ PowerLoad StaticLoad <: ElectricLoad <: St… 3\n 8 │ RenewableDispatch RenewableGen <: Generator <: Sta… 2\n 9 │ ThermalStandard ThermalGen <: Generator <: Stati… 5\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", "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: 1.87s / 100% 254MiB / 100% \n", "│ \n", "│ Section ncalls time %tot avg alloc %tot avg\n", "│ ──────────────────────────────────────────────────────────────────────────────\n", "│ Build Simulation 1 1.87s 100% 1.87s 254MiB 100% 254MiB\n", "│ Build Problems 1 1.87s 100% 1.87s 254MiB 100% 254MiB\n", "│ Problem ED 1 1.01s 53.9% 1.01s 131MiB 51.5% 131MiB\n", "│ Build pre-step 1 805ms 43.1% 805ms 100MiB 39.3% 100MiB\n", "│ PowerLoad 1 4.22ms 0.23% 4.22ms 113KiB 0.04% 113KiB\n", "│ ThermalStandard 1 2.36ms 0.13% 2.36ms 1.22MiB 0.48% 1.22MiB\n", "│ RenewableDis... 1 2.36ms 0.13% 2.36ms 250KiB 0.10% 250KiB\n", "│ Objective 1 652μs 0.03% 652μs 175KiB 0.07% 175KiB\n", "│ CopperPlateP... 1 545μs 0.03% 545μs 222KiB 0.09% 222KiB\n", "│ Services 1 124μs 0.01% 124μs 10.4KiB 0.00% 10.4KiB\n", "│ HydroDispatch 1 73.6μs 0.00% 73.6μs 4.58KiB 0.00% 4.58KiB\n", "│ RenewableFix 1 39.2μs 0.00% 39.2μs 4.58KiB 0.00% 4.58KiB\n", "│ HydroEnergyR... 1 26.7μs 0.00% 26.7μs 4.70KiB 0.00% 4.70KiB\n", "│ Interruptibl... 1 15.8μs 0.00% 15.8μs 4.63KiB 0.00% 4.63KiB\n", "│ Line 1 1.89μs 0.00% 1.89μs 64.0B 0.00% 64.0B\n", "│ TapTransformer 1 1.05μs 0.00% 1.05μs 64.0B 0.00% 64.0B\n", "│ HVDCLine 1 710ns 0.00% 710ns 64.0B 0.00% 64.0B\n", "│ Transformer2W 1 573ns 0.00% 573ns 64.0B 0.00% 64.0B\n", "│ Problem UC 1 859ms 45.9% 859ms 123MiB 48.5% 123MiB\n", "│ ThermalStandard 1 493ms 26.4% 493ms 41.2MiB 16.2% 41.2MiB\n", "│ Services 1 140ms 7.51% 140ms 16.5MiB 6.49% 16.5MiB\n", "│ Build pre-step 1 38.4ms 2.05% 38.4ms 2.55MiB 1.00% 2.55MiB\n", "│ RenewableDis... 1 3.42ms 0.18% 3.42ms 962KiB 0.37% 962KiB\n", "│ PowerLoad 1 2.98ms 0.16% 2.98ms 321KiB 0.12% 321KiB\n", "│ CopperPlateP... 1 855μs 0.05% 855μs 454KiB 0.17% 454KiB\n", "│ Objective 1 72.8μs 0.00% 72.8μs 109KiB 0.04% 109KiB\n", "│ HydroDispatch 1 68.9μs 0.00% 68.9μs 4.58KiB 0.00% 4.58KiB\n", "│ RenewableFix 1 47.5μs 0.00% 47.5μs 4.58KiB 0.00% 4.58KiB\n", "│ HydroEnergyR... 1 43.0μs 0.00% 43.0μs 4.70KiB 0.00% 4.70KiB\n", "│ Interruptibl... 1 19.5μs 0.00% 19.5μs 4.63KiB 0.00% 4.63KiB\n", "│ Line 1 2.10μs 0.00% 2.10μs 64.0B 0.00% 64.0B\n", "│ HVDCLine 1 725ns 0.00% 725ns 64.0B 0.00% 64.0B\n", "│ TapTransformer 1 650ns 0.00% 650ns 64.0B 0.00% 64.0B\n", "│ Transformer2W 1 603ns 0.00% 603ns 64.0B 0.00% 64.0B\n", "│ Initialize Simul... 1 1.06ms 0.06% 1.06ms 19.7KiB 0.01% 19.7KiB\n", "│ Serializing Simu... 1 995μs 0.05% 995μs 16.0KiB 0.01% 16.0KiB\n", "│ Check Steps 1 33.7μs 0.00% 33.7μs 4.45KiB 0.00% 4.45KiB\n", "│ Assign FeedForward 1 29.9μs 0.00% 29.9μs 3.16KiB 0.00% 3.16KiB\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.5.2" }, "kernelspec": { "name": "julia-1.5", "display_name": "Julia 1.5.2", "language": "julia" } }, "nbformat": 4 }