You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: NEWS.md
+6-1Lines changed: 6 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Release notes
2
2
3
-
## Unversioned
3
+
## Version 0.4.0 (2026-07-XX)
4
4
5
5
### Breaking changes
6
6
@@ -14,6 +14,11 @@
14
14
* Rewrote `CapacityCostLink` with `PeriodPartition` (introduced in *[`TimeStruct` 0.9.12](https://github.com/sintefore/TimeStruct.jl/releases/tag/v0.9.12)*) to increase flexibility of the link with respect to the time structure.
15
15
* Rewriting requires adjustment of the parameters due to changed meaning of some of the values.
16
16
17
+
### New node `StratPeriodDemandSink`
18
+
19
+
* Introduced new node type `StratPeriodDemandSink` as subtype of `AbstractPeriodDemandSink`.
20
+
* Node to be used for strategic demands and lower and upper bounds for satisfying the demand within a demand period.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@
15
15
> As a consequence, it is advised to read the documentation for each node to identify their usefulness.
16
16
> Is is planned to remove some nodes and rewrite the behaviour of other nodes to improve their flexibility.
17
17
>
18
-
> Among others, using `PeriodDemandSink` and `CapacityCostLink` in combination with `EnergyModelsGUI` results in errors when trying to access fields that have as values `PartitionProfile`.
18
+
> Among others, using `PeriodDemandSink`, `StratPeriodDemandSink`, and `CapacityCostLink` in combination with `EnergyModelsGUI` results in errors when trying to access fields that have as values `PartitionProfile`.
19
19
> The same holds for variables that are defined over `PeriodPartition`s where you cannot see the results.
Copy file name to clipboardExpand all lines: docs/src/index.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,7 +30,8 @@ This package provides several node types that extend the EnergyModelsX interface
30
30
31
31
### Sink Nodes
32
32
33
-
-[`PeriodDemandSink`](@ref nodes-perioddemandsink): Allows demand to be met flexibly within a defined time period (e.g. daily energy use).
33
+
-[`PeriodDemandSink`](@ref nodes-perioddemandsink): Allows demand to be met flexibly within a defined demand period (*e.g.*, daily energy use).
34
+
-[`StratPeriodDemandSink`](@ref nodes-stratperioddemandsink): a variation of `PeriodDemandSink` where the demand must be satisfied within a strategic period with bound on the utilization in demand periods.
34
35
-[`LoadShiftingNode`](@ref nodes-loadshiftingnode): Supports discrete batch shifting across time within allowed work shifts.
35
36
-[`MultipleInputSink`](@ref nodes-mul_in_sink): Enables flexible use of multiple input resources to meet demand.
36
37
-[`BinaryMultipleInputSinkStrat`](@ref nodes-mul_in_sink_strat): Input choice from multiple fuels using binary (exclusive) decisions per period.
[`PeriodDemandSink`](@ref) nodes represent flexible demand sinks where demand must be fulfilled within defined periods (*e.g.* daily or weekly), rather than in each individual operational time step.
4
-
**A *period* is thus a consecutive range of operational periods, that together will model, *e.g.*, a day or a week etc.**
4
+
A *demand period* is a consecutive range of operational periods, that together will model, *e.g.*, a day, a week or comparable.
5
5
6
6
This node can, *e.g.*, be combined with [`MinUpDownTimeNode`](@ref), to allow production to be moved to the time of the day when it is cheapest because of, *e.g.*, energy or production costs.
7
7
8
8
!!! tip "Example"
9
-
This node is included in an [example](@ref examples-flexible_demand) to demonstrate flexible demand.
9
+
This node is included in an *[example](@ref examples-flexible_demand)* to demonstrate flexible demand.
10
10
11
11
!!! warning "TimeStructure for node"
12
-
This node is designed for **uniform or repetitive duration of operational periods**.
12
+
This node requires considerations of the operational time structure and the chosen demand period duration.
13
13
Irregular durations may cause misalignment of shifted loads, especially if the field `period_duration` does not align with the chosen [`SimpleTimes`](@extref TimeStruct.SimpleTimes) structure representing the operational periods.
14
14
15
15
!!! warning "`PeriodDemandSink` and `EnergyModelsGUI`"
@@ -41,8 +41,7 @@ The standard fields are given as:
41
41
In addition, it is crucial that the sum of both values in each demand period is larger than 0 to avoid an unconstrained model.
42
42
43
43
!!! warning "Chosen values"
44
-
The implementation is relative to the chosen `period_duration` (see below).
45
-
If the period duration is ``24``, then the cost is for the unsatisfied demand within the ``24`` demand period, multiplied with the probability and the repetitons within a strategic period.
44
+
The implementation for the demand period is relative to the chosen duration of a strategic period while the demand period deficit and surplus is scaled to a strategic period in the calculation.
46
45
47
46
-**`input::Dict{<:Resource,<:Real}`**:\
48
47
The field `input` includes [`Resource`](@extref EnergyModelsBase.Resource)s with their corresponding conversion factors as dictionaries.\
@@ -65,23 +64,23 @@ The standard fields are given as:
65
64
[`AbstractPeriodDemandSink`](@ref EnergyModelsFlex.AbstractPeriodDemandSink)s require additional fields to specify both the periods and their respective demands:
66
65
67
66
-**`period_duration::TimeProfile`**:\
68
-
Defines the total duration of a single demand period.\
67
+
Defines the total duration of the demand periods.
69
68
For instance, if the duration of 1 of the operational time structure is 1 hour and `period_duration = FixedProfile(24)`, then each demand period spans one day.
70
69
The demand of this node (for a given day, see below) must then be filled on a daily basis, without any restrictions on *when* during the day the demand must be filled given the available capacity.\
71
70
Due to a constructor, it can either be specified as number (the same duration in all demand periods), as a vector (varying duration of each demand period), or as a time profile (*e.g.*, varying period durations due to varying operational time structures).
72
71
It cannot be specified as `OperationalProfile`.
73
72
74
73
-**`period_demand::TimeProfile`**:\
75
74
The total demand to be met during each demand period.
76
-
The length of this time profile should match the number of periods (*e.g.*, days) in the time structure.
77
-
If the time structure represents one year with hourly resolution and the demand periods correspond to a day, this time profile must then have 365 elements.
75
+
The length of this time profile should match the number of demand periods (*e.g.*, days) in the time structure.
76
+
If the time structure represents one year with hourly resolution and the demand periods correspond to a day, this time profile must then have 365 elements.\
77
+
It cannot be specified as `OperationalProfile`.
78
78
79
79
It is best to utilize the [`PartitionProfile`](@extref TimeStruct.PartitionProfile) type if the demand is varying.
80
-
If it is constant, you can also utilize [`StrategicProfile`][@extref TimeStruct.StrategicProfile], [`RepresentativeProfile`][@extref TimeStruct.RepresentativeProfile], or [`ScenarioProfile`][@extref TimeStruct.ScenarioProfile], depending on your chosen time structure.
81
-
It cannot be specified as `OperationalProfile`.
80
+
If it is constant, you can also utilize [`StrategicProfile`](@extref TimeStruct.StrategicProfile), [`RepresentativeProfile`](@extref TimeStruct.RepresentativeProfile), or [`ScenarioProfile`](@extref TimeStruct.ScenarioProfile), depending on your chosen time structure.
82
81
83
82
!!! warning "Time consistency"
84
-
Ensure that the `period_demand` time profile length aligns with the operational time horizon duration divided by `period_duration`
83
+
Ensure that the `period_demand` time profile length aligns with the periods specified by `period_duration`.
85
84
Mismatches can lead to indexing errors or inconsistent demand enforcement.
86
85
87
86
These fields are at the 3ʳᵈ and 4ᵗʰ position below the field `cap` as shown in [`PeriodDemandSink`](@ref).
[`AbstractPeriodDemandSink`](@ref EnergyModelsFlex.AbstractPeriodDemandSink) nodes declare in addition several variables through dispatching on the method [`EnergyModelsBase.variables_element()`](@ref) for including constraints for deficits and surplus for individual resources as well as what the fraction satisfied by each resource.
121
-
These variables are for a [`AbstractPeriodDemandSink`](@ref EnergyModelsFlex.AbstractPeriodDemandSink) node ``n`` in demand periods ``t_pd``:
119
+
[`AbstractPeriodDemandSink`](@ref EnergyModelsFlex.AbstractPeriodDemandSink) nodes declare in addition several variables through dispatching on the method [`EnergyModelsBase.variables_element()`](@ref) for including constraints for deficits and surplus for individual demand periods.
122
120
123
121
-``\texttt{demand\_sink\_surplus}[n, t_pd]``:\
124
-
Surplus of energy delivered beyond the required `period_demand`of demand period `t_pd` .
122
+
Surplus of energy delivered beyond the required `period_demand`in demand period `t_pd` .
125
123
-``\texttt{demand\_sink\_deficit}[n, t_pd]``:\
126
-
Deficit of energy delivered relative to the `period_demand`of demand period `t_pd` .
124
+
Deficit of energy delivered relative to the `period_demand`in demand period `t_pd` .
0 commit comments