Skip to content

Commit a533571

Browse files
committed
adding formulation pdf/tex
1 parent 709172a commit a533571

File tree

3 files changed

+161
-1
lines changed

3 files changed

+161
-1
lines changed

MODEL.pdf

161 KB
Binary file not shown.

MODEL.tex

+160
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
\documentclass{article}
2+
%
3+
\usepackage{fullpage}
4+
\usepackage{amsmath}
5+
\usepackage{amssymb}
6+
7+
\usepackage{IEEEtrantools}
8+
\usepackage{filecontents}
9+
10+
11+
\newcommand{\cT}{{\mathcal T}}
12+
\newcommand{\cS}{{\mathcal S}}
13+
\newcommand{\cG}{{\mathcal G}}
14+
\newcommand{\cL}{{\mathcal L}}
15+
\newcommand{\cW}{{\mathcal W}}
16+
\newcommand{\bbR}{{\mathbb R}}
17+
\newcommand{\uP}{\underline{P}}
18+
\newcommand{\oP}{\overline{P}}
19+
20+
\newcommand\mydescriptionopt{
21+
\IEEEsetlabelwidth{$g \in \cG_{\textit{off}}^0$]}
22+
\IEEEusemathlabelsep
23+
}
24+
\begin{document}
25+
26+
\section{Nomenclature}
27+
\subsection{Indices and Sets}
28+
\begin{IEEEdescription}[\mydescriptionopt]
29+
\item[$g \in \cG$] Set of thermal generators.
30+
\item[$g \in \cG_{\textit{on}}^0$] Set of thermal generators which are initially committed (on).
31+
\item[$g \in \cG_{\textit{off}}^0$] Set of thermal generators which are not initially committed (off).
32+
\item[$w \in \cW$] Set of renewable generators.
33+
\item[$t \in \cT$] Hourly time steps: $1, \ldots, T$, $T$ = {\tt time\_periods}
34+
\item[$l \in \cL_g$] Piecewise production cost intervals for thermal generator $g$: $1, \ldots, L_g$.
35+
\item[$s \in \cS_g$] Startup categories for thermal generator $g$, from hottest ($1$) to coldest ($S_g$): $1, \ldots, S_g$.
36+
\end{IEEEdescription}
37+
38+
\subsection{System Parameters}
39+
\begin{IEEEdescription}[\mydescriptionopt]
40+
\item[$D(t)$] Load (demand) at time $t$ (MW), {\tt demand}.
41+
\item[$R(t)$] Spinning reserve at time $t$ (MW), {\tt reserves}.
42+
\end{IEEEdescription}
43+
44+
\subsection{Thermal Generator Parameters}
45+
\begin{IEEEdescription}[\mydescriptionopt]
46+
\item[$CS_g^s$] Startup cost in category $s$ for generator $g$ (\$), {\tt startup['cost']}.
47+
\item[$CP_g^l$] Cost of operating at piecewise generation point $l$ for generator $g$ (MW), {\tt piecewise\_production['cost']}.
48+
\item[$DT_g$] Minimum down time for generator $g$ (h), {\tt time\_down\_minimum}.
49+
\item[$DT^0_g$] Number of time periods the unit has been off prior to the first time period for generator $g$, {\tt time\_down\_t0}.
50+
\item[$\oP_g$] Maximum power output for generator $g$ (MW), {\tt power\_output\_maximum}.
51+
\item[$\uP_g$] Minimum power output for generator $g$ (MW), {\tt power\_output\_minimum}.
52+
\item[$P_g^0$] Power output for generator $g$ (MW) in the time period prior to t=1, {\tt power\_output\_t0}.
53+
\item[$P_g^l$] Power level for piecewise generation point $l$ for generator $g$ (MW); $P^1_g = \uP_g$ and $P^{L_g}_g = \oP_g$, {\tt piecewise\_production['mw']}.
54+
\item[$RD_g$] Ramp-down rate for generator $g$ (MW/h), {\tt ramp\_down\_limit}.
55+
\item[$RU_g$] Ramp-up rate for generator $g$ (MW/h), {\tt ramp\_up\_limit}.
56+
\item[$SD_g$] Shutdown capability for generator $g$ (MW), {\tt ramp\_shutdown\_limit}.
57+
\item[$SU_g$] Startup capability for generator $g$ (MW), {\tt ramp\_startup\_limit}
58+
\item[$TS^s_g$] Time offline after which the startup category $s$ becomes active (h), {\tt startup['lag']}.
59+
\item[$UT_g$] Minimum up time for generator $g$ (h), {\tt time\_up\_minimum}.
60+
\item[$UT^0_g$] Number of time periods the unit has been on prior to the first time period for generator $g$, {\tt time\_up\_t0}.
61+
\item[$U_g^0$] Initial on/off status for generator $g$, $U_g^0=1$ for $g \in \cG_{\textit{on}}^0$, $U_g^0=0$ for $g \in \cG_{\textit{off}}^0$, {\tt unit\_on\_t0}.
62+
\item[$U_g$] Must-run status for generator $g$, {\tt must\_run}.
63+
\end{IEEEdescription}
64+
65+
\subsection{Renewable Generator Parameters}
66+
\begin{IEEEdescription}[\mydescriptionopt]
67+
\item[$\oP_w(t)$] Maximum renewable generation available from renewable generator $w$ at time $t$ (MW), {\tt power\_output\_maximum}.
68+
\item[$\uP_w(t)$] Minimum renewable generation available from renewable generator $w$ at time $t$ (MW), {\tt power\_output\_minimum}.
69+
\end{IEEEdescription}
70+
71+
72+
\subsection{Variables}
73+
\begin{IEEEdescription}[\mydescriptionopt]
74+
\item[$c_g(t)$] Cost of power produced above minimum for thermal generator $g$ at time $t$ (MW), $\in \bbR$.
75+
\item[$p_g(t)$] Power above minimum for thermal generator $g$ at time $t$ (MW), $\geq 0$.
76+
\item[$p_w(t)$] Renewable generation used from renewable generator $w$ at time $t$ (MW), $\geq 0$.
77+
\item[$r_g(t)$] Spinning reserves provided by thermal generator $g$ at time $t$ (MW), $\geq 0$.
78+
\item[$u_g(t)$] Commitment status of thermal generator $g$ at time $t$, $\in \{0,1\}$.
79+
\item[$v_g(t)$] Startup status of thermal generator $g$ at time $t$, $\in \{0,1\}$.
80+
\item[$w_g(t)$] Shutdown status of thermal generator $g$ at time $t$, $\in \{0,1\}$. \
81+
\item[$\delta^s_g(t)$] Startup in category $s$ for thermal generator $g$ at time $t$, $\in \{0,1\}$.
82+
\item[$\lambda_g^l(t)$] Fraction of power from piecewise generation point $l$ for generator $g$ at time $t$ (MW), $\in [0,1]$.
83+
\
84+
\end{IEEEdescription}
85+
86+
\section{Model Description}
87+
Below we describe the unit commitment model given by~\cite{morales2013tight}, with the piecewise production cost description from~\cite{sridhar2013locally}.
88+
The unit commitment problem can then be formulated as:
89+
{\allowdisplaybreaks
90+
\begin{align}
91+
& \text{min } \sum_{g \in \cG} \sum_{t \in \cT} \left( c_g(t) + CP_g^1 \, u_g(t) + \sum_{s = 1}^{S_g} \left( CS^s_g \delta^s(t) \right) \right) \label{eq:obj} %\tag{UC} %\\
92+
%\text{subject to } & & \nonumber
93+
\end{align}
94+
subject to:
95+
\begin{align}
96+
& \sum_{g \in \cG} \left( p_g(t) + \uP_g u_g(t) \right) + \sum_{w\in\cW} p_w(t) = D(t) & \hspace{5cm} \forall t \in \cT \label{eq:UCDemand} \\
97+
& \sum_{g \in \cG} r_g(t) \geq R(t) & \forall t \in \cT \label{eq:UCReserves}
98+
\end{align}
99+
\begin{align}
100+
& \sum_{t=1}^{\min\{UT_g - UT_g^0, T\}} (u_g(t) - 1) = 0 & \hspace{3cm} \forall g \in \cG_{\textit{on}}^0 \label{eq:initialUpRequirement} \\
101+
& \sum_{t=1}^{\min\{DT_g - DT_g^0, T\}} u_g(t) = 0 & \forall g \in \cG_{\textit{off}}^0 \label{eq:initialDownRequirement} \\
102+
& u_g(1) - U_g^0 = v_g(1) - w_g(1) & \forall g \in \cG \label{eq:LogicalInitial} \\
103+
& \sum_{s=1}^{S_g-1} \sum_{t=\max\{1, TS^{s+1}_g - DT^0_g + 1\}}^{TS^{s+1}_g -1} \delta^s_g(t) = 0 & \forall g \in \cG \label{eq:STIInit}\\
104+
& p_g(1) + r_g(1) - U_g^0(P_g^0-\uP_g) \leq RU_g & \forall g \in \cG \label{eq:RampUpInit} \\
105+
& U_g^0(P_g^0-\uP_g) - p_g(1) \leq RD_g & \forall g \in \cG \label{eq:RampDownInit} \\
106+
& U_g^0(P_g^0-\uP_g) \leq (\oP_g - \uP_g) U_g^0 - \max\{(\oP_g - SD_g),0\} w_g(1) & \forall g \in \cG \label{eq:MaxOutput2Init}
107+
\end{align}
108+
\begin{align}
109+
& u_g(t) \geq U_g & \hspace{1cm} \forall t \in \cT, \, \forall g \in \cG \label{eq:MustRun} \\
110+
& u_g(t) - u_g(t-1) = v_g(t) - w_g(t) & \forall t \in \cT\setminus\{1\}, \, \forall g \in \cG \label{eq:Logical} \\
111+
& \sum_{i= t-UT_g + 1}^t v_g(i) \leq u_g(t) & \forall t \in \{UT_g, \ldots, T\}, \, \forall g \in \cG \label{eq:Startup} \\
112+
& \sum_{i= t-DT_g + 1}^t w_g(i) \leq 1 - u_g(t) & \forall t \in \{DT_g, \ldots, T\}, \, \forall g \in \cG \label{eq:Shutdown} \\
113+
& \delta^s_g(t) \leq \sum_{i = TS^s_g}^{TS^{s+1}_g-1} w_g(t-i) & \forall t \in \{TS^{s+1}_g,\ldots,T\},\,\forall s \in \cS_g\!\setminus\!\{S_g\},\, \forall g \in \cG \label{eq:STISelect} \\
114+
& v_g(t) = \sum_{s = 1}^{S_g} \delta^s_g(t) & \forall t \in \cT,\, \forall g \in \cG \label{eq:STILink}
115+
\end{align}
116+
\begin{align}
117+
& p_g(t) + r_g(t) \leq (\oP_g - \uP_g) u_g(t) - \max\{(\oP_g - SU_g),0\} v_g(t) & \forall t \in \cT, \, \forall g \in \cG \label{eq:MaxOutput1} \\
118+
& p_g(t) + r_g(t) \leq (\oP_g - \uP_g) u_g(t) - \max\{(\oP_g - SD_g),0\} w_g(t+1) & \forall t \in \cT\setminus \{T\}, \, \forall g \in \cG \label{eq:MaxOutput2} \\
119+
& p_g(t) + r_g(t) - p_g(t-1) \leq RU_g & \forall t \in \cT\setminus\{1\}, \, \forall g \in \cG \label{eq:RampUp} \\
120+
& p_g(t-1) - p_g(t) \leq RD_g & \forall t \in \cT\setminus\{1\}, \, \forall g \in \cG \label{eq:RampDown}
121+
\end{align}
122+
\begin{align}
123+
& p_g(t) = \sum_{l \in \cL_g} (P_g^l - P_g^1) \lambda_g^l(t) &\hspace{5cm} \forall t \in \cT, \, \forall g \in \cG \label{eq:PiecewiseParts} \\
124+
& c_g(t) = \sum_{l \in \cL_g} (CP_g^l - CP_g^1) \lambda_g^l(t) & \forall t \in \cT, \, \forall g \in \cG \label{eq:PiecewisePartsCost} \\
125+
& u_g(t) = \sum_{l \in \cL_g} \lambda_g^l(t) & \forall t \in \cT, \forall g \in \cG \label{eq:PiecewiseLimits}
126+
\end{align}
127+
\begin{align}
128+
& \uP_w(t) \leq p_w(t) \leq \oP_w(t) &\hspace{6cm} \forall t \in \cT, \, \forall w \in \cW \label{eq:WindLimit}
129+
\end{align}
130+
}%
131+
Note that in constraints~\eqref{eq:initialUpRequirement}, \eqref{eq:initialDownRequirement}, and \eqref{eq:STIInit}, we use the convention that empty sums are $0$.
132+
133+
%% add the bibtex
134+
\begin{filecontents*}{MODEL.bib}
135+
@article{morales2013tight,
136+
title={Tight and compact {MILP} formulation for the thermal unit commitment problem},
137+
author={Morales-Espa{\~n}a, G. and Latorre, J. M. and Ramos, A.},
138+
journal={IEEE Transactions on Power Systems},
139+
volume={28},
140+
number={4},
141+
pages={4897--4908},
142+
year={2013},
143+
publisher={IEEE}
144+
}
145+
@article{sridhar2013locally,
146+
title={Locally ideal formulations for piecewise linear functions with indicator variables},
147+
author={Sridhar, Srikrishna and Linderoth, Jeff and Luedtke, James},
148+
journal={Operations Research Letters},
149+
volume={41},
150+
number={6},
151+
pages={627--632},
152+
year={2013},
153+
publisher={Elsevier}
154+
}
155+
\end{filecontents*}
156+
157+
\bibliographystyle{acm}
158+
\bibliography{MODEL}
159+
160+
\end{document}

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Power Grid Lib - Unit Commitment
22

3-
This benchmark library is curated and maintained by the [IEEE PES Task Force on Benchmarks for Validation of Emerging Power System Algorithms](https://power-grid-lib.github.io/) and is designed to evaluate a well established version of the the Unit Commitment problem. Specifically, these cases are designed for benchmarking algorithms that solve the following the Mixed-Integer Linear Program described in the formulation [PDF document](tbd).
3+
This benchmark library is curated and maintained by the [IEEE PES Task Force on Benchmarks for Validation of Emerging Power System Algorithms](https://power-grid-lib.github.io/) and is designed to evaluate a well established version of the the Unit Commitment problem. Specifically, these cases are designed for benchmarking algorithms that solve the following the Mixed-Integer Linear Program described in the formulation [PDF document](MODEL.pdf).
44

55
A detailed description of this mathematical model is available [here](tbd). All of the cases files are curated in a json-based data format. Open-source reference implementations are available in [TBD](.) and [TBD](.).
66

0 commit comments

Comments
 (0)