Procedure
Maon simulates electricity wholesale markets by deriving the following three key outputs.
- Short-term equilibrium: Determining dispatch schedules and wholesale prices using generation, grid, and consumption capacities as inputs through single and serial runs.
- Uncertainty distribution: Calculating uncertainties in short-term equilibria, along with associated outcomes like facility-specific costs and revenues with the help of Monte Carlo simulations.
- Long-term equilibrium: Deriving investment decisions in generation, grid, and consumption facilities based on anticipated prices, volumes, and emerging technologies via investment simulations.
All derivations rely on the same market simulation procedure. Single runs execute it once. Serial runs apply it to a sequence of years. Monte Carlo runs repeat it with varying inputs to generate output distributions. Investment runs use it iteratively to derive economically viable investment decisions.
Single
The procedure for single runs is applied at the single dispatch page by clicking on Run simulation.
Overview
Upfront input data is processed (see preprocessing).
The three-stage optimization procedure is illustrated in the following figure. First, on-off dispatch decisions are neglected, and nonlinear equations are linearized to solve the overall linear optimization problem. Second, unit states are fixed at the start and end of sub-time ranges (e.g., daily), and these subproblems are solved successively. Third, on-off dispatch decisions are fixed, and the overall optimization problem is linearized and optimized. Numerical issues are handled internally through automatic optimization solver restarts and recalibrations.
After the simulation procedure, the raw results like unit commitments and price estimates are processed for further usage (see postprocessing).

Procedure steps
The overall mixed-integer linear problem is solved through three successive procedure steps, each building on the previous one.
Linear optimization
In the first procedure step, on-off dispatch decisions are neglected and nonlinear equations are linearized. The resulting total linear optimization problem is solved. The barrier method is used by default for solving. The optimization solving method can be set for linear problems in the project configuration with the parameter solver_optimizer_linear_problem
.
Mixed-integer optimization
After the total linear optimization problem is solved in the first step, determined unit states are fixed each simulation sub time range begin and end. The subproblems (e.g., daily) are solved successively via a branch-and-cut method by default.
The following image depicts the mixed-integer approach and its hand-overs used as presets in the subsequent simulations.

