Market Types
POMATWO supports different market types, defined as subtypes of the abstract type MarketType
. The market type specifies whether a zonal or nodal market design is used. Choosing the appropriate type is essential for model construction and simulation behavior.
POMATWO.MarketType
— TypeMarketType
Abstract supertype for market setup descriptors. Subtypes specify the market structure (zonal or nodal) and whether redispatch is considered.
Subtypes
ZonalMarket
: Zonal market with specified exchange formulation.NodalMarket
: Nodal market with specified load flow formulation.
These types are used to parameterize simulations or models, allowing code to dispatch on market design and redispatch handling.
Zonal Markets
Zonal markets are coarse representations of the power system, where nodes are aggregated into zones, and cross-border flows are modeled via exchange formulations.
POMATWO.ZonalMarket
— TypeZonalMarket{XF<:ExchangeFormulation} <: ZonalMarketType
Zonal market definition parameterized by an exchange formulation.
Fields
XF
: Type of the exchange formulation, e.g.,NTC
orFlowBased
.
Constructors
ZonalMarket()
: UsesNTC
as default.ZonalMarket(XF::Type{<:ExchangeFormulation})
: Specify exchange formulation type.
Nodal Markets
Nodal markets use detailed grid representations with nodal-level price formation and physical power flows.
POMATWO.NodalMarket
— TypeNodalMarket{LF<:LFFormulation} <: NodalMarketType
Nodal market definition parameterized by a load flow formulation.
Fields
LF
: Type of the load flow formulation, e.g.,PhaseAngle
orPTDF
.
Constructors
NodalMarket()
: UsesPhaseAngle
as default.NodalMarket(LF::Type{<:LFFormulation})
: Specify load flow formulation type.
Exchange Formulations
Exchange formulations define how power exchanges between zones are handled in zonal market settings.
POMATWO.NTC
— TypeNTC <: ExchangeFormulation
Net Transfer Capacity formulation. Represents fixed interzonal capacity limits.
Load Flow Formulations
Load flow formulations are used in nodal market and redispatch settings to model physical power flows under DC approximations.
POMATWO.PhaseAngle
— TypePhaseAngle <: DCLFFormulation
DC load flow formulation based on phase angle differences between nodes.
Redispatch Setup
POMATWO supports optional redispatch modeling. Redispatch is activated via types derived from RedispatchSetup
.
POMATWO.DCLF
— TypeDCLF{DCF<:DCLFFormulation} <: RedispatchType
Redispatch setup using a DC load flow formulation.
Fields
DCF
: DC load flow formulation type (e.g.,PhaseAngle
,PTDF
).
Constructors
DCLF()
: UsesPhaseAngle
as default.DCLF(DCF::Type{<:DCLFFormulation})
: User-defined formulation type.
POMATWO.NoRedispatch
— TypeNoRedispatch <: RedispatchSetup
Represents a setup without redispatch modeling.
Prosumer Setup
Due to the increasing penetration of decentralized generation, especially rooftop PV, POMATWO includes the ability to model prosumers—entities that both consume and produce electricity. Prosumers can be passive or actively optimize their market behavior depending on price signals and tariff schemes.
POMATWO.ProsumerSetup
— TypeProsumerSetup
Abstract supertype for prosumer market participation models. Subtypes specify whether and how prosumers are represented in the simulation.
Subtypes
NoProsumer
: No prosumers are modeled.ProsumerOptimization
: Prosumers are modeled with explicit optimization (variable sell/buy prices and retail tariff types).
POMATWO.NoProsumer
— TypeNoProsumer
Represents a market setup with no prosumer participation.
POMATWO.ProsumerOptimization
— TypeProsumerOptimization(; sell_price, buy_price=0, retail_type=:buy_price)
Represents a prosumer setup where prosumer actions are explicitly optimized with respect to market conditions.
Keyword Arguments
sell_price::Float64
: Price at which the prosumer can sell electricity to the market or grid.buy_price::Float64
: Price at which the prosumer buys electricity from the market/grid. Defaults to0
.retail_type::Symbol
: Retail tariff structure. Must be one of:buy_price
,:flat
, or:realtime
. Default is:buy_price
.
An error is thrown if retail_type
is not valid.
Example
ProsumerOptimization(sell_price=0.12, buy_price=0.22)