Model Formulation
E4ST.setup_model
— Methodsetup_model(config, data) -> model
Sets up a JuMP Model for E4ST using config
and data
.
Parameters
Name | Symbol | Letter |
---|---|---|
$N_G$ | :num_gen | Number of generators |
$N_B$ | :num_bus | Number of buses |
$N_L$ | :num_branch | Number of branches |
$G = \{1,2,...,N_G \}$ | N/A | Set of generator indices |
$B = \{1,2,...,N_B \}$ | N/A | Set of bus indices |
$L = \{1,2,...,N_L \}$ | N/A | Set of branch indices |
$g \in G$ | :gen_idx | Generator index |
$b \in B$ | :bus_idx | Bus index |
$l \in L$ | :branch_idx | Branch index |
$y \in Y$ | :year_idx | Year index |
$y_{S_g} \in Y$ | :yearonidx | Starting Year index for generator g |
Variables
These are the decision variables to be optimized over. Can be accessed by model[symbol]
Name | Symbol | Unit | Description |
---|---|---|---|
$\theta_{b,y,h}$ | :θ_bus | Radians | Hourly voltage angle of each bus. Reference buses fixed to 0.0 |
$P_{G_{g,y,h}}$ | :pgen_gen | MW | Hourly avg. power generated by each generator |
$P_{C_{g,y}}$ | :pcap_gen | MW | Annual power generation capacity of each generator |
$P_{S_{b,y,h}}$ | :plserv_bus | MW | Hourly avg. power served to each bus |
Expressions
Expressions are calculated as linear combinations of variables. Expressions can be 1D, 2D, or 3D arrays or sparse arrays where 1D is Y, 2D is NxY, and 3D is NxYxH. Can be accessed by model[symbol]
Name | Symbol | Unit | Description |
---|---|---|---|
$P_{F_{l,y,h}}$ | :pflow_branch | MW | Hourly avg. power flowing through each branch |
$P_{F_{b,y,h}}$ | :pflow_bus | MW | Hourly avg. net power flowing out of each bus |
$P_{U_{b,y,h}}$ | :plcurt_bus | MW | Hourly avg. power curtailed at each bus |
$P_{G_{b,y,h}}$ | :pgen_bus | MW | Hourly avg. power generated at each bus |
Constraints
Constraints can be 1D, 2D, 3D, or 4D arrays or sparse arrays where 1D is Y, 2D is NxY, 3D is NxYxH, 4D is NxYxIxH
Name | Constraint | Symbol | Unit | Description |
---|---|---|---|---|
$C_{PB_{b,y,h}}$ | $P_{G_{b,y,h}} - P_{S_{b,y,h}} \geq P_{F_{b,y,h}}$ | :cons_pbal_geq | MW | Constrain 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_leq | MW | Constrain 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_min | MW | Constrain 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_max | MW | Constrain 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_min | MW | Constrain 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_max | MW | Constrain 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_min | MW | Constrain 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_max | MW | Constrain 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_pos | MW | Constrain 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_neg | MW | Constrain 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/A | MW | Constrain 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_noadd | MW | Constrain 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_exog | MW | Constrain unbuilt exogenous generators (with build_type ∈ (real, exog) ) to be built to pcap_max 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: