Model Formulation
E4ST.setup_model — Methodsetup_model(config, data) -> modelSets 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. 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
| Name | Constraint | Symbol | Unit | Description |
|---|---|---|---|---|
| $C_{PB_{b,y,h}}$ | $P_{G_{b,y,h}} - P_{S_{b,y,h}} = P_{F_{b,y,h}}$ | :cons_pbal | 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\}$ | :cons_pcap_gen_prebuild | MW | Constrain the power generation capacity to be zero before the start year. |
| $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 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: