1a_definitions.gms 24 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ontext
This file is part of Backbone.

Backbone is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Backbone is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Backbone.  If not, see <http://www.gnu.org/licenses/>.
$offtext

18
19
20
21
22
23
24
* =============================================================================
* --- Model Related Set Definitions -------------------------------------------
* =============================================================================

Sets

* --- Model Related Selections ------------------------------------------------
25

26
27
28
29
    mType "model types in the Backbone" /
        building,
        invest,
        schedule
30
        /
31
32
33
34
35
36

    mSetting "setting categories for models" /

        // General Time Structure
        t_start, // First time step for the start of simulation
        t_jump, // Number of time steps realized with each solve
37
        t_horizon, // Length of the simulation horizon in time steps (central forecast)
38
        t_end, // Last time step of the simulation
Niina Helistö's avatar
Niina Helistö committed
39
40
        loadPoint, // Load advanced basis; 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
        savePoint, // Save advanced basis; 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
41
42
43
        lastStepInIntervalBlock, // Last time step in the block of intervals with the same length
        stepsPerInterval, // Number of time steps aggregated within interval
        stepLengthInHours, // Length of one time step in hours
44
45
46
47

        // Samples and Forecasts
        samples, // Number of active samples
        forecasts, // Number of active forecasts
48
49
        t_forecastLengthUnchanging, // Length of forecasts in time steps - this does not decrease when the solve moves forward (requires forecast data that is longer than the horizon at first)
        t_forecastLengthDecreasesFrom, // Length of forecasts in time steps - this decreases when the solve moves forward until the new forecast data is read (then extends back to full length)
50
51
        t_forecastStart, // Time step for first reading the forecasts (not necessarily t_start)
        t_forecastJump, // Number of time steps between each update of the forecasts
52
        t_improveForecast "Number of time steps ahead of time on which the forecast is improved on each solve"
53
        t_perfectForesight "Number of time steps for which realized data is used instead of forecasts"
54
        onlyExistingForecasts "Use only existing forecast values when reading updated forecasts. Note: zero values need to be saved as Eps in the gdx file."
55
56
        scenarios        "Number of long-term scenarios used"
        scenarioLength   "Length of scenario in time steps for creating stocahstic scenarios from time series data"
57
58

        // Features
59
        t_trajectoryHorizon, // Length of the horizon when start-up and shutdown trajectories are considered (in time steps)
60
        t_initializationPeriod,  // Number of time steps in the beginning of the simulation which are solved but the results of which are not stored
61
        dataLength, // The maximum number of time steps in any input data time series (recommended for correctly circulating data)
Erkka Rinne's avatar
Erkka Rinne committed
62
        red_num_leaves "Desired number of preserved scenarios or leaves (SCENRED)"
63
        red_percentage "Desired relative distance (accuracy) of scenario reduction (SCENRED)"
64
65
        incHRAdditionalConstraints // Method to include the two additional constraints for incremental heat rates;
                                   // 0 = include for units with non-convex fuel use, 1 = include for all units
66
67
        /

68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
    // Solve info
    solveInfoAttributes "Information about model solves" /
        modelStat
        solveStat
        totalTime
        iterations
        nodes
        numEqu
        numDVar
        numVar
        numNZ
        sumInfes
        objEst
        objVal
        /

    // !!! REDUNDANT SETS PENDING REMOVAL !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    solve_info "Containers for solve information" /
        modelStat "Status of the model after solve"
        solveStat "Status of the solve"
        totalTime "Total solve time"
        iterations "Number of iteration"
        nodes "Number of nodes in the solve"
        numEqu "Number of equations in the problem"
        numDVar "Number of D variables in the problem"
        numVar "Number of variables in the problem"
        numNZ "Number of non-zeros in the problem"
        sumInfes "Sum of infeasibilities"
        objEst "Estimate for the best possible objective value"
        objVal "Objectiv value"
98
        /
99
100
101
102
103
104

* --- Efficiency Approximation Related Sets -----------------------------------

    // Efficiency Levels and Categories
    effLevel "Pre-defined levels for efficiency representation that can start from t_solve + x"
        / level1*level9 /
