Model Description
The model is expressed as a MILP problem.
Variables
Sets
Name |
Description |
---|---|
u |
Units Supply Side |
d |
ProsumersConsumers Demand Side |
o |
Order type |
n |
Nodes |
l |
Lines |
t |
Technologies |
tr(t) |
Renewable technologies |
f |
Fuel types |
s(u) |
Storage Technologies |
h |
Hours |
i(h) |
Subset of simulated hours for one iteration |
z(h) |
Subset of all simulated hours |
sk |
Sectors |
Parameters
Name |
Units |
Description |
---|---|---|
Availabilities |
||
AccaptanceBlockOrdersMin(u) |
[%] |
Accaptance ratio for block orders |
AvailabilityFactorDemandOrder(d,h) |
[%] |
Share of maximum demand in time period h |
AvailabilityFactorSimpleOrder(u,h) |
[%] |
Share of maximum Simple order in time period h |
AvailabilityFactorBlockOrder(u,h) |
[%] |
Share of maximum Block order in time period h |
AvailabilityFactorFlexibleOrder(u) |
[%] |
Accaptance ratio for block orders |
Node data |
||
LocationDemandSide(d,n) |
[n.a.] |
Location {1 0} |
LocationSupplySide(u,n) |
[n.a.] |
Location {1 0} |
NodeHourlyRampUp(n, h) |
[%hn] |
Node ramp up limit |
NodeHourlyRampDown(n, h) |
[%hn] |
Node ramp down limit |
NodeDailyRampUp(n) |
[%24hn] |
Node daily ramp up limit |
NodeDailyRampDown(n) |
[%24hn] |
Node daily ramp up limit |
NodeInitial(n) |
||
Prices |
||
PriceDemandOrder(d,h) |
[€MW] |
Price ofer of the consumer d in time period h |
PriceSimpleOrder(u,h) |
[€MW] |
Price ofer of the simple order u in time period h |
PriceBlockOrder(u) |
[€MW] |
Default block order price |
PriceFlexibleOrder(u) |
[€MW] |
Default block order price |
Interconection lines |
||
LineNode(l,n) |
[n.a.] |
Incidence matrix {-1 +1} |
FlowMaximum(l,h) |
[MW] |
Line limits |
FlowMinimum(l,h) |
[MW] |
Minimum flow |
LineHourlyRampUp(l, h) |
[%hn] |
Interconection line ramp up limit |
LineHourlyRampDown(l, h) |
[%hn] |
Interconection line ramp down limit |
LineDailyRampUp(l) |
[%24hn] |
Interconection daily line ramp up limit |
LineDailyRampDown(l) |
[%24hn] |
Interconection daily line ramp down limit |
LineInitial(l) |
||
Units / demands |
||
MaxDemand(d) |
[MWu] |
Maximum demand |
PowerCapacity(u) |
[MWu] |
Installed capacity |
OrderType(u,o) |
[n.a.] |
Order type {1 0} |
Technology(u,t) |
[n.a.] |
Technology type {1 0} |
Fuel(u,f) |
[n.a.] |
Fuel type {1 0} |
Sector(d,sk) |
[n.a.] |
Demand sector type {1 0} |
UnitRampUp(u) |
[%hu] |
Unit ramp up limit |
UnitRampDown(u) |
[%hu] |
Unit ramp down limit |
LinkedBlockOrderIncidenceMatrix(u) |
||
MinimumIncomeFixed(u) |
||
MinimumIncomeVariable(u) |
||
Storage |
||
StorageChargingCapacity(s) |
[MWu] |
Storage capacity |
StorageChargingEfficiency(s) |
[%] |
Charging efficiency |
StorageSelfDischarge(s) |
[%day] |
Self-discharge of the storage units |
StorageCapacity(s) |
[MWhu] |
Storage capacity |
StorageDischargeEfficiency(s) |
[%] |
Discharge efficiency |
StorageOutflow(s,h) |
[MWhu] |
Storage outflows |
StorageInflow(s,h) |
[MWhu] |
Storage inflows (potential energy) |
StorageInitial(s) |
[MWh] |
Storage level before initial period |
StorageProfile(s,h) |
[%] |
Storage level to be resepected at the end of each horizon |
StorageMinimum(s) |
[MWh] |
Storage minimum |
StorageFinalMin(s) |
[MWh] |
Minimum storage level at the end of the optimization horizon |
NB: When the parameter is expressed per unit (“/u”), its value must be provided for one single unit.
Positive Optimization Variables
Name |
Units |
Description |
---|---|---|
AcceptanceRatioOfDemandOrders(d,h) |
[%] |
Acceptance ratio of demand orders |
AcceptanceRatioOfSimpleOrders(u,h) |
[%] |
Acceptance ratio of simple orders |
AcceptanceRatioOfBlockOrders(u) |
[%] |
Acceptance ratio of block orders |
Flow(l,h) |
[MW] |
Flow through lines |
StorageInput(s,h) |
[MW] |
Charging input for storage units |
StorageOutput(s,h) |
[MW] |
Discharging output for storage units |
StorageLevel(s,h) |
[MWh] |
Storage level of charge |
spillage(s,h) |
[MW] |
Spillage from reservoirs |
WaterSlack(s) |
[MWh] |
Unsatisfied water level constraint at end of optimization period |
SystemCost(h) |
[EUR] |
Hourly system cost |
Binary Variables
Name |
Units |
Description |
---|---|---|
ClearingStatusOfBlockOrder(u) |
Binary variable |
|
ClearingStatusOfFlexibleOrder(u,h) |
Binary variable |
Free Variables
Name |
Units |
Description |
---|---|---|
TotalWelfare |
[EUR] |
Total welfate |
NetPositionOfBiddingArea(n,h) |
[EUR] |
Net position of bidding area |
TemporaryNetPositionOfBiddingArea(n,h) |
[EUR] |
Temporary net position of bidding area |
DailyNetPositionOfBiddingArea(n) |
[EUR] |
Daily net position of biding area |
Optimisation model
Objective function
The goal of the day-ahead market problem is to maximize the total welfare.
System costs
Hourly system costs are defined as follows:
Power Balances
The main constraint to be met is the supply-demand balance, for each period and each zone, in the day-ahead market (equation ). According to this restriction, the sum of all the power produced by all the units present in the node (including the power generated by the storage units), the power injected from neighbouring nodes is equal to the load in that node plus the power consumed for energy storage
Net position of each area:
Temporary net position due to flows between two neighbouring areas:
Net position due to flows between two neighbouring areas:
Block orders
Lower and upper bounds on block orders:
Flexible orders
Limits of flexible orders
Flow limits
Flows are above minimum values
Flows are below maximum values
Flows are within hourly ramping limits
Flows are within daily ramping limits
Net position limits
Net position is within hourly limits
Net position is bounded by net position ramping limits
Net position is within daily limits
Ramping rates
Ramping rates are bound by maximum ramp up and down MW/min
Rolling Horizon
The mathematical problem described in the previous sections could in principle be solved for a whole year split into time steps, but with all likelihood the problem would become extremely demanding in computational terms when attempting to solve the model with a realistically sized dataset. Therefore, the problem is split into smaller optimization problems that are run recursively throughout the year.
The following figure shows an example of such approach, in which the optimization horizon is two days, including a look-ahead (or overlap) period of one day. The initial values of the optimization for day j are the final values of the optimization of the previous day. The look-ahead period is modelled to avoid issues related to the end of the optimization period such as emptying the hydro reservoirs, or starting low-cost but non-flexible power plants. In this case, the optimization is performed over 48 hours, but only the first 24 hours are conserved.
##.. image:: figures/rolling_horizon.png
The optimization horizon and overlap period can be adjusted by the user in the DARKO configuration file. As a rule of thumb, the optimization horizon plus the overlap period should at least be twice the maximum duration of the time-dependent constraints (e.g. the minimum up and down times). In terms of computational efficiency, small power systems can be simulated with longer optimization horizons, while larger systems should reduce this horizon, the minimum being one day.