The total time horizon is set in the scenario settings (default is 8760 hours). The sub time range is configurable in the project settings (default is 24 hours). Longer sub-time ranges require more processing time, and the increase in time is disproportionate due to the combinatorial complexity of the mixed-integer optimization problem.
The mixed-integer problem solving algorithm can be set in the project configuration with the parameter solver_optimizer_mixed_integer_problem
.
For large exchange combinations, such as those involving numerous bidding zones or nodal pricing, system decomposition can be applied in addition to time decomposition in 90_grid_bidding_zones.csv
. This approach fixes groups of bidding zones or nodes with their net balances (exchange sums), effectively reducing the mixed-integer problem complexity to practical levels.
Reoptimization
After the mixed-integer optimization procedure step, derived on-off dispatch decisions are fixed. Lastly, based on the derived operation points, the global optimization problem is linearized and solved. The solving algorithm equals the linear solving method (see linear optimization).
Submodels
The submodels considered vary depending on the selected steps in the simulation procedure. Each subsequent step includes the features of the previous step. Detailed information about submodels can be found in the input data definition.
Inflexible demand
Submodel | Linear | Mixed-integer | Reoptimization |
---|---|---|---|
Spot | |||
FCR | |||
aFRR positive | |||
aFRR negative | |||
mFRR positive | |||
mFRR negative |
Inflexible supply
Submodel | Linear | Mixed-integer | Reoptimization |
---|---|---|---|
Bioenergy power plants | |||
Solar power plants | |||
Wind onshore power plants | |||
Wind offshore plants | |||
Hydro run of river power plants | |||
Thermal cogeneration plants | |||
Grid external export | |||
Grid external import |
Flexible demand-side response
Submodel | Linear | Mixed-integer | Reoptimization |
---|---|---|---|
Consumer maximum load-increase | |||
Consumer maximum load-decrease | |||
Consumer maximum shift | |||
Consumer maximum FCR power | |||
Consumer maximum aFRR positive power | |||
Consumer maximum aFRR negative power | |||
Consumer maximum mFRR positive power | |||
Consumer maximum mFRR negative power | |||
Consumer load-shift efficiency | |||
Consumer cost | |||
Potential maximum load-increase | |||
Potential maximum load-decrease | |||
Potential maximum shift | |||
Potential maximum FCR power | |||
Potential maximum aFRR positive power | |||
Potential maximum aFRR negative power | |||
Potential maximum mFRR positive power | |||
Potential maximum mFRR negative power | |||
Potential load-shift efficiency | |||
Potential cost | |||
Mustrun, outage, revision maximum load-increase | |||
Mustrun, outage, revision minimum load-increase | |||
Mustrun, outage, revision maximum load-decrease | |||
Mustrun, outage, revision minimum load-decrease | |||
Work restriction maximum load-increase | |||
Work restriction minimum load-increase | |||
Availability | |||
Availability event duration expectation | |||
Availability event duration deviation |
Flexible battery
Submodel | Linear | Mixed-integer | Reoptimization |
---|---|---|---|
Storage capacity | |||
Storage maximum charge power | |||
Storage maximum discharge power | |||
Storage maximum FCR power | |||
Storage maximum aFRR positive power | |||
Storage maximum aFRR negative power | |||
Storage maximum mFRR positive power | |||
Storage maximum mFRR negative power | |||
Storage efficiency charge | |||
Storage efficiency discharge | |||
Storage self-discharge | |||
Storage state of charge start | |||
Storage state of charge end | |||
Storage cost | |||
Mustrun, outage, revision maximum charge | |||
Mustrun, outage, revision minimum charge | |||
Mustrun, outage, revision maximum discharge | |||
Mustrun, outage, revision minimum discharge | |||
States of charge maximum | |||
States of charge minimum | |||
Availability | |||
Availability event duration expectation | |||
Availability event duration deviation |
Flexible hydro
Submodel | Linear | Mixed-integer | Reoptimization |
---|---|---|---|
Power plant maximum power | |||
Power plant height of fall | |||
Power plant minimum power | |||
Power plant maximum FCR power | |||
Power plant maximum aFRR positive power | |||
Power plant maximum aFRR negative power | |||
Power plant maximum mFRR positive power | |||
Power plant maximum mFRR negative power | |||
Power plant efficiency | |||
Power plant cost | |||
Mustrun, outage, revision maximum charge | |||
Mustrun, outage, revision minimum charge | |||
Mustrun, outage, revision maximum discharge | |||
Mustrun, outage, revision minimum discharge | |||
Reservoir capacity | |||
Reservoir leakage | |||
Reservoir filling level start | |||
Reservoir filling level end | |||
Reservoir inflow | |||
Reservoir filling level maximum | |||
Reservoir filling level minimum | |||
Availability | |||
Availability event duration expectation | |||
Availability event duration deviation |
Flexible thermal
Submodel | Linear | Mixed-integer | Reoptimization |
---|---|---|---|
Power plant maximum power | |||
Power plant maximum power efficiency | |||
Power plant minimum power | |||
Power plant minimum power efficiency | |||
Power plant cost work | |||
Power plant cost time | |||
Power plant cost start | |||
Power plant cost fuel cold start | |||
Power plant cooling time constant | |||
Power plant minimum time on | |||
Power plant minimum time off | |||
Power plant maximum FCR power | |||
Power plant maximum aFRR positive power | |||
Power plant maximum aFRR negative power | |||
Power plant maximum mFRR positive power | |||
Power plant maximum mFRR negative power | |||
Power plant maximum mFRR positive power off-mode | |||
Power plant state before type | |||
Power plant state before time | |||
Power plant state after type | |||
Power plant state after time | |||
Power plant unit upstream | |||
Fuel price | |||
Fuel emission intensity | |||
Fuel price transport | |||
Emission price | |||
Mustrun, outage, revision maximum power | |||
Mustrun, outage, revision minimum power | |||
Fuel restriction maximum | |||
Fuel restriction minimum | |||
Emission restriction maximum | |||
Emission restriction minimum | |||
Availability | |||
Availability event duration expectation | |||
Availability event duration deviation |
Flexible grid
Submodel | Linear | Mixed-integer | Reoptimization |
---|---|---|---|
Bidding zone spot | |||
Bidding zone FCR | |||
Bidding zone aFRR positive | |||
Bidding zone aFRR negative | |||
Bidding zone mFRR positive | |||
Bidding zone mFRR negative | |||
Bidding zone DSR | |||
Bidding zone battery | |||
Bidding zone thermal | |||
Bidding zone hydro | |||
Bidding zone onshore | |||
Bidding zone offshore | |||
Bidding zone solar | |||
Bidding zone run of river | |||
Bidding zone bioenergy | |||
Bidding zone cogeneration | |||
Bidding zone spot import extern | |||
Bidding zone spot export extern | |||
Bidding zone group | |||
Bidding zone aggregation battery | |||
Bidding zone aggregation hydro | |||
Bidding zone aggregation thermal | |||
Bidding zone aggregation DSR | |||
NTC capacity | |||
NTC cost | |||
NTC bidding zone from | |||
NTC bidding zone to | |||
CNTC capacity | |||
CNTC bidding zone from | |||
CNTC bidding zone to | |||
FBMC CNEC RAM | |||
FBMC CNEC PTDF | |||
FBMC AHC bidding zone from | |||
FBMC AHC bidding zone to | |||
FBMC AHC PTDF | |||
FBMC AHC evolved | |||
Reserve exchange capacity | |||
Reserve exchange bidding zone from | |||
Reserve exchange bidding zone to | |||
Reserve exchange cost | |||
Reserve exchange NTC competition | |||
Mustrun, outage, revision maximum power | |||
Mustrun, outage, revision minimum power | |||
Availability | |||
Availability event duration expectation | |||
Availability event duration deviation |
Fast mode
The total runtime for the three-step procedure is approximately 12 hours (for ENTSO-E region, 8760 hours, and 50000 components). Maon offers a fast mode that significantly reduces this time while still respecting all market equilibrium constraints, achieved by aggregating components. When battery, DSR, thermal, hydro, and grid components are aggregated to the maximum levels in all bidding zones, the procedure time drops to under five minutes. The higher the aggregation level, the faster the simulation. Intermediate aggregation levels allow choosing a specific trade-off between accuracy and speed.
Original and aggregated model data can be combined, if needed. For example, the aggregation method can be applied to all bidding zones except those in the focus region of the analysis. The aggregation level can be set in 90_grid_bidding_zones.csv
. To further reduce simulation runtime, certain restrictions and functionalities (e.g., minimum down times, operation times, ramping constraints, or frequency reserve provision) can be disabled in the project configuration.
Serial
The procedure for serial runs is applied at the serial dispatch page by click on Run simulation.
Parametrizing multiple years can be done through annual scenarios and single runs (see single run). However, gapless simulations over longer periods (e.g., 2020 to 2040) require considerable effort, especially for many years (e.g., 21 years). To minimize this effort, serial runs can be applied. This approach utilizes the inheritance.
Serial runs require one initial scenario (e.g., 2020) and a derived scenario for a later year (e.g., 2040). The procedure automatically generates annual scenarios for each year in between (e.g., from 2021 to 2039), significantly reducing parametrization efforts. The following figure illustrates how the intermediate scenarios are created.