Juha Kiviluoma's avatar
Juha Kiviluoma committed
105
    effSelector "Select equations and lambdas/slope for efficiency calculations"
106
        / lambda01*lambda12, directOff, directOnLP, directOnMIP , incHR/ // NOTE! Lambdas required first!
Juha Kiviluoma's avatar
Juha Kiviluoma committed
107
    effDirect(effSelector) "Using direct input to output equation"
108
        / directOff, directOnLP, directOnMIP /
Juha Kiviluoma's avatar
Juha Kiviluoma committed
109
110
111
    effDirectOff(effSelector) "Using direct input to output equation without online variable, i.e. constant efficiency"
        / directOff /
    effDirectOn(effSelector) "Using direct input to output equation with online variable"
112
        / directOnLP, directOnMIP /
Juha Kiviluoma's avatar
Juha Kiviluoma committed
113
114
    effLambda(effSelector) "Lambdas in use for part-load efficiency representation"
        / lambda01*lambda12 /
115
116
    effIncHR(effSelector) "Using incremental heat rate equation"
        / incHR /
117
    effOnline(effSelector) "Efficiency selectors that use online variables"
118
        / directOnLP, directOnMIP, lambda01*lambda12 ,incHR / // IMPORTANT! Online variables are generated based on this, so keep it up to date!
119

120
121
122
* --- General and Directional Sets --------------------------------------------

    // General Counter
123
    counter "General counter set"
124
        /c000*c999/
125
    cc(counter) "Temporary subset of counter used for calculations"
126
127

    // Directional Sets
128
129
    input_output "Designating nodes as either inputs or outputs"
        / input, output /
130
    inc_dec "Increase or decrease in dummy, or slack variables"
131
        / increase, decrease /
132
133
    min_max "Minimum and maximum"
        / min, max /
134
    constraint "Possible names for constraints"
135
        / eq1*eq9, gt1*gt9 /
136
137
138
139
    eq_constraint(constraint) "Equality constraints"
        / eq1*eq9 /
    gt_constraint(constraint) "Greater than constraints"
        / gt1*gt9 /
140

141
142
143
144
145
146
147
* --- Model Feature Sets ------------------------------------------------------

    // Unit Startup Related Sets
    starttype "Startup types" /
        hot "Hot start"
        warm "Warm start"
        cold "Cold start"
148
149
150
        /
    starttypeConstrained(starttype) "Startup types with constrained maximum non-opearational time"
        / hot, warm /
151
152
    cost_consumption "Startup cost or startup fuel consumption"
        / cost, consumption /
153

154
155
    // Other Features
    feature "Set of optional model features" /
156
*        findStorageStart "Solve for optimal storage start levels" // NOT IMPLEMENTED
157
        storageValue     "Use storage value instead of fixed control"
158
159
160
161
*        storageEnd       "Expected storage end levels greater than starting levels" // NOT IMPLEMENTED
*        addOn            "Use StoSSch as a storage add-on to a larger model" // NOT IMPLEMENTED
*        extraRes         "Use extra tertiary reserves for error in elec. load during time step" // NOT IMPLEMENTED
*        rampSched        "Use power based scheduling" // PARTIALLY IMPLEMENTED
162
        scenRed          "Reduce number of long-tem scenarios using GAMS SCENRED2"
163
164
        checkUnavailability "Take into account ts_unit unavailability data"
         /
165
166
167
168
169
170
171
172
* --- Set to declare time series that will be read between solves ------------------------------------------------------
    timeseries "Names of time series that could be loop read from files between solves" /
        ts_unit
        ts_effUnit
        ts_effGroupUnit
        ts_influx
        ts_cf
        ts_reserveDemand
173
        ts_node
174
175
        ts_priceChange
        ts_price
176
        ts_unavailability
177
        ts_storageValue
178
179
        /

180
181
182
183
184
185
186
187
188
; // END Sets

* =============================================================================
* --- Model Parameter Definitions ---------------------------------------------
* =============================================================================

* --- Numeric Model Parameters ------------------------------------------------

