Model Formulation

E4ST.setup_modelMethod
setup_model(config, data) -> model

Sets up a JuMP Model for E4ST using config and data.

Parameters

NameSymbolLetter
$N_G$:num_genNumber of generators
$N_B$:num_busNumber of buses
$N_L$:num_branchNumber of branches
$G = \{1,2,...,N_G \}$N/ASet of generator indices
$B = \{1,2,...,N_B \}$N/ASet of bus indices
$L = \{1,2,...,N_L \}$N/ASet of branch indices
$g \in G$:gen_idxGenerator index
$b \in B$:bus_idxBus index
$l \in L$:branch_idxBranch index
$y \in Y$:year_idxYear index
$y_{S_g} \in Y$:yearonidxStarting Year index for generator g

Variables

These are the decision variables to be optimized over. Can be accessed by model[symbol]

NameSymbolUnitDescription
$\theta_{b,y,h}$:θ_busRadiansHourly voltage angle of each bus. Reference buses fixed to 0.0
$P_{G_{g,y,h}}$:pgen_genMWHourly avg. power generated by each generator
$P_{C_{g,y}}$:pcap_genMWAnnual power generation capacity of each generator
$P_{S_{b,y,h}}$:plserv_busMWHourly avg. power served to each bus

Expressions

Expressions are calculated as linear combinations of variables. Can be accessed by model[symbol]

NameSymbolUnitDescription
$P_{F_{l,y,h}}$:pflow_branchMWHourly avg. power flowing through each branch
$P_{F_{b,y,h}}$:pflow_busMWHourly avg. net power flowing out of each bus
$P_{U_{b,y,h}}$:plcurt_busMWHourly avg. power curtailed at each bus
$P_{G_{b,y,h}}$:pgen_busMWHourly avg. power generated at each bus

Constraints

NameConstraintSymbolUnitDescription
$C_{PB_{b,y,h}}$$P_{G_{b,y,h}} - P_{S_{b,y,h}} \geq P_{F_{b,y,h}}$:cons_pbal_geqMWConstrain the power flow at each bus
$C_{PB_{b,y,h}}$$P_{G_{b,y,h}} - P_{S_{b,y,h}} \leq P_{F_{b,y,h}}$:cons_pbal_leqMWConstrain the power flow at each bus
$C_{PG_{g,y,h}}^{\text{min}}$$P_{G_{g,y,h}} \geq P_{C_{b,y}}^{\text{min}}$:cons_pgen_minMWConstrain the generated power to be above minimum capacity factor, if given.
$C_{PG_{g,y,h}}^{\text{max}}$$P_{G_{g,y,h}} \leq P_{C_{b,y}}^{\text{max}}$:cons_pgen_maxMWConstrain the generated power to be below min(availability factor, max capacity factor)
$C_{PS_{g,y,h}}^{\text{min}}$$P_{S_{b,y,h}} \geq 0$:cons_plserv_minMWConstrain the served power to be greater than zero
$C_{PS_{g,y,h}}^{\text{max}}$$P_{S_{b,y,h}} \leq P_{D_{b,y,h}}$:cons_plserv_maxMWConstrain the served power to be less than or equal to load power.
$C_{PC_{g,y}}^{\text{min}}$$P_{C_{g,y}} \geq P_{C_{g,y}}^{\text{min}}$:cons_pcap_minMWConstrain the power generation capacity to be less than or equal to its minimum.
$C_{PC_{g}}^{\text{max}}$$P_{C_{g,y}} \leq P_{C_{g,y}}^{\text{max}}\quad \forall y = y_{S_g}$:cons_pcap_maxMWConstrain the power generation capacity to be less than or equal to its minimum for its starting year.
$C_{PL_{l,y,h}}^{+}$$P_{F_{l,y,h}} \leq P_{L_{l,y,h}}^{\text{max}}$:cons_branch_pflow_posMWConstrain the branch power flow to be less than or equal to its maximum.
$C_{PL_{l,y,h}}^{-}$$-P_{F_{l,y,h}} \leq P_{L_{l,y,h}}^{\text{max}}$:cons_branch_pflow_negMWConstrain the negative branch power flow to be less than or equal to its maximum.
$C_{PCGPB_{g,y}}$$P_{C_{g,y}} = 0 \quad \forall \left\{ y<y_{S_g} \right\}$N/AMWConstrain the power generation capacity to be zero before the start year. Implemented by fixing the variable.
$C_{PCGNA_{g,y}}$$P_{C_{g,y+1}} <= P_{C_{g,y}} \quad \forall \left\{ y >= y_{S_g} \right\}$:cons_pcap_gen_noaddMWConstrain the power generation capacity to be non-increasing after the start year. Generation capacity is only added when building new generators in their start year.
$C_{PCGE_{g,y}}$$P_{C_{g,y}} == P_{C_{0_{g}}} \quad \forall \left\{ first y >= y_{S_g} \right\}$:cons_pcap_gen_exogMWConstrain unbuilt exogenous generators to be built to pcap0 in the first year after year_on.

Objective

The objective is a single expression that can be accessed via model[:obj]. In general, we add things to the objective via:

source