The serial run procedure is available in derived scenarios, where users can select the years in between and manage the runs. By default, the procedure starts with all years between the base and derived scenario.
Monte Carlo
The procedure for Monte Carlo runs is applied at the Monte Carlo simulation page by click on Run simulation. The procedure is available in base scenarios, where users can select the availability and climate years as well as manage the runs.
Parametrization
Parametrizing Monte Carlo runs can be done with the same data-sets as for single runs. However, the creation of single combinations of, for example, climate and outage years can require considerable effort, especially for many combinations (e.g., 1000 samples). To minimize this effort, Monte Carlo runs can be applied. This approach utilizes the inheritance.
Sampling
Monte Carlo runs require one base scenario (e.g., 2050) and at least one therefrom derived scenario for a climate year (e.g., 2012). The procedure automatically creates availability scenarios in the preprocessing as in single runs. Further, it combines climate and availability scenarios for all selected years, significantly reducing parametrization efforts.
Sampling is performed by creating and merging availability and climate scenarios. Availability scenarios are created with the availability preprocessing module in the base scenario. Climate scenarios represent other impact factors, such as climate impacts, found in the derived scenarios.
The components and their availabilities are sourced from the base scenario. All other data, including climate dependent impact factors, are loaded from the derived scenario, as illustrated in the table below.
File | Base scenario | Derived scenario |
---|---|---|
10_demands_spot.csv | ||
11_demands_fcr.csv | ||
12_demands_afrr_positive.csv | ||
13_demands_afrr_negative.csv | ||
14_demands_mfrr_positive.csv | ||
15_demands_mfrr_negative.csv | ||
20_dsr_consumers.csv | ||
21_dsr_potentials.csv | ||
22_dsr_mustruns_outages_revisions.csv | ||
23_dsr_restrictions_work.csv | ||
24_dsr_availabilities.csv | ||
30_battery_storages.csv | ||
31_battery_mustruns_outages_revisions.csv | ||
32_battery_states_of_charge.csv | ||
33_battery_availabilities.csv | ||
40_bioenergy_power_plants.csv | ||
50_solar_power_plants.csv | ||
60_wind_onshore_power_plants.csv | ||
61_wind_offshore_power_plants.csv | ||
70_hydro_power_plants.csv | ||
71_hydro_mustruns_outages_revisions.csv | ||
72_hydro_reservoirs.csv | ||
73_hydro_reservoir_inflows.csv | ||
74_hydro_reservoir_filling_levels.csv | ||
75_hydro_availabilities.csv | ||
79_hydro_run_of_river_power_plants.csv | ||
80_thermal_power_plants.csv | ||
81_thermal_prices_fuel.csv | ||
82_thermal_prices_emission.csv | ||
83_thermal_mustruns_outages_revisions.csv | ||
84_thermal_restrictions_fuel.csv | ||
85_thermal_restrictions_emission.csv | ||
86_thermal_availabilities.csv | ||
89_thermal_cogeneration_plants.csv | ||
90_grid_bidding_zones.csv | ||
91_grid_ntcs.csv | ||
92_grid_cntcs.csv | ||
93_grid_fbmc_cnecs.csv | ||
94_grid_fbmc_ahcs.csv | ||
95_grid_reserve_exchanges.csv | ||
96_grid_mustruns_outages_revisions.csv | ||
97_grid_availabilities.csv | ||
98_grid_external_exports.csv | ||
99_grid_external_imports.csv |
Investment
The procedure for investment runs is applied at the investment page by click on Run simulation.
Investment simulation runs through an iterative approach can be performed through the available interfaces. The documentation here is currently under development. For more information, please contact the Maon-Team.