// General model parameter arrays
189
Parameter
190
191
192
193
194
*    settings(mSetting)
    mSettings(mType, mSetting) "Model settings array"
    mSettingsEff(mtype, effLevel) "Model efficiency approximation array"
    mInterval(mType, mSetting, counter) "Model interval array"
    t_skip_counter "Numerical counter for solve time steps"
195
196
;

197
// Include additional parameters if found
198
199
200
201
Parameter params(*) /
$if exist 'params.inc' $include 'params.inc'
/;

202
// Features
Topi Rasku's avatar
Topi Rasku committed
203
Set active(mType, feature) "Set membership tells active model features";
204
option clear = active;
205

206
207
208
* =============================================================================
* --- Parameter Set Definitions -----------------------------------------------
* =============================================================================
209

Juha Kiviluoma's avatar
Juha Kiviluoma committed
210
211
Sets

212
213
* --- Parameter Data Related Sets ---------------------------------------------

214
param_gn  "Possible parameters for grid, node" /
215
    nodeBalance   "A flag to decide whether node balance constraint is to be used"
216
217
    selfDischargeLoss "Self discharge rate of the node (MW/[v_state])"
    energyStoredPerUnitOfState "A possible unit conversion if v_state uses something else than MWh (MWh/[v_state])"
218
219
220
221
222
    boundStart    "A flag to bound the first t in the run using reference constant or time series"
    boundStartAndEnd "A flag that both start and end are bound using reference constant or time series"
    boundEnd      "A flag to bound last t in each solve based on the reference constant or time series"
    boundAll      "A flag to bound the state to the reference in all time steps"
    boundStartToEnd  "Force the last states to equal the first state"
223
*    forecastLength "Length of forecasts in use for the node (hours). After this, the node will use the central forecast."  // NOT IMPLEMENTED
224
    capacityMargin "Capacity margin used in invest mode (MW)"
225
    storageValueUseTimeSeries "A flag to determine whether to use time series form `storageValue`"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
226
227
/

228
229
230
231
232
233
234
235
param_gnBoundaryTypes "Types of boundaries that can be set for a node with a state variable" /
    upwardLimit   "Absolute maximum state of the node (unit depends on energyCapacity)"
    downwardLimit "Absolute minimum energy in the node (unit depends on energyCapacity)"
    upwardSlack01*upwardSlack20 "A threshold after which a specific cost co-efficient is applied (unit depends on energyCapacity)"
    downwardSlack01*downwardSlack20 "A threshold after which a specific cost co-efficient is applied (unit depends on energyCapacity)"
    reference     "Reference value for a state that can be used to bound a state (unit depends on energyCapacity)"
    maxSpill      "Maximum spill rate from the node (MWh/h)"
    minSpill      "Minimum spill rate from the node (MWh/h)"
236
    balancePenalty "Penalty value for violating the energy balance of that particular node (EUR/MWh) (can be interpretated as the energy price in certain settings)"
237
238
239
240
241
/

param_gnBoundaryProperties "Properties that can be set for the different boundaries" /
    useTimeSeries "A flag to use time series to set state bounds and limits"
    useConstant   "A flag to use constant to set state bounds and limits"
242
*    deltaFromReference "The constant or the time series indicate how much the boundary deviates from reference (instead of being an absolute number)"  // NOT IMPLEMENTED
243
244
245
246
247
    constant      "A constant value for the boundary or the reference"
    slackCost     "The cost of exceeding the slack boundary"
    multiplier    "A multiplier to change the value (either constant or time series), default 1"
/

Juha Kiviluoma's avatar
Juha Kiviluoma committed
248
param_gnn "Set of possible data parameters for grid, node, node (nodal interconnections)" /
249
250
251
252
253
    transferCap   "Transfer capacity limits (MW)"
    transferCapBidirectional "Total bidirectional transfer capacity limit (MW)"
    transferLoss  "Transfer losses"
    diffCoeff     "Coefficients for energy diffusion between nodes (MW/[v_state])"
    boundStateMaxDiff "Maximum difference of node state pairs ([v_state])"
254
    transferCapInvLimit "Capacity limit for investments (MW)"
255
256
257
258
    investMIP     "A flag to make integer investment instead of continous investment (MW versus number of links)"
    unitSize      "Size of one link for integer investments (MW)"
    invCost       "Investment cost (EUR/MW)"
    annuity       "Investment annuity"
