diff --git a/analysis/scripts/mga_fft_example.py b/analysis/scripts/mga_fft_example.py index 14e2bee..58687b6 100644 --- a/analysis/scripts/mga_fft_example.py +++ b/analysis/scripts/mga_fft_example.py @@ -118,7 +118,7 @@ ax[0].set_ylim(min(res.F[:, 1]), 60) # ax[1].legend(loc='upper left') -style = "Simple, tail_width=0.5, head_width=4, head_length=8" +style = "Simple, tail_width=0.5, head_width=10, head_length=15" arrows = [] prev = X_select[0] for i, (c, (x, y)) in enumerate(zip(color1, X_select)): diff --git a/docs/3-osier/33-dispatch-model.tex b/docs/3-osier/33-dispatch-model.tex index f732fe7..f01b4fc 100644 --- a/docs/3-osier/33-dispatch-model.tex +++ b/docs/3-osier/33-dispatch-model.tex @@ -19,25 +19,24 @@ \subsection{Optimal dispatch} \label{eq:dispatch-objective} &\left(\sum_t^T\sum_g^G \left[C_{g,t}^{fuel} + C_{g,t}^{vom}\right]x_{g,t} \right)+\left(\sum_t^T\sum_g^S x_{g,t}c_{g,t}\pi\right)\\ - \intertext{such that,} - \intertext{1. The generation meets demand, less the amount of energy stored or curtailed, + \intertext{such that generation meets demand, less the amount of energy stored or curtailed, within a user-specified tolerance (undersupply and oversupply),} \left[\sum_g^Gx_{g,t}-\sum_g^S c_{g,t}\right] &\geq \left(1-\text{undersupply}\right)\text{D}_t\quad \forall \quad t \in T, S, \\ \left[\sum_g^Gx_{g,t}-\sum_g^S c_{g,t}\right] &\leq \left(1+\text{oversupply}\right)\text{D}_t \quad \forall \quad t \in T, S, - \intertext{2. A generator's production, $x_{g}$ does not exceed its capacity at any time, $t$} + \intertext{a generator's production, $x_{g}$ does not exceed its capacity at any time, $t$} x_{g,t} &\leq \textbf{CAP}_{g}\Delta \tau \quad \forall \quad g,t \in G,T - \intertext{3. A generator's ramping rate is never exceeded,} + \intertext{a generator's ramping rate is never exceeded,} \frac{x_{r,t} - x_{r,t-1}}{\Delta \tau} = \Delta P_{r,t} &\leq \rho^{up}_g\textbf{CAP}_g\Delta\tau \quad \forall \quad r,t \in R, T,\\ \frac{x_{r,t} - x_{r,t-1}}{\Delta \tau} = \Delta P_{r,t} &\leq -\rho^{down}_g\textbf{CAP}_g\Delta\tau \quad \forall \quad r,t \in R, T, - \intertext{4. Storage capacity for each storage technology is never exceeded} + \intertext{storage capacity for each storage technology is never exceeded} \textbf{SOC}_{s,t} &\leq \textbf{CAP}^S_{s} \quad \forall \quad s,t \in S,T, - \intertext{5. Storage discharge cannot exceed stored energy.} + \intertext{storage discharge cannot exceed stored energy.} x_{s,t} &\leq \textbf{SOC}_{s,t} \quad \forall \quad s,t \in S,T, - \intertext{6. Storage charge rate cannot exceed unit capacity} + \intertext{storage charge rate cannot exceed unit capacity} c_{s,t} &\leq \textbf{CAP}_{s}\Delta \tau \quad \forall \quad s,t \in S,T, \intertext{where,} G &= \text{ the set of all generating technologies},\nonumber\\ @@ -128,8 +127,8 @@ \subsection{Hierarchical dispatch} Since this algorithm is myopic, solution optimality is not guaranteed. Higher penetration of renewable energy and energy storage increases the influence of this myopia due to the unpredictability of these resources. Thus, this approach -may be more ``realistic'' than an truly optimal dispatch. Additionally, this -method is faster from reduced problem setup. Section +may be more ``realistic'' than an truly optimal dispatch (e.g., as a ``real-time'' dispatch model). +Additionally, this method is faster from reduced problem setup. Section \ref{section:dispatch_benchmark} demonstrates these differences. Figure \ref{fig:hierarchy_algorithm} illustrates the flow of the algorithm. diff --git a/docs/3-osier/35-limitations.tex b/docs/3-osier/35-limitations.tex index 64fdd4f..5015a8b 100644 --- a/docs/3-osier/35-limitations.tex +++ b/docs/3-osier/35-limitations.tex @@ -5,8 +5,9 @@ \section{Limitations of \ac{osier}} and scope. \begin{enumerate} - \item \ac{osier} has a limited time horizon and is not currently set up to - optimize multiple decades into the future. + \item \ac{osier} is currently limited to optimizing a single future year. + \item Capacity expansion currently assumes ``green-field'' construction and + may not respect existing capacity. \item \ac{osier} does not model interactions between the environment and the energy system. Therefore, temperature feedbacks and geoengineering technologies cannot be modeled adequately. diff --git a/docs/figures/elasticity.pgf b/docs/figures/elasticity.pgf index 67ae13d..bddaf6f 100644 --- a/docs/figures/elasticity.pgf +++ b/docs/figures/elasticity.pgf @@ -21,10 +21,13 @@ %% Matplotlib used the following preamble %% \def\mathdefault#1{#1} %% \everymath=\expandafter{\the\everymath\displaystyle} +%% \IfFileExists{scrextend.sty}{ +%% \usepackage[fontsize=10.000000pt]{scrextend} +%% }{ +%% \renewcommand{\normalsize}{\fontsize{10.000000}{12.000000}\selectfont} +%% \normalsize +%% } %% -%% \ifdefined\pdftexversion\else % non-pdftex case. -%% \usepackage{fontspec} -%% \fi %% \makeatletter\@ifpackageloaded{underscore}{}{\usepackage[strings]{underscore}}\makeatother %% \begingroup% diff --git a/docs/figures/mga-fft-example.pgf b/docs/figures/mga-fft-example.pgf index 627ed1e..b6774ca 100644 --- a/docs/figures/mga-fft-example.pgf +++ b/docs/figures/mga-fft-example.pgf @@ -41375,12 +41375,12 @@ \pgfsetstrokecolor{currentstroke}% \pgfsetdash{}{0pt}% \pgfpathmoveto{\pgfqpoint{8.323980in}{2.106359in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.949487in}{3.779158in}}{\pgfqpoint{13.574994in}{5.451957in}}% -\pgfpathlineto{\pgfqpoint{13.561934in}{5.472455in}}% -\pgfpathquadraticcurveto{\pgfqpoint{13.616253in}{5.490595in}}{\pgfqpoint{13.670571in}{5.508735in}}% -\pgfpathquadraticcurveto{\pgfqpoint{13.631179in}{5.467168in}}{\pgfqpoint{13.591786in}{5.425601in}}% -\pgfpathlineto{\pgfqpoint{13.578726in}{5.446100in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.953219in}{3.773301in}}{\pgfqpoint{8.327711in}{2.100502in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.908491in}{3.753038in}}{\pgfqpoint{13.493002in}{5.399717in}}% +\pgfpathlineto{\pgfqpoint{13.457553in}{5.455355in}}% +\pgfpathquadraticcurveto{\pgfqpoint{13.564062in}{5.482045in}}{\pgfqpoint{13.670571in}{5.508735in}}% +\pgfpathquadraticcurveto{\pgfqpoint{13.601377in}{5.423478in}}{\pgfqpoint{13.532183in}{5.338221in}}% +\pgfpathlineto{\pgfqpoint{13.496734in}{5.393860in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.912222in}{3.747181in}}{\pgfqpoint{8.327711in}{2.100502in}}% \pgfpathlineto{\pgfqpoint{8.323980in}{2.106359in}}% \pgfpathlineto{\pgfqpoint{8.323980in}{2.106359in}}% \pgfpathclose% @@ -41398,12 +41398,12 @@ \pgfsetstrokecolor{currentstroke}% \pgfsetdash{}{0pt}% \pgfpathmoveto{\pgfqpoint{13.674386in}{5.503690in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.594136in}{3.063020in}}{\pgfqpoint{7.513886in}{0.622349in}}% -\pgfpathlineto{\pgfqpoint{7.528980in}{0.603299in}}% -\pgfpathquadraticcurveto{\pgfqpoint{7.476810in}{0.579681in}}{\pgfqpoint{7.424639in}{0.556063in}}% -\pgfpathquadraticcurveto{\pgfqpoint{7.459559in}{0.601453in}}{\pgfqpoint{7.494478in}{0.646842in}}% -\pgfpathlineto{\pgfqpoint{7.509573in}{0.627792in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.589823in}{3.068463in}}{\pgfqpoint{13.670073in}{5.509133in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.632233in}{3.093206in}}{\pgfqpoint{7.590079in}{0.682721in}}% +\pgfpathlineto{\pgfqpoint{7.631050in}{0.631014in}}% +\pgfpathquadraticcurveto{\pgfqpoint{7.527844in}{0.593538in}}{\pgfqpoint{7.424639in}{0.556063in}}% +\pgfpathquadraticcurveto{\pgfqpoint{7.484717in}{0.647968in}}{\pgfqpoint{7.544795in}{0.739872in}}% +\pgfpathlineto{\pgfqpoint{7.585766in}{0.688164in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.627920in}{3.098649in}}{\pgfqpoint{13.670073in}{5.509133in}}% \pgfpathlineto{\pgfqpoint{13.674386in}{5.503690in}}% \pgfpathlineto{\pgfqpoint{13.674386in}{5.503690in}}% \pgfpathclose% @@ -41421,12 +41421,12 @@ \pgfsetstrokecolor{currentstroke}% \pgfsetdash{}{0pt}% \pgfpathmoveto{\pgfqpoint{7.423374in}{0.557880in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.529293in}{2.797438in}}{\pgfqpoint{13.635213in}{5.036997in}}% -\pgfpathlineto{\pgfqpoint{13.620997in}{5.056712in}}% -\pgfpathquadraticcurveto{\pgfqpoint{13.674181in}{5.077937in}}{\pgfqpoint{13.727364in}{5.099162in}}% -\pgfpathquadraticcurveto{\pgfqpoint{13.690427in}{5.055406in}}{\pgfqpoint{13.653490in}{5.011649in}}% -\pgfpathlineto{\pgfqpoint{13.639274in}{5.031364in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.533355in}{2.791805in}}{\pgfqpoint{7.427436in}{0.552247in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.489862in}{2.769006in}}{\pgfqpoint{13.556349in}{4.980131in}}% +\pgfpathlineto{\pgfqpoint{13.517764in}{5.033643in}}% +\pgfpathquadraticcurveto{\pgfqpoint{13.622564in}{5.066403in}}{\pgfqpoint{13.727364in}{5.099162in}}% +\pgfpathquadraticcurveto{\pgfqpoint{13.663180in}{5.010075in}}{\pgfqpoint{13.598996in}{4.920987in}}% +\pgfpathlineto{\pgfqpoint{13.560411in}{4.974498in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.493923in}{2.763373in}}{\pgfqpoint{7.427436in}{0.552247in}}% \pgfpathlineto{\pgfqpoint{7.423374in}{0.557880in}}% \pgfpathlineto{\pgfqpoint{7.423374in}{0.557880in}}% \pgfpathclose% @@ -41444,12 +41444,12 @@ \pgfsetstrokecolor{currentstroke}% \pgfsetdash{}{0pt}% \pgfpathmoveto{\pgfqpoint{13.723390in}{5.106399in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.777679in}{4.499271in}}{\pgfqpoint{7.831967in}{3.892144in}}% -\pgfpathlineto{\pgfqpoint{7.836873in}{3.868339in}}% -\pgfpathquadraticcurveto{\pgfqpoint{7.779659in}{3.870727in}}{\pgfqpoint{7.722445in}{3.873116in}}% -\pgfpathquadraticcurveto{\pgfqpoint{7.774052in}{3.897933in}}{\pgfqpoint{7.825659in}{3.922751in}}% -\pgfpathlineto{\pgfqpoint{7.830565in}{3.898945in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.776277in}{4.506073in}}{\pgfqpoint{13.721989in}{5.113200in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.825288in}{4.509084in}}{\pgfqpoint{7.927186in}{3.911769in}}% +\pgfpathlineto{\pgfqpoint{7.940503in}{3.847155in}}% +\pgfpathquadraticcurveto{\pgfqpoint{7.831474in}{3.860136in}}{\pgfqpoint{7.722445in}{3.873116in}}% +\pgfpathquadraticcurveto{\pgfqpoint{7.817456in}{3.928150in}}{\pgfqpoint{7.912466in}{3.983185in}}% +\pgfpathlineto{\pgfqpoint{7.925784in}{3.918570in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.823886in}{4.515885in}}{\pgfqpoint{13.721989in}{5.113200in}}% \pgfpathlineto{\pgfqpoint{13.723390in}{5.106399in}}% \pgfpathlineto{\pgfqpoint{13.723390in}{5.106399in}}% \pgfpathclose% @@ -41467,12 +41467,12 @@ \pgfsetstrokecolor{currentstroke}% \pgfsetdash{}{0pt}% \pgfpathmoveto{\pgfqpoint{7.721072in}{3.878290in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.637039in}{4.688421in}}{\pgfqpoint{13.553006in}{5.498553in}}% -\pgfpathlineto{\pgfqpoint{13.546500in}{5.521972in}}% -\pgfpathquadraticcurveto{\pgfqpoint{13.603744in}{5.523461in}}{\pgfqpoint{13.660988in}{5.524950in}}% -\pgfpathquadraticcurveto{\pgfqpoint{13.611180in}{5.496697in}}{\pgfqpoint{13.561372in}{5.468444in}}% -\pgfpathlineto{\pgfqpoint{13.554865in}{5.491862in}}% -\pgfpathquadraticcurveto{\pgfqpoint{10.638898in}{4.681730in}}{\pgfqpoint{7.722931in}{3.871599in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.590199in}{4.675408in}}{\pgfqpoint{13.459326in}{5.472526in}}% +\pgfpathlineto{\pgfqpoint{13.441666in}{5.536091in}}% +\pgfpathquadraticcurveto{\pgfqpoint{13.551327in}{5.530520in}}{\pgfqpoint{13.660988in}{5.524950in}}% +\pgfpathquadraticcurveto{\pgfqpoint{13.569917in}{5.463610in}}{\pgfqpoint{13.478845in}{5.402271in}}% +\pgfpathlineto{\pgfqpoint{13.461185in}{5.465835in}}% +\pgfpathquadraticcurveto{\pgfqpoint{10.592058in}{4.668717in}}{\pgfqpoint{7.722931in}{3.871599in}}% \pgfpathlineto{\pgfqpoint{7.721072in}{3.878290in}}% \pgfpathlineto{\pgfqpoint{7.721072in}{3.878290in}}% \pgfpathclose% diff --git a/docs/figures/social_max.pgf b/docs/figures/social_max.pgf index adecece..24659b7 100644 --- a/docs/figures/social_max.pgf +++ b/docs/figures/social_max.pgf @@ -21,10 +21,13 @@ %% Matplotlib used the following preamble %% \def\mathdefault#1{#1} %% \everymath=\expandafter{\the\everymath\displaystyle} +%% \IfFileExists{scrextend.sty}{ +%% \usepackage[fontsize=10.000000pt]{scrextend} +%% }{ +%% \renewcommand{\normalsize}{\fontsize{10.000000}{12.000000}\selectfont} +%% \normalsize +%% } %% -%% \ifdefined\pdftexversion\else % non-pdftex case. -%% \usepackage{fontspec} -%% \fi %% \makeatletter\@ifpackageloaded{underscore}{}{\usepackage[strings]{underscore}}\makeatother %% \begingroup%