Skip to content

Capacity Limits¶

Upper and Lower Bounds¶

If the nominal capacity of a components is also the subject of optimisation (e.g. with decision variable \(G_{n,s}\) for generators), limits on the installable capacity may also be introduced (e.g. \(\underline{G}_{n,s}\) and \(\bar{G}_{n,s}\)):

Constraint Dual Variable Name
\(G_{n,s} \geq \underline{G}_{n,s}\) n.generators.mu_lower Generator-ext-p_nom-lower
\(G_{n,s} \leq \bar{G}_{n,s}\) n.generators.mu_upper Generator-ext-p_nom-upper
\(F_{l} \geq \underline{F}_{l}\) n.links.mu_lower Link-ext-p_nom-lower
\(F_{l} \leq \bar{F}_{l}\) n.links.mu_upper Link-ext-p_nom-upper
\(P_{l} \geq \underline{P}_{l}\) n.{lines,transformers}.mu_lower {Line,Transformer}-ext-s_nom-lower
\(P_{l} \leq \bar{P}_{l}\) n.{lines, transformers}.mu_upper {Line,Transformer}-ext-s_nom-upper
\(E_{n,s} \geq \underline{E}_{n,s}\) n.stores.mu_lower Store-ext-e_nom-lower
\(E_{n,s} \leq \bar{E}_{n,s}\) n.stores.mu_upper Store-ext-e_nom-upper
\(H_{n,s} \geq \underline{H}_{n,s}\) n.storage_units.mu_lower StorageUnit-ext-p_nom-lower

These constraints are set in the function define_nominal_constraints_for_extendables.

Modularity Constraints¶

The capacity expansion can be further constrained to be a multiple (e.g. \(G^{\textrm{mod}}_{n,s} \in \mathbb{N}\)) of a modular capacity (e.g. \(\tilde{G}_{n,s}\)) to represent fixed block sizes of added components (e.g. fixed block size of a nuclear power plant or a fixed capacity of a new circuit).

If {p,s,e}_nom_mod>0, the nominal capacity is given by:

Constraint Dual Variable Name
\(G_{n,s} = G^{\textrm{mod}}_{n,s} \cdot \tilde{G}_{n,s}\) N/A Generator-p_nom_modularity
\(F_{l} = F^{\textrm{mod}}_{l} \cdot \tilde{F}_{l}\) N/A Link-p_nom_modularity
\(P_{l} = P^{\textrm{mod}}_{l} \cdot \tilde{P}_{l}\) N/A {Line,Transformer}-s_nom_modularity
\(E_{n,s} = E^{\textrm{mod}}_{n,s} \cdot \tilde{E}_{n,s}\) N/A Store-e_nom_modularity
\(H_{n,s} = H^{\textrm{mod}}_{n,s} \cdot \tilde{H}_{n,s}\) N/A StorageUnit-p_nom_modularity

These constraints are set in the function define_modular_constraints().

Fixed Capacity¶

Additionally, the nominal capacity can be fixed to a certain value \(\tilde{G}_{n,s}\) for generators, \(\tilde{F}_{l}\) for links, \(\tilde{P}_{l}\) for lines and transformers, and \(\tilde{E}_{n,s}\) for stores, and \(\tilde{H}_{n,s}\) for storage units. In this case, the nominal capacity is given by:

Constraint Dual Variable Name
\(G_{n,s} = \tilde{G}_{n,s}\) only in n.model Generator-p_nom_set
\(F_{l} = \tilde{F}_{l}\) only in n.model Link-p_nom_set
\(P_{l} = \tilde{P}_{l}\) only in n.model {Line,Transformer}-s_nom_set
\(E_{n,s} = \tilde{E}_{n,s}\) only in n.model Store-e_nom_set
\(H_{n,s} = \tilde{H}_{n,s}\) only in n.model StorageUnit-p_nom_set

These constraints are set in the function define_fixed_nominal_constraints().

Why not just set p_nom_extendable=False?

Using p_nom_extendable=False means the capacity is fixed and not optimized. However, sometimes we need to fix the capacity to a specific value while still keeping track of the dual variables associated with capacity constraints. Setting {p,s,e}_nom_set allows for this while maintaining p_nom_extendable=True.

Mapping of symbols to component attributes
Symbol Attribute Type
\(G_{n,s}\) n.generators.p_nom_opt Decision variable
\(G^{\textrm{mod}}_{n,s}\) not stored Decision variable
\(\underline{G}_{n,s}\) n.generators.p_nom_min Parameter
\(\bar{G}_{n,s}\) n.generators.p_nom_max Parameter
\(\tilde{G}_{n,s}\) n.generators.p_nom_mod Parameter
\(\hat{G}_{n,s}\) n.generators.p_nom_set Parameter
Symbol Attribute Type
\(F_{l}\) n.links.p_nom_opt Decision variable
\(F^{\textrm{mod}}_{l}\) not stored Decision variable
\(\underline{F}_{l}\) n.links.p_nom_min Parameter
\(\bar{F}_{l}\) n.links.p_nom_max Parameter
\(\tilde{F}_{l}\) n.links.p_nom_mod Parameter
\(\hat{F}_{l}\) n.links.p_nom_set Parameter
Symbol Attribute Type
\(P_{l}\) n.lines.s_nom_opt Decision variable
\(P^{\textrm{mod}}_{l}\) not stored Decision variable
\(\underline{P}_{l}\) n.lines.s_nom_min Parameter
\(\bar{P}_{l}\) n.lines.s_nom_max Parameter
\(\tilde{P}_{l}\) n.lines.s_nom_mod Parameter
\(\hat{P}_{l}\) n.lines.s_nom_set Parameter
Symbol Attribute Type
\(P_{l}\) n.transformers.s_nom_opt Decision variable
\(P^{\textrm{mod}}_{l}\) not stored Decision variable
\(\underline{P}_{l}\) n.transformers.s_nom_min Parameter
\(\bar{P}_{l}\) n.transformers.s_nom_max Parameter
\(\tilde{P}_{l}\) n.transformers.s_nom_mod Parameter
\(\hat{P}_{l}\) n.transformers.s_nom_set Parameter
Symbol Attribute Type
\(E_{n,s}\) n.stores.e_nom_opt Decision variable
\(E^{\textrm{mod}}_{n,s}\) not stored Decision variable
\(\underline{E}_{n,s}\) n.stores.e_nom_min Parameter
\(\bar{E}_{n,s}\) n.stores.e_nom_max Parameter
\(\tilde{E}_{n,s}\) n.stores.e_nom_mod Parameter
\(\hat{E}_{n,s}\) n.stores.e_nom_set Parameter
Symbol Attribute Type
\(H_{n,s}\) n.storage_units.p_nom_opt Decision variable
\(H^{\textrm{mod}}_{n,s}\) not stored Decision variable
\(\underline{H}_{n,s}\) n.storage_units.p_nom_min Parameter
\(\bar{H}_{n,s}\) n.storage_units.p_nom_max Parameter
\(\tilde{H}_{n,s}\) n.storage_units.p_nom_mod Parameter
\(\hat{H}_{n,s}\) n.storage_units.p_nom_set Parameter

Examples¶

  • Modular Capacity Expansion


    Models discrete capacity additions with integer constraints on investment decisions considering predefined unit sizes.

    Go to example