259
    portion_of_transfer_to_reserve "Portion of the infeed from the unit that needs to be available as reserve if the unit fails"
260
261
    ICrampUp
    ICrampDown
Juha Kiviluoma's avatar
Juha Kiviluoma committed
262
263
264
/

param_gnu "Set of possible data parameters for grid, node, unit" /
265
266
    capacity      "Maximum capacity (MW)"
    conversionCoeff "Coefficient for conversion equation (multiplies each input or output when summing v_gen from multiple inputs/outputs)"
267
268
    useInitialGeneration     "A flag to indicate whether to fix generation for the first time step (binary)"
    initialGeneration        "Initial generation/consumption of the unit in the first time step (MW)"
269
270
271
    maxRampUp     "Speed to ramp up (p.u./min)"
    maxRampDown   "Speed to ramp down (p.u./min)"
    upperLimitCapacityRatio  "Ratio of the upper limit of the node state and the unit capacity investment ([v_state]/MW)"
272
    unitSize      "Input/Output capacity of one subunit for integer investments (MW)"
273
274
275
    invCosts      "Investment costs (EUR/MW)"
    annuity       "Investment annuity factor"
    fomCosts      "Fixed operation and maintenance costs (EUR/MW/a)"
276
    vomCosts       "Variable operation and maintenance costs (EUR/MWh)"
277
278
    inertia       "Inertia of the unit (s)"
    unitSizeMVA   "Generator MVA rating of one subunit (MVA)"
279
    availabilityCapacityMargin  "Availability of the unit in the capacity margin equation (p.u.). If zero, v_gen is used. Currently used only for output capacity."
Juha Kiviluoma's avatar
Juha Kiviluoma committed
280
/
281

282
param_gnuBoundaryProperties "Properties that can be set for the different boundaries" /
283
284
    rampLimit     "Maximum ramp speed (p.u./min)"
    rampCost      "Wear and tear cost of ramping up (EUR/MW)"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
285
/
286

Topi Rasku's avatar
Topi Rasku committed
287
param_unit "Set of possible data parameters for units" /
288
    // Given in input data
289
    unitCount     "Number of subunits if aggregated"
290
    outputCapacityTotal "Output capacity of the unit, calculated by summing all the outputs together by default, unless defined in data"
291
292
    unitOutputCapacityTotal "Output capacity of the unit, calculated by summing all the subunit output sizes together by default"
    availability  "Availability of given energy conversion technology (p.u.)"
293
294
    useInitialOnlineStatus   "A flag to fix the online status of a unit for the first time step (binary)"
    initialOnlineStatus      "Initial online status of the unit in the first time step (0-1)"
295
    unavailability  "Unavailability of given energy conversion technology (p.u.)"
296
297
298
    startCostCold "Variable start-up costs for cold starts excluding fuel costs (EUR/MW)"
    startCostWarm "Variable start-up costs for warm starts excluding fuel costs (EUR/MW)"
    startCostHot  "Variable start-up costs for hot starts excluding fuel costs (EUR/MW)"
299
    startFuelConsCold "Consumption of start-up fuel per cold subunit started up (MWh_fuel/MW)"
300
301
    startFuelConsWarm "Consumption of start-up fuel per warm subunit started up (MWh_fuel/MW)"
    startFuelConsHot "Consumption of start-up fuel per hot subunit started up (MWh_fuel/MW)"
302
303
    startColdAfterXhours "Offline hours after which the start-up will be a cold start (h)"
    startWarmAfterXhours "Offline hours after which the start-up will be a warm start (h)"
304
    shutdownCost  "Cost of shutting down the unit"
305
306
    rampSpeedToMinLoad "Ramping speed from start-up to minimum load (p.u./min)"
    rampSpeedFromMinLoad "Ramping speed from shutdown decision to zero load (p.u./min)"
307
308
    minOperationHours "Minimum operation time (h), prevents shutdown after startup until the defined amount of time has passed"
    minShutdownHours "Minimum shut down time (h), prevents starting up again after the defined amount of time has passed"
309
310
311
312
*    SO2           "SO2 emissions (tonne per MWh_fuel)"  // NOT IMPLEMENTED
*    NOx           "NOx emissions (tonne per MWh_fuel)"  // NOT IMPLEMENTED
*    CH4           "CH4 emissions (tonne per MWh_fuel)"  // NOT IMPLEMENTED
*    resTimelim    "How long should a storage be able to provide reserve (h)"  // NOT IMPLEMENTED
313
314
315
    eff00 * eff12 "Efficiency of the unit to convert input to output/intermediate product"
    opFirstCross  "The operating point where the real efficiency curve and approximated efficiency curve cross"
    op00 * op12   "Right border of the efficiency point"
316
    hr00 * hr12   "Incremental heat rates (GJ/MWh)"
317
    hrop00 * hrop12   "Right border of the incremental heat rates"
318
    section       "Possibility to define a no load fuel use for units with zero minimum output"
319
    hrsection     "no load fuel use to be defined when using incremental heat rates"
320
321
322
323
    useTimeseries "A flag to use time series form input for unit parameters whenever possible"
    investMIP     "A flag to make integer investment instead of continous investment"
    maxUnitCount  "Maximum number of units when making integer investments"
    minUnitCount  "Minimum number of units when making integer investments"
324
    // Calculated based on other input data
325
    lastStepNotAggregated "Last time step when the unit is not yet aggregated - calculated in inputsLoop.gms for units that have aggregation"
326
327
    becomeAvailable       "The relative position of the time step when the unit becomes available (calculated from ut(unit, t, start_end))"
    becomeUnavailable     "The relative position of the time step when the unit becomes unavailable (calculated from ut(unit, t, start_end))"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
328
/
329

330
331
332
333
334
335
336
param_eff "Parameters used for unit efficiency approximations" /
    lb      "Minimum load of the unit"
    op      "Maximum load of the unit, or the operating point of the SOS2 variable in the piecewise linear heat rate approximation (lambda)"
    section "Operational heat rate of the unit, or the SOS2 variable in the piecewise linear heat rate approximation (lambda)"
    slope   "Heat rate parameter representing no-load fuel consumption"
/

337
338
339
param_constraint "Parameters for constraints" /
    constant    "Constant when binding inputs/outputs"
    coefficient "Coefficient when binding inputs/outputs"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
340
341
/

342
343
344
345
param_price "Parameters for commodity prices" /
    price         "Commodity price (EUR/MWh)"
    useConstant   "Flag to use constant data for commodities"
    useTimeSeries "Flag to use time series form data for commodities"
346
347
/

348
param_unitStartupfuel "Parameters for startup fuel limits in units" /
349
    fixedFuelFraction "Fixed share of a fuel in the consumption mix"   //only for start-up fuels
Juha Kiviluoma's avatar
Juha Kiviluoma committed
350
351
/

352
param_policy "Set of possible data parameters for groups or grid, node, regulation" /
353
354
    emissionTax   "Emission tax (EUR/tonne)"
    emissionCap   "Emission limit (tonne)"
355
    instantaneousShareMax "Maximum instantaneous share of generation and import from a particular group of units and transfer links"
356
357
    energyMax      "Maximum energy production or consumption from a particular group of units over samples"
    energyMaxVgenSign "Sign for v_gen in the maximum energy constraint - use -1 when you need a minimum energy constraint (then also energyMax should be negative)"
358
359
    energyShareMax "Maximum energy share of generation from a particular group of units"
    energyShareMin "Minimum energy share of generation from a particular group of units"
360
361
    constrainedCapMultiplier "Multiplier a(i) for unit investments in equation Sum(i, a(i)*v_invest(i)) <= b"
    constrainedCapTotalMax "Total maximum b for unit investments in equation Sum(i, a(i)*v_invest(i)) <= b"
362
363
    constrainedOnlineMultiplier "Multiplier a(i) for online units in equation Sum(i, a(i)*v_online(i)) <= b"
    constrainedOnlineTotalMax "Total maximum b for online units in equation Sum(i, a(i)*v_online(i)) <= b"
364
*    minCons "minimum consumption of storage unit when charging" // NOT USED, PENDING REMOVAL
365
366
    ROCOF "Maximum rate of change of frequency (Hz/s)"
    defaultFrequency "Nominal frequency in the system (Hz)"
367
368
    staticInertia "A flag to indicate static inertia constraint should be implemented - q_inertiaMin"
    dynamicInertia "A flag to indicate dynamic inertia constraint should be implemented - q_rateOfChangeOfFrequencyUnit/Transfer"
369
370
371
372
    // Reserve related parameters, currently without a proper parameter set
    update_frequency "Frequency of updating reserve contributions"
    update_offset "Optional offset for delaying the reserve update frequency"
    gate_closure  "Number of timesteps ahead of dispatch that reserves are fixed"
373
*    use_time_series "Flag for using time series data. !!! REDUNDANT WITH useTimeseries, PENDING REMOVAL !!!"
374
    useTimeSeries "Flag for using time series data"
375
376
377
    reserve_length "Length of reserve horizon"
    reserveReliability "Reliability parameter of reserve provisions"
    reserve_increase_ratio "Unit output is multiplied by this factor to get the increase in reserve demand"
378
    portion_of_infeed_to_reserve "Proportion of the generation of a tripping unit that needs to be covered by reserves from other units"
Ciara O'Dwyer's avatar
Ciara O'Dwyer committed
379
    offlineReserveCapability "Proportion of an offline unit which can contribute to a category of reserve"
ran li's avatar
bug fix    
ran li committed
380
    ReserveShareMax "Maximum reserve share of a group of units"
381
    LossOfTrans "A flag to tell that N-1 reserve is needed due to a possibility that an interconnector to/from the node group fails"
382
383
    up          "Upward direction, e.g. for reserve provisions"
    down        "Downward direction, e.g. for reserve provisions"
384
385
/

386
387
388
389
390
391
392
393
394
* --- Efficiency Approximation Related Sets -----------------------------------

// Efficiency Approximation related Counters
op(param_unit) "Operating points in the efficiency curves, also functions as index for data points"
        /op00*op12/ // IMPORTANT! Has to equal the same param_unit!
eff(param_unit) "Effiency for the corresponding operating point ('op') in the efficiency curves, also used for data indexing"
        /eff00*eff12/ // IMPORTANT! Has to equal the same param_unit!
lambda "Lambda approximation indeces"
        /lambda01*lambda12/ // IMPORTANT! Has to equal effLambda!
395
396
397
398
hrop(param_unit) "Operating points in the incremental heat rate curves, also functions as index for data points"
        /hrop00*hrop12/ // IMPORTANT! Has to equal the same param_unit!
hr(param_unit) "Heat rate for the corresponding operating point ('hrop') in the heat rate curves, also used for data indexing"
        /hr00*hr12/ // IMPORTANT! Has to equal the same param_unit!
399

400
401
402
403
404
* --- Counters and Directional Sets -------------------------------------------

// Slack categories
slack(param_gnBoundaryTypes) "Categories for slack variables"
       / upwardSlack01*upwardSlack20, downwardSlack01*downwardSlack20 /
405
upwardSlack(param_gnBoundaryTypes) "Set of upward slacks"
406
       / upwardSlack01*upwardSlack20 /
407
downwardSlack(param_gnBoundaryTypes) "Set of downward slacks"
408
409
410
411
412
413
414
415
416
       / downwardSlack01*downwardSlack20 /

// Flags for boundaries
stateLimits(param_gnBoundaryTypes) "set of upward and downward state limits"
       / upwardLimit, downwardLimit /
spillLimits(param_gnBoundaryTypes) "set of upward and downward state limits"
       / maxSpill, minSpill /
useConstantOrTimeSeries(param_gnBoundaryProperties) "useTimeSeries and useConstant property together"
       / useTimeSeries, useConstant /
417

418
419
420
// Directional sets that are subsets of others
up_down(param_policy) "Direction set used by some variables, e.g. reserve provisions and generation ramps"
       / up, down /
421
422
availabilityLimits(param_unit) "Start and end, e.g. of unit lifetime"
       / becomeAvailable, becomeUnavailable /
423
; // END parameter set declarations