Compare commits
18 Commits
db8a527949
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2da11abaf1 | |||
| 82ea6641c2 | |||
|
|
d3b2bdf41c | ||
|
|
7132aaa29a | ||
|
|
092f2ae4e6 | ||
|
|
8df0c73bb4 | ||
|
|
74729f6b85 | ||
| 26807eae22 | |||
| 1d1436612c | |||
| 5c365ebd88 | |||
|
|
8a219d0d19 | ||
| 11ae0e1949 | |||
| 615f9486bc | |||
| fecf1492fb | |||
| 56d56446fa | |||
| bc33b0368d | |||
| 465bcf7d8b | |||
| 96e4ed042c |
6254
Reports/Extended_Abstract/IEEEtran.cls
Normal file
BIN
Reports/Extended_Abstract/extended_abstract 2.synctex.gz
Normal file
BIN
Reports/Extended_Abstract/extended_abstract 3.synctex.gz
Normal file
BIN
Reports/Extended_Abstract/extended_abstract 4.synctex.gz
Normal file
BIN
Reports/Extended_Abstract/extended_abstract 5.synctex.gz
Normal file
BIN
Reports/Extended_Abstract/extended_abstract 6.synctex.gz
Normal file
46
Reports/Extended_Abstract/extended_abstract.aux
Normal file
@@ -0,0 +1,46 @@
|
||||
\relax
|
||||
\citation{noauthor_geliberaliseerde_nodate}
|
||||
\citation{noauthor_fcr_nodate,noauthor_afrr_nodate,noauthor_mfrr_nodate}
|
||||
\citation{elia_tariffs_2022}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {I}Introduction}{1}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {II}Background}{1}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {II-A}}Electricity Market}{1}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {II-B}}Generative Modeling}{1}{}\protected@file@percent }
|
||||
\citation{goodfellow_generative_2014,kingma_auto-encoding_2022,rezende_variational_2015,sohl-dickstein_deep_2015}
|
||||
\citation{koenker_regression_1978}
|
||||
\citation{gneiting_strictly_2007}
|
||||
\citation{sohl-dickstein_deep_2015}
|
||||
\citation{ho_denoising_2020}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {II-C}}Battery Optimization Policies}{2}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {II-C}1}Baseline Policies}{2}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {II-C}2}Policies Based on NRV Generations}{2}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {III}Results \& Discussion}{2}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-A}}NRV Modeling}{2}{}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Example of a reconstructed cumulative distribution function of the NRV for a certain quarter.}}{2}{}\protected@file@percent }
|
||||
\newlabel{fig:cdf_example}{{1}{2}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Comparison between autoregressive and non-autoregressive models. The samples are generated using a linear model using all input features.}}{3}{}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Autoregressive model}}}{3}{}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Non-autoregressive model}}}{3}{}\protected@file@percent }
|
||||
\newlabel{fig:autoregressive_vs_non-autoregressive}{{2}{3}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Intermediate steps of the diffusion model for example 864 from the test set. The confidence intervals shown in the plots are made using 100 samples.}}{3}{}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_intermediates}{{3}{3}}
|
||||
\bibstyle{IEEEtran}
|
||||
\bibdata{../Thesis/references}
|
||||
\bibcite{noauthor_geliberaliseerde_nodate}{{1}{}{{}}{{}}}
|
||||
\bibcite{noauthor_fcr_nodate}{{2}{}{{}}{{}}}
|
||||
\bibcite{noauthor_afrr_nodate}{{3}{}{{}}{{}}}
|
||||
\bibcite{noauthor_mfrr_nodate}{{4}{}{{}}{{}}}
|
||||
\bibcite{elia_tariffs_2022}{{5}{}{{}}{{}}}
|
||||
\bibcite{goodfellow_generative_2014}{{6}{}{{}}{{}}}
|
||||
\bibcite{kingma_auto-encoding_2022}{{7}{}{{}}{{}}}
|
||||
\bibcite{rezende_variational_2015}{{8}{}{{}}{{}}}
|
||||
\bibcite{sohl-dickstein_deep_2015}{{9}{}{{}}{{}}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-B}}Policy Evaluation}{4}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {IV}Conclusion}{4}{}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Comparison of the profit made by the different policies and baselines using the test set.}}{4}{}\protected@file@percent }
|
||||
\newlabel{fig:profit_comparison}{{4}{4}}
|
||||
\bibcite{koenker_regression_1978}{{10}{}{{}}{{}}}
|
||||
\bibcite{gneiting_strictly_2007}{{11}{}{{}}{{}}}
|
||||
\bibcite{ho_denoising_2020}{{12}{}{{}}{{}}}
|
||||
\providecommand\NAT@force@numbers{}\NAT@force@numbers
|
||||
\gdef \@abspage@last{5}
|
||||
83
Reports/Extended_Abstract/extended_abstract.bbl
Normal file
@@ -0,0 +1,83 @@
|
||||
% Generated by IEEEtran.bst, version: 1.14 (2015/08/26)
|
||||
\begin{thebibliography}{10}
|
||||
\providecommand{\url}[1]{#1}
|
||||
\csname url@samestyle\endcsname
|
||||
\providecommand{\newblock}{\relax}
|
||||
\providecommand{\bibinfo}[2]{#2}
|
||||
\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}
|
||||
\providecommand{\BIBentryALTinterwordstretchfactor}{4}
|
||||
\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus
|
||||
\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}
|
||||
\providecommand{\BIBforeignlanguage}[2]{{%
|
||||
\expandafter\ifx\csname l@#1\endcsname\relax
|
||||
\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%
|
||||
\typeout{** loaded for the language `#1'. Using the pattern for}%
|
||||
\typeout{** the default language instead.}%
|
||||
\else
|
||||
\language=\csname l@#1\endcsname
|
||||
\fi
|
||||
#2}}
|
||||
\providecommand{\BIBdecl}{\relax}
|
||||
\BIBdecl
|
||||
|
||||
\bibitem{noauthor_geliberaliseerde_nodate}
|
||||
\BIBentryALTinterwordspacing
|
||||
De geliberaliseerde elektriciteitsmarkt omvat vele partijen die allen samen moeten werken en tegelijkertijd proberen winst te maken. hieronder volgt een... [Online]. Available: \url{https://www.next-kraftwerke.be/nl/weten/spelers-energiemarkt}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{noauthor_fcr_nodate}
|
||||
\BIBentryALTinterwordspacing
|
||||
{FCR}. [Online]. Available: \url{https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/fcr}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{noauthor_afrr_nodate}
|
||||
\BIBentryALTinterwordspacing
|
||||
{aFRR}. [Online]. Available: \url{https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/afrr}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{noauthor_mfrr_nodate}
|
||||
\BIBentryALTinterwordspacing
|
||||
{mFRR}. [Online]. Available: \url{https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/mfrr}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{elia_tariffs_2022}
|
||||
\BIBentryALTinterwordspacing
|
||||
{Elia}, ``Tariffs for maintaining and restoring the residual balance of individual access responsible parties.'' [Online]. Available: \url{https://www.elia.be/-/media/project/elia/elia-site/customers/tarrifs-and-invoicing/tariffs-and-invoicing/en/grille-tarifaire-desequilibre-2022-en-v20220214s.pdf}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{goodfellow_generative_2014}
|
||||
\BIBentryALTinterwordspacing
|
||||
I.~J. Goodfellow, J.~Pouget-Abadie, M.~Mirza, B.~Xu, D.~Warde-Farley, S.~Ozair, A.~Courville, and Y.~Bengio, ``Generative adversarial networks.'' [Online]. Available: \url{http://arxiv.org/abs/1406.2661}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{kingma_auto-encoding_2022}
|
||||
\BIBentryALTinterwordspacing
|
||||
D.~P. Kingma and M.~Welling, ``Auto-encoding variational bayes.'' [Online]. Available: \url{http://arxiv.org/abs/1312.6114}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{rezende_variational_2015}
|
||||
\BIBentryALTinterwordspacing
|
||||
D.~Rezende and S.~Mohamed, ``Variational inference with normalizing flows,'' in \emph{Proceedings of the 32nd International Conference on Machine Learning}, ser. Proceedings of Machine Learning Research, F.~Bach and D.~Blei, Eds., vol.~37.\hskip 1em plus 0.5em minus 0.4em\relax {PMLR}, pp. 1530--1538. [Online]. Available: \url{https://proceedings.mlr.press/v37/rezende15.html}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{sohl-dickstein_deep_2015}
|
||||
\BIBentryALTinterwordspacing
|
||||
J.~Sohl-Dickstein, E.~A. Weiss, N.~Maheswaranathan, and S.~Ganguli, ``Deep unsupervised learning using nonequilibrium thermodynamics.'' [Online]. Available: \url{http://arxiv.org/abs/1503.03585}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{koenker_regression_1978}
|
||||
\BIBentryALTinterwordspacing
|
||||
R.~Koenker and G.~Bassett, ``Regression quantiles,'' vol.~46, no.~1, pp. 33--50, publisher: [Wiley, Econometric Society]. [Online]. Available: \url{https://www.jstor.org/stable/1913643}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{gneiting_strictly_2007}
|
||||
\BIBentryALTinterwordspacing
|
||||
T.~Gneiting and A.~E. Raftery, ``Strictly proper scoring rules, prediction, and estimation,'' vol. 102, no. 477, pp. 359--378. [Online]. Available: \url{http://www.tandfonline.com/doi/abs/10.1198/016214506000001437}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\bibitem{ho_denoising_2020}
|
||||
\BIBentryALTinterwordspacing
|
||||
J.~Ho, A.~Jain, and P.~Abbeel, ``Denoising diffusion probabilistic models.'' [Online]. Available: \url{http://arxiv.org/abs/2006.11239}
|
||||
\BIBentrySTDinterwordspacing
|
||||
|
||||
\end{thebibliography}
|
||||
62
Reports/Extended_Abstract/extended_abstract.blg
Normal file
@@ -0,0 +1,62 @@
|
||||
This is BibTeX, Version 0.99d (TeX Live 2023)
|
||||
Capacity: max_strings=200000, hash_size=200000, hash_prime=170003
|
||||
The top-level auxiliary file: extended_abstract.aux
|
||||
The style file: IEEEtran.bst
|
||||
Reallocated singl_function (elt_size=4) to 100 items from 50.
|
||||
Reallocated singl_function (elt_size=4) to 100 items from 50.
|
||||
Reallocated singl_function (elt_size=4) to 100 items from 50.
|
||||
Reallocated wiz_functions (elt_size=4) to 6000 items from 3000.
|
||||
Reallocated singl_function (elt_size=4) to 100 items from 50.
|
||||
Database file #1: ../Thesis/references.bib
|
||||
-- IEEEtran.bst version 1.14 (2015/08/26) by Michael Shell.
|
||||
-- http://www.michaelshell.org/tex/ieeetran/bibtex/
|
||||
-- See the "IEEEtran_bst_HOWTO.pdf" manual for usage information.
|
||||
Warning--empty year in rezende_variational_2015
|
||||
Warning--empty journal in koenker_regression_1978
|
||||
Warning--empty year in koenker_regression_1978
|
||||
Warning--empty journal in gneiting_strictly_2007
|
||||
Warning--empty year in gneiting_strictly_2007
|
||||
|
||||
Done.
|
||||
You've used 12 entries,
|
||||
4087 wiz_defined-function locations,
|
||||
882 strings with 9644 characters,
|
||||
and the built_in function-call counts, 6211 in all, are:
|
||||
= -- 448
|
||||
> -- 140
|
||||
< -- 32
|
||||
+ -- 73
|
||||
- -- 26
|
||||
* -- 292
|
||||
:= -- 987
|
||||
add.period$ -- 21
|
||||
call.type$ -- 12
|
||||
change.case$ -- 15
|
||||
chr.to.int$ -- 72
|
||||
cite$ -- 17
|
||||
duplicate$ -- 462
|
||||
empty$ -- 525
|
||||
format.name$ -- 34
|
||||
if$ -- 1377
|
||||
int.to.chr$ -- 0
|
||||
int.to.str$ -- 12
|
||||
missing$ -- 104
|
||||
newline$ -- 83
|
||||
num.names$ -- 10
|
||||
pop$ -- 321
|
||||
preamble$ -- 1
|
||||
purify$ -- 0
|
||||
quote$ -- 2
|
||||
skip$ -- 448
|
||||
stack$ -- 0
|
||||
substring$ -- 178
|
||||
swap$ -- 315
|
||||
text.length$ -- 8
|
||||
text.prefix$ -- 0
|
||||
top$ -- 5
|
||||
type$ -- 12
|
||||
warning$ -- 5
|
||||
while$ -- 21
|
||||
width$ -- 14
|
||||
write$ -- 139
|
||||
(There were 5 warnings)
|
||||
643
Reports/Extended_Abstract/extended_abstract.log
Normal file
@@ -0,0 +1,643 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.9.17) 21 MAY 2024 18:51
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
file:line:error style messages enabled.
|
||||
%&-line parsing enabled.
|
||||
**"/Users/victormylle/Library/CloudStorage/SeaDrive-VictorMylle(cloud.optimize-it.be)/My Libraries/UGent/Computer_Science/2e jaar/Thesis/Reports/Extended_Abstract/extended_abstract"
|
||||
(/Users/victormylle/Library/CloudStorage/SeaDrive-VictorMylle(cloud.optimize-it.be)/My Libraries/UGent/Computer_Science/2e jaar/Thesis/Reports/Extended_Abstract/extended_abstract.tex
|
||||
LaTeX2e <2022-11-01> patch level 1
|
||||
L3 programming layer <2023-02-22> (./IEEEtran.cls
|
||||
Document Class: IEEEtran 2014/09/17 V1.8a by Michael Shell
|
||||
-- See the "IEEEtran_HOWTO" manual for usage information.
|
||||
-- http://www.michaelshell.org/tex/ieeetran/
|
||||
\@IEEEtrantmpdimenA=\dimen140
|
||||
\@IEEEtrantmpdimenB=\dimen141
|
||||
\@IEEEtrantmpdimenC=\dimen142
|
||||
\@IEEEtrantmpcountA=\count185
|
||||
\@IEEEtrantmpcountB=\count186
|
||||
\@IEEEtrantmpcountC=\count187
|
||||
\@IEEEtrantmptoksA=\toks16
|
||||
LaTeX Font Info: Trying to load font information for OT1+ptm on input line 458.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/ot1ptm.fd
|
||||
File: ot1ptm.fd 2001/06/04 font definitions for OT1/ptm.
|
||||
)
|
||||
-- Using 8.5in x 11in (letter) paper.
|
||||
-- Using PDF output.
|
||||
\@IEEEnormalsizeunitybaselineskip=\dimen143
|
||||
-- This is a 9 point document.
|
||||
\CLASSINFOnormalsizebaselineskip=\dimen144
|
||||
\CLASSINFOnormalsizeunitybaselineskip=\dimen145
|
||||
\IEEEnormaljot=\dimen146
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <5> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <5> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <7> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <7> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <8> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <8> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <8.5> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <8.5> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <9> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <9> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <10> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <10> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <14> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <14> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <17> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <17> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <20> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1039.
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <20> not available
|
||||
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1039.
|
||||
\IEEEquantizedlength=\dimen147
|
||||
\IEEEquantizedlengthdiff=\dimen148
|
||||
\IEEEquantizedtextheightdiff=\dimen149
|
||||
\IEEEilabelindentA=\dimen150
|
||||
\IEEEilabelindentB=\dimen151
|
||||
\IEEEilabelindent=\dimen152
|
||||
\IEEEelabelindent=\dimen153
|
||||
\IEEEdlabelindent=\dimen154
|
||||
\IEEElabelindent=\dimen155
|
||||
\IEEEiednormlabelsep=\dimen156
|
||||
\IEEEiedmathlabelsep=\dimen157
|
||||
\IEEEiedtopsep=\skip48
|
||||
\c@section=\count188
|
||||
\c@subsection=\count189
|
||||
\c@subsubsection=\count190
|
||||
\c@paragraph=\count191
|
||||
\c@IEEEsubequation=\count192
|
||||
\abovecaptionskip=\skip49
|
||||
\belowcaptionskip=\skip50
|
||||
\c@figure=\count193
|
||||
\c@table=\count194
|
||||
\@IEEEeqnnumcols=\count195
|
||||
\@IEEEeqncolcnt=\count196
|
||||
\@IEEEsubeqnnumrollback=\count197
|
||||
\@IEEEquantizeheightA=\dimen158
|
||||
\@IEEEquantizeheightB=\dimen159
|
||||
\@IEEEquantizeheightC=\dimen160
|
||||
\@IEEEquantizeprevdepth=\dimen161
|
||||
\@IEEEquantizemultiple=\count198
|
||||
\@IEEEquantizeboxA=\box51
|
||||
\@IEEEtmpitemindent=\dimen162
|
||||
\c@IEEEbiography=\count199
|
||||
\@IEEEtranrubishbin=\box52
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
Package: amssymb 2013/01/14 v3.01 AMS font symbols
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
|
||||
\@emptytoks=\toks17
|
||||
\symAMSa=\mathgroup4
|
||||
\symAMSb=\mathgroup5
|
||||
LaTeX Font Info: Redeclaring math symbol \hbar on input line 98.
|
||||
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
|
||||
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
|
||||
)) (/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty
|
||||
Package: amsthm 2020/05/29 v2.20.6
|
||||
\thm@style=\toks18
|
||||
\thm@bodyfont=\toks19
|
||||
\thm@headfont=\toks20
|
||||
\thm@notefont=\toks21
|
||||
\thm@headpunct=\toks22
|
||||
\thm@preskip=\skip51
|
||||
\thm@postskip=\skip52
|
||||
\thm@headsep=\skip53
|
||||
\dth@everypar=\toks23
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
Package: amsmath 2022/04/08 v2.17n AMS math features
|
||||
\@mathmargin=\skip54
|
||||
|
||||
For additional information on amsmath, use the `?' option.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
Package: amstext 2021/08/26 v2.01 AMS text
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
File: amsgen.sty 1999/11/30 v2.0 generic functions
|
||||
\@emptytoks=\toks24
|
||||
\ex@=\dimen163
|
||||
)) (/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
|
||||
\pmbraise@=\dimen164
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
Package: amsopn 2022/04/08 v2.04 operator names
|
||||
)
|
||||
\inf@bad=\count266
|
||||
LaTeX Info: Redefining \frac on input line 234.
|
||||
\uproot@=\count267
|
||||
\leftroot@=\count268
|
||||
LaTeX Info: Redefining \overline on input line 399.
|
||||
LaTeX Info: Redefining \colon on input line 410.
|
||||
\classnum@=\count269
|
||||
\DOTSCASE@=\count270
|
||||
LaTeX Info: Redefining \ldots on input line 496.
|
||||
LaTeX Info: Redefining \dots on input line 499.
|
||||
LaTeX Info: Redefining \cdots on input line 620.
|
||||
\Mathstrutbox@=\box53
|
||||
\strutbox@=\box54
|
||||
LaTeX Info: Redefining \big on input line 722.
|
||||
LaTeX Info: Redefining \Big on input line 723.
|
||||
LaTeX Info: Redefining \bigg on input line 724.
|
||||
LaTeX Info: Redefining \Bigg on input line 725.
|
||||
\big@size=\dimen165
|
||||
LaTeX Font Info: Redeclaring font encoding OML on input line 743.
|
||||
LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
|
||||
\macc@depth=\count271
|
||||
LaTeX Info: Redefining \bmod on input line 905.
|
||||
LaTeX Info: Redefining \pmod on input line 910.
|
||||
LaTeX Info: Redefining \smash on input line 940.
|
||||
LaTeX Info: Redefining \relbar on input line 970.
|
||||
LaTeX Info: Redefining \Relbar on input line 971.
|
||||
\c@MaxMatrixCols=\count272
|
||||
\dotsspace@=\muskip16
|
||||
\c@parentequation=\count273
|
||||
\dspbrk@lvl=\count274
|
||||
\tag@help=\toks25
|
||||
\row@=\count275
|
||||
\column@=\count276
|
||||
\maxfields@=\count277
|
||||
\andhelp@=\toks26
|
||||
\eqnshift@=\dimen166
|
||||
\alignsep@=\dimen167
|
||||
\tagshift@=\dimen168
|
||||
\tagwidth@=\dimen169
|
||||
\totwidth@=\dimen170
|
||||
\lineht@=\dimen171
|
||||
\@envbody=\toks27
|
||||
\multlinegap=\skip55
|
||||
\multlinetaggap=\skip56
|
||||
\mathdisplay@stack=\toks28
|
||||
LaTeX Info: Redefining \[ on input line 2953.
|
||||
LaTeX Info: Redefining \] on input line 2954.
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/array.sty
|
||||
Package: array 2022/09/04 v2.5g Tabular extension package (FMi)
|
||||
\col@sep=\dimen172
|
||||
\ar@mcellbox=\box55
|
||||
\extrarowheight=\dimen173
|
||||
\NC@list=\toks29
|
||||
\extratabsurround=\skip57
|
||||
\backup@length=\skip58
|
||||
\ar@cellbox=\box56
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
|
||||
\KV@toks@=\toks30
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty
|
||||
Package: trig 2021/08/11 v1.11 sin cos tan (DPC)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
|
||||
)
|
||||
Package graphics Info: Driver file: pdftex.def on input line 107.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex
|
||||
))
|
||||
\Gin@req@height=\dimen174
|
||||
\Gin@req@width=\dimen175
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/subfig/subfig.sty
|
||||
Package: subfig 2005/06/28 ver: 1.3 subfig package
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/caption/caption3.sty
|
||||
Package: caption3 2023/03/12 v2.4 caption3 kernel (AR)
|
||||
\caption@tempdima=\dimen176
|
||||
\captionmargin=\dimen177
|
||||
\caption@leftmargin=\dimen178
|
||||
\caption@rightmargin=\dimen179
|
||||
\caption@width=\dimen180
|
||||
\caption@indent=\dimen181
|
||||
\caption@parindent=\dimen182
|
||||
\caption@hangindent=\dimen183
|
||||
Package caption Info: Unknown document class (or package),
|
||||
(caption) standard defaults will be used.
|
||||
Package caption Info: \@makecaption = \long macro:#1#2->\ifx \@captype \@IEEEtablestring \footnotesize \bgroup \par \centering \@IEEEtabletopskipstrut {\normalfont \footnotesize #1}\\{\normalfont \footnotesize \scshape #2}\par \addvspace {0.5\baselineskip }\egroup \@IEEEtablecaptionsepspace \else \@IEEEfigurecaptionsepspace \setbox \@tempboxa \hbox {\normalfont \footnotesize {#1.}\nobreakspace \nobreakspace #2}\ifdim \wd \@tempboxa >\hsize \setbox \@tempboxa \hbox {\normalfont \footnotesize {#1.}\nobreakspace \nobreakspace }\parbox [t]{\hsize }{\normalfont \footnotesize \noindent \unhbox \@tempboxa #2}\else \ifCLASSOPTIONconference \hbox to\hsize {\normalfont \footnotesize \hfil \box \@tempboxa \hfil }\else \hbox to\hsize {\normalfont \footnotesize \box \@tempboxa \hfil }\fi \fi \fi on input line 1176.
|
||||
)
|
||||
\c@KVtest=\count278
|
||||
\sf@farskip=\skip59
|
||||
\sf@captopadj=\dimen184
|
||||
\sf@capskip=\skip60
|
||||
\sf@nearskip=\skip61
|
||||
\c@subfigure=\count279
|
||||
\c@subfigure@save=\count280
|
||||
\c@lofdepth=\count281
|
||||
\c@subtable=\count282
|
||||
\c@subtable@save=\count283
|
||||
\c@lotdepth=\count284
|
||||
\sf@top=\skip62
|
||||
\sf@bottom=\skip63
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/xspace.sty
|
||||
Package: xspace 2014/10/28 v1.13 Space after command names (DPC,MH)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/natbib/natbib.sty
|
||||
Package: natbib 2010/09/13 8.31b (PWD, AO)
|
||||
\bibhang=\skip64
|
||||
\bibsep=\skip65
|
||||
LaTeX Info: Redefining \cite on input line 694.
|
||||
\c@NAT@ctr=\count285
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty
|
||||
Package: stmaryrd 1994/03/03 St Mary's Road symbol package
|
||||
\symstmry=\mathgroup6
|
||||
LaTeX Font Info: Overwriting symbol font `stmry' in version `bold'
|
||||
(Font) U/stmry/m/n --> U/stmry/b/n on input line 89.
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg
|
||||
File: color.cfg 2016/01/02 v1.6 sample color configuration
|
||||
)
|
||||
Package xcolor Info: Driver file: pdftex.def on input line 227.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx)
|
||||
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353.
|
||||
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357.
|
||||
Package xcolor Info: Model `RGB' extended on input line 1369.
|
||||
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371.
|
||||
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372.
|
||||
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373.
|
||||
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374.
|
||||
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375.
|
||||
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376.
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/mathtools/mathtools.sty
|
||||
Package: mathtools 2022/06/29 v1.29 mathematical typesetting tools
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/tools/calc.sty
|
||||
Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ)
|
||||
\calc@Acount=\count286
|
||||
\calc@Bcount=\count287
|
||||
\calc@Adimen=\dimen185
|
||||
\calc@Bdimen=\dimen186
|
||||
\calc@Askip=\skip66
|
||||
\calc@Bskip=\skip67
|
||||
LaTeX Info: Redefining \setlength on input line 80.
|
||||
LaTeX Info: Redefining \addtolength on input line 81.
|
||||
\calc@Ccount=\count288
|
||||
\calc@Cskip=\skip68
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/mathtools/mhsetup.sty
|
||||
Package: mhsetup 2021/03/18 v1.4 programming setup (MH)
|
||||
)
|
||||
\g_MT_multlinerow_int=\count289
|
||||
\l_MT_multwidth_dim=\dimen187
|
||||
\origjot=\skip69
|
||||
\l_MT_shortvdotswithinadjustabove_dim=\dimen188
|
||||
\l_MT_shortvdotswithinadjustbelow_dim=\dimen189
|
||||
\l_MT_above_intertext_sep=\dimen190
|
||||
\l_MT_below_intertext_sep=\dimen191
|
||||
\l_MT_above_shortintertext_sep=\dimen192
|
||||
\l_MT_below_shortintertext_sep=\dimen193
|
||||
\xmathstrut@box=\box57
|
||||
\xmathstrut@dim=\dimen194
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/float/float.sty
|
||||
Package: float 2001/11/08 v1.3d Float enhancements (AL)
|
||||
\c@float@type=\count290
|
||||
\float@exts=\toks31
|
||||
\float@box=\box58
|
||||
\@float@everytoks=\toks32
|
||||
\@floatcapt=\box59
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/base/textcomp.sty
|
||||
Package: textcomp 2020/02/02 v2.0n Standard LaTeX package
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
|
||||
\pgfutil@everybye=\toks33
|
||||
\pgfutil@tempdima=\dimen195
|
||||
\pgfutil@tempdimb=\dimen196
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
|
||||
\pgfutil@abb=\box60
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex)
|
||||
Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10)
|
||||
))
|
||||
Package: pgf 2023-01-15 v3.1.10 (3.1.10)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
|
||||
Package: pgfsys 2023-01-15 v3.1.10 (3.1.10)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
|
||||
\pgfkeys@pathtoks=\toks34
|
||||
\pgfkeys@temptoks=\toks35
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.tex
|
||||
\pgfkeys@tmptoks=\toks36
|
||||
))
|
||||
\pgf@x=\dimen197
|
||||
\pgf@y=\dimen198
|
||||
\pgf@xa=\dimen199
|
||||
\pgf@ya=\dimen256
|
||||
\pgf@xb=\dimen257
|
||||
\pgf@yb=\dimen258
|
||||
\pgf@xc=\dimen259
|
||||
\pgf@yc=\dimen260
|
||||
\pgf@xd=\dimen261
|
||||
\pgf@yd=\dimen262
|
||||
\w@pgf@writea=\write3
|
||||
\r@pgf@reada=\read2
|
||||
\c@pgf@counta=\count291
|
||||
\c@pgf@countb=\count292
|
||||
\c@pgf@countc=\count293
|
||||
\c@pgf@countd=\count294
|
||||
\t@pgf@toka=\toks37
|
||||
\t@pgf@tokb=\toks38
|
||||
\t@pgf@tokc=\toks39
|
||||
\pgf@sys@id@count=\count295
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
|
||||
File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10)
|
||||
)
|
||||
Driver file for pgf: pgfsys-pdftex.def
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
|
||||
File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
|
||||
File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10)
|
||||
))) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
|
||||
File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgfsyssoftpath@smallbuffer@items=\count296
|
||||
\pgfsyssoftpath@bigbuffer@items=\count297
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
|
||||
File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
|
||||
Package: pgfcore 2023-01-15 v3.1.10 (3.1.10)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
|
||||
\pgfmath@dimen=\dimen263
|
||||
\pgfmath@count=\count298
|
||||
\pgfmath@box=\box61
|
||||
\pgfmath@toks=\toks40
|
||||
\pgfmath@stack@operand=\toks41
|
||||
\pgfmath@stack@operation=\toks42
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
|
||||
\c@pgfmathroundto@lastzeros=\count299
|
||||
)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
|
||||
File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgf@picminx=\dimen264
|
||||
\pgf@picmaxx=\dimen265
|
||||
\pgf@picminy=\dimen266
|
||||
\pgf@picmaxy=\dimen267
|
||||
\pgf@pathminx=\dimen268
|
||||
\pgf@pathmaxx=\dimen269
|
||||
\pgf@pathminy=\dimen270
|
||||
\pgf@pathmaxy=\dimen271
|
||||
\pgf@xx=\dimen272
|
||||
\pgf@xy=\dimen273
|
||||
\pgf@yx=\dimen274
|
||||
\pgf@yy=\dimen275
|
||||
\pgf@zx=\dimen276
|
||||
\pgf@zy=\dimen277
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
|
||||
File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgf@path@lastx=\dimen278
|
||||
\pgf@path@lasty=\dimen279
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
|
||||
File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgf@shorten@end@additional=\dimen280
|
||||
\pgf@shorten@start@additional=\dimen281
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
|
||||
File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgfpic=\box62
|
||||
\pgf@hbox=\box63
|
||||
\pgf@layerbox@main=\box64
|
||||
\pgf@picture@serial@count=\count300
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
|
||||
File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgflinewidth=\dimen282
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex
|
||||
File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgf@pt@x=\dimen283
|
||||
\pgf@pt@y=\dimen284
|
||||
\pgf@pt@temp=\dimen285
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
|
||||
File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
|
||||
File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex
|
||||
File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
|
||||
File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgfarrowsep=\dimen286
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
|
||||
File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgf@max=\dimen287
|
||||
\pgf@sys@shading@range@num=\count301
|
||||
\pgf@shadingcount=\count302
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
|
||||
File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
|
||||
File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgfexternal@startupbox=\box65
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
|
||||
File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
|
||||
File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
|
||||
File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
|
||||
File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
))) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
|
||||
File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgfnodeparttextbox=\box66
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
|
||||
File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgf@nodesepstart=\dimen288
|
||||
\pgf@nodesepend=\dimen289
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10)
|
||||
)) (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgffor.sty (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)) (/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/math/pgfmath.sty (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
|
||||
Package: pgffor 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgffor@iter=\dimen290
|
||||
\pgffor@skip=\dimen291
|
||||
\pgffor@stack=\toks43
|
||||
\pgffor@toks=\toks44
|
||||
)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
|
||||
Package: tikz 2023-01-15 v3.1.10 (3.1.10)
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex
|
||||
File: pgflibraryplothandlers.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgf@plot@mark@count=\count303
|
||||
\pgfplotmarksize=\dimen292
|
||||
)
|
||||
\tikz@lastx=\dimen293
|
||||
\tikz@lasty=\dimen294
|
||||
\tikz@lastxsaved=\dimen295
|
||||
\tikz@lastysaved=\dimen296
|
||||
\tikz@lastmovetox=\dimen297
|
||||
\tikz@lastmovetoy=\dimen298
|
||||
\tikzleveldistance=\dimen299
|
||||
\tikzsiblingdistance=\dimen300
|
||||
\tikz@figbox=\box67
|
||||
\tikz@figbox@bg=\box68
|
||||
\tikz@tempbox=\box69
|
||||
\tikz@tempbox@bg=\box70
|
||||
\tikztreelevel=\count304
|
||||
\tikznumberofchildren=\count305
|
||||
\tikznumberofcurrentchild=\count306
|
||||
\tikz@fig@count=\count307
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
|
||||
File: pgfmodulematrix.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
\pgfmatrixcurrentrow=\count308
|
||||
\pgfmatrixcurrentcolumn=\count309
|
||||
\pgf@matrix@numberofcolumns=\count310
|
||||
)
|
||||
\tikz@expandcount=\count311
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex
|
||||
File: tikzlibrarytopaths.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
))) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex
|
||||
File: tikzlibrarypositioning.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarycalc.code.tex
|
||||
File: tikzlibrarycalc.code.tex 2023-01-15 v3.1.10 (3.1.10)
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX)
|
||||
\l__color_backend_stack_int=\count312
|
||||
\l__pdf_internal_box=\box71
|
||||
) (./extended_abstract.aux)
|
||||
\openout1 = `extended_abstract.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
|
||||
-- Lines per column: 61 (exact).
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
[Loading MPS to PDF converter (version 2006.09.02).]
|
||||
\scratchcounter=\count313
|
||||
\scratchdimen=\dimen301
|
||||
\scratchbox=\box72
|
||||
\nofMPsegments=\count314
|
||||
\nofMParguments=\count315
|
||||
\everyMPshowfont=\toks45
|
||||
\MPscratchCnt=\count316
|
||||
\MPscratchDim=\dimen302
|
||||
\MPnumerator=\count317
|
||||
\makeMPintoPDFobject=\count318
|
||||
\everyMPtoPDFconversion=\toks46
|
||||
) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
|
||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
|
||||
))
|
||||
Package caption Info: Begin \AtBeginDocument code.
|
||||
Package caption Info: subfig package v1.3 is loaded.
|
||||
Package caption Info: End \AtBeginDocument code.
|
||||
LaTeX Font Info: Trying to load font information for U+msa on input line 33.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
|
||||
)
|
||||
LaTeX Font Info: Trying to load font information for U+msb on input line 33.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
|
||||
)
|
||||
LaTeX Font Info: Trying to load font information for U+stmry on input line 33.
|
||||
(/usr/local/texlive/2023/texmf-dist/tex/latex/stmaryrd/Ustmry.fd) [1{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}{/usr/local/texlive/2023/texmf-dist/fonts/enc/dvips/base/8r.enc}
|
||||
|
||||
|
||||
]
|
||||
<../Thesis/images/quantile_regression/reconstructed_cdf.png, id=13, 722.7pt x 433.62pt>
|
||||
File: ../Thesis/images/quantile_regression/reconstructed_cdf.png Graphic file (type png)
|
||||
<use ../Thesis/images/quantile_regression/reconstructed_cdf.png>
|
||||
Package pdftex.def Info: ../Thesis/images/quantile_regression/reconstructed_cdf.png used on input line 102.
|
||||
(pdftex.def) Requested size: 252.0pt x 151.20026pt.
|
||||
[2 <../Thesis/images/quantile_regression/reconstructed_cdf.png>]
|
||||
<../Thesis/images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png, id=24, 1180.8918pt x 595.5048pt>
|
||||
File: ../Thesis/images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png Graphic file (type png)
|
||||
<use ../Thesis/images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png>
|
||||
Package pdftex.def Info: ../Thesis/images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png used on input line 111.
|
||||
(pdftex.def) Requested size: 252.0pt x 127.07693pt.
|
||||
<../Thesis/images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_864.png, id=25, 1180.8918pt x 595.5048pt>
|
||||
File: ../Thesis/images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_864.png Graphic file (type png)
|
||||
<use ../Thesis/images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_864.png>
|
||||
Package pdftex.def Info: ../Thesis/images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_864.png used on input line 112.
|
||||
(pdftex.def) Requested size: 252.0pt x 127.07693pt.
|
||||
<../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 1_00000000.jpeg, id=26, 1166.4378pt x 581.0508pt>
|
||||
File: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 1_00000000.jpeg Graphic file (type jpg)
|
||||
<use ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 1_00000000.jpeg>
|
||||
Package pdftex.def Info: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 1_00000000.jpeg used on input line 129.
|
||||
(pdftex.def) Requested size: 113.39923pt x 56.48598pt.
|
||||
<../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 2_00000000.jpeg, id=27, 1166.4378pt x 581.0508pt>
|
||||
File: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 2_00000000.jpeg Graphic file (type jpg)
|
||||
<use ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 2_00000000.jpeg>
|
||||
Package pdftex.def Info: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 2_00000000.jpeg used on input line 131.
|
||||
(pdftex.def) Requested size: 113.39923pt x 56.48598pt.
|
||||
<../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 3_00000000.jpeg, id=28, 1166.4378pt x 581.0508pt>
|
||||
File: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 3_00000000.jpeg Graphic file (type jpg)
|
||||
<use ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 3_00000000.jpeg>
|
||||
Package pdftex.def Info: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 3_00000000.jpeg used on input line 135.
|
||||
(pdftex.def) Requested size: 113.39923pt x 56.48598pt.
|
||||
<../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 4_00000000.jpeg, id=29, 1166.4378pt x 581.0508pt>
|
||||
File: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 4_00000000.jpeg Graphic file (type jpg)
|
||||
<use ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 4_00000000.jpeg>
|
||||
Package pdftex.def Info: ../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 4_00000000.jpeg used on input line 138.
|
||||
(pdftex.def) Requested size: 113.39923pt x 56.48598pt.
|
||||
|
||||
Overfull \hbox (15.64992pt too wide) in paragraph at lines 144--145
|
||||
[][]
|
||||
[]
|
||||
|
||||
[3 <../Thesis/images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png> <../Thesis/images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_864.png> <../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 1_00000000.jpeg> <../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 2_00000000.jpeg> <../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 3_00000000.jpeg> <../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 4_00000000.jpeg>]
|
||||
<../Thesis/images/comparison/final_comparison.png, id=35, 1003.8303pt x 711.1368pt>
|
||||
File: ../Thesis/images/comparison/final_comparison.png Graphic file (type png)
|
||||
<use ../Thesis/images/comparison/final_comparison.png>
|
||||
Package pdftex.def Info: ../Thesis/images/comparison/final_comparison.png used on input line 168.
|
||||
(pdftex.def) Requested size: 252.0pt x 178.52162pt.
|
||||
(./extended_abstract.bbl
|
||||
Underfull \hbox (badness 2707) in paragraph at lines 45--47
|
||||
\OT1/ptm/m/n/9 par-ties.'' [On-line]. Avail-able: https://www.elia.be/-
|
||||
[]
|
||||
|
||||
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 45--47
|
||||
\OT1/ptm/m/n/9 /media/project/elia/elia-site/customers/tarrifs-and-
|
||||
[]
|
||||
|
||||
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 45--47
|
||||
\OT1/ptm/m/n/9 invoicing/tariffs-and-invoicing/en/grille-tarifaire-desequilibre-
|
||||
[]
|
||||
|
||||
[4 <../Thesis/images/comparison/final_comparison.png>]
|
||||
Overfull \hbox (12.66125pt too wide) in paragraph at lines 75--77
|
||||
\OT1/ptm/m/n/9 http://www.tandfonline.com/doi/abs/10.1198/016214506000001437
|
||||
[]
|
||||
|
||||
)
|
||||
|
||||
** Conference Paper **
|
||||
Before submitting the final camera ready copy, remember to:
|
||||
|
||||
1. Manually equalize the lengths of two columns on the last page
|
||||
of your paper;
|
||||
|
||||
2. Ensure that any PostScript and/or PDF output post-processing
|
||||
uses only Type 1 fonts and that every step in the generation
|
||||
process uses the appropriate paper size.
|
||||
|
||||
[5
|
||||
|
||||
] (./extended_abstract.aux) )
|
||||
Here is how much of TeX's memory you used:
|
||||
16685 strings out of 476025
|
||||
336802 string characters out of 5790017
|
||||
1871388 words of memory out of 5000000
|
||||
36840 multiletter control sequences out of 15000+600000
|
||||
546953 words of font info for 103 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
84i,13n,80p,1556b,679s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</usr/local/texlive/2023/texmf-dist/fonts/type1/public/amsfonts/cmextra/cmex9.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi6.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi9.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy9.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/urw/times/utmb8a.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/urw/times/utmbi8a.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/local/texlive/2023/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
|
||||
Output written on extended_abstract.pdf (5 pages, 896022 bytes).
|
||||
PDF statistics:
|
||||
82 PDF objects out of 1000 (max. 8388607)
|
||||
44 compressed objects within 1 object stream
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
53 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
BIN
Reports/Extended_Abstract/extended_abstract.pdf
Normal file
BIN
Reports/Extended_Abstract/extended_abstract.synctex.gz
Normal file
182
Reports/Extended_Abstract/extended_abstract.tex
Normal file
@@ -0,0 +1,182 @@
|
||||
\documentclass[9pt,conference]{IEEEtran}
|
||||
\usepackage{amssymb,amsthm,amsmath,array}
|
||||
\usepackage{graphicx}
|
||||
\usepackage[caption=false,font=footnotesize]{subfig}
|
||||
\usepackage{xspace}
|
||||
\usepackage[sort&compress, numbers]{natbib}
|
||||
\usepackage{stmaryrd}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{mathtools}
|
||||
\usepackage{float}
|
||||
\usepackage{textcomp}
|
||||
\usepackage{tikz}
|
||||
|
||||
\usetikzlibrary{positioning, calc}
|
||||
|
||||
\begin{document}
|
||||
\title{Generative modeling of electricity imbalance prices for battery optimization}
|
||||
\author{
|
||||
Victor Mylle \\
|
||||
\\
|
||||
Promotors:
|
||||
\begin{tabular}[t]{l}
|
||||
prof. dr. ir. Chris Develder \\
|
||||
prof. Bert Claessens
|
||||
\end{tabular}
|
||||
\\\\
|
||||
Supervisor:
|
||||
\begin{tabular}[t]{l}
|
||||
Jonas Van Gompel
|
||||
\end{tabular}
|
||||
}
|
||||
|
||||
\maketitle
|
||||
\begin{abstract}
|
||||
In this study, different models are trained to model the imbalance prices of the Belgian electricity market and optimize battery usage for energy trading. The models are trained on published data from Elia, the Belgian Transmission System Operator (TSO), and evaluated using Mean Absolute Error (MAE), Mean Squared Error (MSE), and Continuous Ranked Probability Score (CRPS). The model types include linear models, non-linear models, recurrent neural networks and diffusion models. Optimizing battery usage is done in a two-step approach. First, the models are used to generate full-day Net Regulation Volume (NRV) samples, which are then used to reconstruct the imbalance prices. These prices are then incorporated into the decision-making to charge and discharge a battery. For each of the imbalance price samples, a charging and discharging threshold is determined by a simple gird search to optimize the maximum profit. For each day, the mean of these thresholds is used to charge and discharge the battery. The results show that the diffusion model outperforms the other models in terms of profit generation. The diffusion model achieves a profit increase of 9.74\% over the baseline policy, which uses the previous day's NRV as a prediction. This demonstrates the potential benefits of advanced generative models for enhancing decision-making in energy trading. \\
|
||||
\end{abstract}
|
||||
\begin{IEEEkeywords}
|
||||
Generative modeling, imbalance prices, diffusion model, battery optimization
|
||||
\end{IEEEkeywords}
|
||||
|
||||
|
||||
\section{Introduction}
|
||||
The electricity market is a complex system influenced by various factors, with renewable energy sources adding significant volatility. Renewables, such as wind and solar power, are inherently variable and unpredictable, creating challenges in maintaining a balance between electricity supply and demand. This balance is managed by the Transmission System Operator (TSO), Elia in Belgium, using reserves to address potential imbalances, directly impacting electricity imbalance prices.
|
||||
|
||||
Market participants with flexible assets, like industrial batteries, can help stabilize the grid, reducing Elia's reliance on reserves and lowering system costs. These participants aim to maximize profits by buying electricity when prices are low and selling when prices are high.
|
||||
|
||||
Forecasting imbalance prices is crucial for market participants to make informed trading decisions. Current industry practices often use simplistic strategies, such as fixed price thresholds, which are suboptimal. This thesis aims to develop generative models to forecast imbalance prices in the Belgian electricity market, optimizing battery usage for profit maximization.
|
||||
|
||||
The thesis consists of two parts: modeling the Net Regulation Volume (NRV) for the next day and optimizing a policy using NRV forecasts to maximize profit through strategic battery usage. Various models will be trained and compared based on their profit optimization performance.
|
||||
|
||||
\section{Background}
|
||||
\subsection{Electricity Market}
|
||||
The electricity market is a complex ecosystem comprising various stakeholders who work collectively to ensure the balance between electricity generation and consumption, while also aiming to achieve profitability. Key participants in this market include Producers, Consumers, Transmission System Operators (TSOs), Distribution System Operators (DSOs), Balance Responsible Parties (BRPs), and Balancing Service Providers (BSPs). Producers generate electricity using various methods such as coal, nuclear energy, and renewable sources like wind and solar. Consumers, which include households, businesses, and industries, use this electricity. \cite{noauthor_geliberaliseerde_nodate}
|
||||
|
||||
The grid's stability is maintained by the TSO, responsible for the high-voltage transmission of electricity. In Belgium, this role is performed by Elia. The TSO ensures the grid's balance by activating reserves provided by BSPs, who submit bids for supplying these reserves when needed. This balance is crucial because any discrepancy between electricity generated and consumed can lead to instability, potentially causing blackouts and equipment damage.
|
||||
|
||||
A fundamental aspect of maintaining grid stability involves the role of BRPs, which are entities responsible for forecasting and balancing electricity consumption and generation. They submit daily balance schedules to the TSO, and any deviation from these schedules results in imbalance charges, which are calculated based on the System Imbalance (SI) and the Net Regulation Volume (NRV). The NRV represents the volume of reserves activated by the TSO to maintain balance, while the SI is derived from the discrepancy between scheduled and actual power exchanges minus the NRV.
|
||||
|
||||
Elia uses three types of reserves to manage imbalances: Frequency Containment Reserves (FCR), Automatic Frequency Restoration (aFRR), and Manual Frequency Restoration (mFRR) \cite{noauthor_fcr_nodate, noauthor_afrr_nodate, noauthor_mfrr_nodate}. The activation of these reserves follows a specific order based on their response times to ensure grid stability. The imbalance price, a key component in managing grid stability, is determined by the highest marginal price of activated reserves for a given quarter-hour. This price calculation involves various factors including the SI, NRV, and specific pricing formulas set by the TSO \cite{elia_tariffs_2022}.
|
||||
|
||||
\subsection{Generative Modeling}
|
||||
Given the complexity and variability in factors affecting the imbalance price, forecasting it is challenging. Traditional models struggle due to the dynamic nature of these variables and the changing formulas used by the TSO. An alternative approach involves forecasting the NRV and using this to calculate the imbalance price using the TSO's formulas. This approach requires accurate modeling of the NRV distribution, which can be achieved through generative modeling techniques. The modeling is done using multiple conditional input features like load, wind, photovoltaic and nominal net position. Deterministic forecasting is often not accurate and does not capture the uncertainty in the NRV, which is crucial for managing risk and optimizing trading strategies.
|
||||
|
||||
Generative modeling, a branch of machine learning, aims to generate new data samples that resemble the training data. Techniques such as Generative Adversarial Networks (GANs), Variational Autoencoders (VAEs), Normalizing Flows, and Diffusion Models are commonly used in this field \cite{goodfellow_generative_2014, kingma_auto-encoding_2022, rezende_variational_2015, sohl-dickstein_deep_2015}. These models can learn the underlying distribution of the NRV and generate multiple scenarios, aiding in better decision-making.
|
||||
|
||||
Quantile regression is another technique that can be used to estimate the distribution of the NRV without prior knowledge of its form. By predicting multiple quantiles, the model can reconstruct the cumulative distribution function (CDF) of the NRV and generate samples accordingly. This method, introduced by Koenker and Bassett \cite{koenker_regression_1978}, is advantageous in capturing the full range of possible outcomes, especially in the tails of the distribution which are critical for risk management. The models are optimized using the Pinball Loss, a metric that penalizes underestimation and overestimation of quantiles, ensuring a balanced prediction across the distribution. The formula for the Pinball Loss is given by:
|
||||
\begin{equation}
|
||||
L_{\tau}(y, \hat{y}) = \begin{cases}
|
||||
(\tau - 1)(y - \hat{y}) & \text{if } y < \hat{y} \\
|
||||
\tau(y - \hat{y}) & \text{if } y \geq \hat{y}
|
||||
\end{cases}
|
||||
\end{equation}
|
||||
where $y$ is the true value, $\hat{y}$ is the predicted value, and $\tau$ is the quantile level.
|
||||
|
||||
In this thesis, both autoregressive and non-autoregressive models are explored. Autoregressive models generate samples sequentially, incorporating dependencies between consecutive time steps, while non-autoregressive models generate all values simultaneously, allowing for faster but potentially less realistic samples. Evaluating the performance of these models involves metrics such as the Mean Absolute Error (MAE), Mean Squared Error (MSE), and the Continuous Ranked Probability Score (CRPS) \cite{gneiting_strictly_2007}, ensuring a comprehensive assessment of their accuracy and reliability. A more advanced diffusion model is also considered, which has shown promising results in generating realistic samples and capturing complex distributions \cite{sohl-dickstein_deep_2015}. Various implementations of diffusion models exist, such as the Denoising Diffusion Probabilistic Model (DDPM) \cite{ho_denoising_2020}.
|
||||
|
||||
\subsection{Battery Optimization Policies}
|
||||
|
||||
Battery optimization in the electricity market involves strategic decisions on when to charge and discharge batteries to maximize profit and maintain battery health. Organizations aim to buy electricity when prices are low and sell when prices are high, based on predictions of future market conditions. In this thesis, the optimization policy leverages generative models to forecast imbalance prices by reconstructing these prices from Net Regulation Volume (NRV) samples for the next day. The policy aims to maximize profit by charging and discharging, while also considering battery health. The maximum number of charge cycles for a battery is around 400 cycles a year. Exceeding this limit can lead to battery degradation, reducing its capacity and efficiency. To prevent excessive charging and discharging, a penalty parameter is introduced in the optimization policy, ensuring a balance between profit maximization and battery health.
|
||||
|
||||
\subsubsection{Baseline Policies}
|
||||
|
||||
Two baseline policies are established for comparison. The first policy uses fixed thresholds for charging and discharging the battery, determined by a grid search on historical imbalance price data to maximize profit. A penalty parameter is introduced to minimize excessive charging and discharging, preserving battery health.
|
||||
|
||||
The second baseline policy sets thresholds based on the NRV of the previous day, under the assumption that the next day's NRV will be similar. These thresholds are also optimized using a grid search on reconstructed imbalance prices derived from the previous day's NRV, including a penalty parameter for battery health.
|
||||
|
||||
\subsubsection{Policies Based on NRV Generations}
|
||||
|
||||
A more advanced policy utilizes multiple NRV predictions for the next day, generated by a trained generative model. Each NRV sample is used to reconstruct imbalance prices, and optimal charging and discharging thresholds are determined for each sample through a grid search incorporating a penalty parameter to reduce battery degradation. The final thresholds for the next day are obtained by averaging these optimal thresholds. This approach showcases the potential of using NRV generations to enhance decision-making in battery optimization.
|
||||
|
||||
\section{Results \& Discussion}
|
||||
|
||||
\subsection{NRV Modeling}
|
||||
Multiple model types are trained to generate new full-day samples of the NRV for a certain day. This is done by training the models on data published by Elia, the TSO in Belgium. The data consists of the NRV, load history and forecast, photovoltaic power history and forecast, wind power history and forecast, and the nominal net position. The models are evaluated using MAE, MSE, and CRPS.
|
||||
|
||||
The first set of models includes linear models, non-linear models, and recurrent neural networks like GRU. These models are trained using Quantile Regression to estimate the cumulative distribution of the NRV values. The models output multiple quantile values which can be interpolated to generate a cumulative distribution function. For each quarter of the day, such distribution is predicted and reconstructed. The distributions are then used to sample NRV values and generate full-day NRV predictions.
|
||||
|
||||
The quantiles used during this study are 1\%, 5\%, 10\%, 15\%, 30\%, 40\%, 50\%, 60\%, 70\%, 85\%, 90\%, 95\%, and 99\%. These quantiles are chosen to get a good approximation of the cumulative distribution of the NRV. More quantiles are used in the tails of the distribution to ensure a good approximation of the extreme values which is important for risk management. An example of a reconstruction of the cumulative NRV distribution for a certain quarter is shown in Figure \ref{fig:cdf_example}. This distribution can then be used to sample NRV values for that quarter.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\includegraphics[width=\columnwidth]{../Thesis/images/quantile_regression/reconstructed_cdf.png}
|
||||
\caption{Example of a reconstructed cumulative distribution function of the NRV for a certain quarter.}
|
||||
\label{fig:cdf_example}
|
||||
\end{figure}
|
||||
|
||||
The models using Quantile Regression are trained in both autoregressive and non-autoregressive settings. The autoregressive models output the NRV quantile values for each quarter sequentially, while the non-autoregressive models output all quantile values simultaneously. Sampling from the autoregressive models is done by feeding the sampled NRV value back into the model to predict the quantiles of the NRV for the next quarter. This makes sure the dependencies between the quarters are captured in the samples and leads to smoother samples. The non-autoregressive models do not capture these dependencies because they output all quantile values simultaneously for a full day. For each quarter, the cumulative distribution functions are reconstructed and sampled. The sample for a certain quarter does not depend on which value was sampled for the previous quarter. This leads to less smooth samples but allows for faster generation of samples. An example of this behavior is shown in Figure \ref{fig:autoregressive_vs_non-autoregressive}. The autoregressive model generates smoother samples compared to the non-autoregressive model.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\subfloat[Autoregressive model]{\includegraphics[width=\columnwidth]{../Thesis/images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png}} \\
|
||||
\subfloat[Non-autoregressive model]{\includegraphics[width=\columnwidth]{../Thesis/images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_864.png}}
|
||||
\caption{Comparison between autoregressive and non-autoregressive models. The samples are generated using a linear model using all input features.}
|
||||
\label{fig:autoregressive_vs_non-autoregressive}
|
||||
\end{figure}
|
||||
|
||||
The different models are evaluated using MAE, MSE and CRPS to get an insight into the modeling performance of the models. The results show that non-autoregressive models achieve a better CRPS score than autoregressive models while having worse MAE and MSE scores. An explanation for this behavior is the error propagation in the sampling using autoregressive models. When a sampled value is fed back into the model to predict the quantiles of the next quarter, the error in the sampled value is propagated and the outputted quantiles are shifted. The CRPS evaluates these shifted distributions against the target values which can result in a worse score.
|
||||
|
||||
The results also show that using more input features leads to better modeling performance for the autoregressive models. This is not always the case for the non-autoregressive models. Because non-autoregressive models need to output the quantiles for every quarter of the day simultaneously, they need to capture more complex patterns in the input data. The input data itself also contains more values for non-autoregressive models because the forecasts for the whole day are included while the autoregressive models only use the forecasts for the next quarter. This can lead to the non-autoregressive models not being able to capture the complex patterns in the input data and having worse modeling performance when more input features are used.
|
||||
|
||||
A more recent model type, diffusion models, is also explored. These models are trained using the Denoising Diffusion Probabilistic Model (DDPM) which has shown promising results in generating realistic samples and capturing complex distributions. The diffusion models are trained using the same input features as the other models and are evaluated using the same metrics. The architecture used for the diffusion models is a simple feedforward neural network that uses linear hidden layers with a ReLU activation function. More advanced architectures can be explored in future work to improve the modeling performance of the diffusion models. Each layer of the diffusion model is conditioned on the input features which guide the sampling process. This guidance is very simple and can be improved by using more complex conditioning mechanisms.
|
||||
|
||||
Samples are generated using the diffusion models by sampling noise from a standard normal distribution and feeding it through the model together with the input features. The model denoises the noise in multiple steps to generate a full-day sample of the NRV. This process is shown in Figure \ref{fig:diffusion_intermediates}. First, the generations are very noisy and do not resemble the target distribution. After multiple denoising steps, the generations become more realistic and resemble the target distribution more closely.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
% Node for Image 1
|
||||
\node (img1) {\includegraphics[width=0.45\columnwidth]{../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 1_00000000.jpeg}};
|
||||
% Node for Image 2 with an arrow from Image 1
|
||||
\node[right=of img1] (img2) {\includegraphics[width=0.45\columnwidth]{../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 2_00000000.jpeg}};
|
||||
\draw[-latex] (img1) -- (img2);
|
||||
|
||||
% Node for Image 3 below Image 1 with an arrow from Image 2
|
||||
\node[below=of img1] (img3) {\includegraphics[width=0.45\columnwidth]{../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 3_00000000.jpeg}};
|
||||
|
||||
% Node for Image 4 with an arrow from Image 3
|
||||
\node[right=of img3] (img4) {\includegraphics[width=0.45\columnwidth]{../Thesis/images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 4_00000000.jpeg}};
|
||||
\draw[-latex] (img3) -- (img4);
|
||||
|
||||
% Complex arrow from Image 2 to Image 3
|
||||
\coordinate (Middle) at ($(img2.south)!0.5!(img3.north)$);
|
||||
\draw[-latex] (img2.south) |- (Middle) -| (img3.north);
|
||||
\end{tikzpicture}
|
||||
\caption{Intermediate steps of the diffusion model for example 864 from the test set. The confidence intervals shown in the plots are made using 100 samples.}
|
||||
\label{fig:diffusion_intermediates}
|
||||
\end{figure}
|
||||
|
||||
When comparing the different models based on the evaluation metrics MAE, MSE, and CRPS, several trends emerge. Firstly, non-autoregressive models tend to outperform autoregressive models in terms of CRPS, suggesting they are better at capturing the overall distribution of the target variable. However, autoregressive models typically achieve lower MAE and MSE scores, indicating they provide more accurate point predictions.
|
||||
|
||||
In terms of complexity, non-linear models generally perform better than their linear counterparts across all metrics, indicating that capturing non-linear relationships in the data is crucial for improving model performance. Interestingly, GRU models, despite their complexity and higher number of parameters, do not always outperform simpler non-linear models, particularly in the autoregressive setting.
|
||||
|
||||
The diffusion models, while promising in their ability to generate realistic samples, show worse performance in terms of MAE, MSE, and CRPS. This discrepancy is likely due to the narrow confidence intervals produced by these models, which do not capture the variability present in the data.
|
||||
|
||||
It is difficult to draw definitive conclusions about the best model type, as their performance varies across different metrics and visual inspection of the generated samples. However, diffusion models show potential for capturing complex distributions, while non-linear models offer a good balance between accuracy and complexity.
|
||||
|
||||
\subsection{Policy Evaluation}
|
||||
The goal of this study is to use the imbalance price generations to optimize battery usage for profit maximization. The simple policy determines a charging and discharging threshold for each imbalance price sample of a certain day by performing a simple grid search to maximize the profit. The mean of these thresholds is then used to charge and discharge the battery for that day. The policy is evaluated on a test set that starts on 01-01-2023 and ends on 12-12-2023. Days with missing data are excluded from the evaluation for a fair comparison.
|
||||
|
||||
One of the key questions is if the metrics used to evaluate the models also correlate with the profit made by the policies. This is not the case and the models that perform best in terms of the evaluation metrics do not necessarily generate the most profit. Because of this, the profit needs to be evaluated during the training process of the models. If another metric is used to evaluate the models and do early stopping, the models might be overfitting too much. A validation set is used consisting of the last two months of 2022 to evaluate the profit of the policy during the training of the models. Evaluating the whole test set during the training process is not feasible because of the computational cost. The validation set gives a good indication of the performance of the profit during the training process. This metric is used to do early stopping and prevent overfitting of the models.
|
||||
|
||||
The penalty parameter was tuned for every model to prevent excessive charging and discharging of the battery. A total of 283 charge cycles can be used for the battery during the test set. This also makes comparing the profit of the different models and policies fair because more charge cycles would lead to more profit. For the evaluation of the policy using the different models, a battery of 2MWh with a charge/discharge power of 1MW is used.
|
||||
|
||||
The results show that the diffusion model outperforms the other models in terms of profit generation. The diffusion model achieves a profit increase of 9.74\% over the baseline policy, which uses the previous day's NRV as a prediction. Only the diffusion model was able to outperform the baseline policy. The results are shown in Figure \ref{fig:profit_comparison}.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\includegraphics[width=\columnwidth]{../Thesis/images/comparison/final_comparison.png}
|
||||
\caption{Comparison of the profit made by the different policies and baselines using the test set.}
|
||||
\label{fig:profit_comparison}
|
||||
\end{figure}
|
||||
|
||||
\section{Conclusion}
|
||||
This thesis explored the use of generative models to model the Net Regulation Volume (NRV) and optimize battery charging and discharging policies in the electricity market. Various models were trained and assessed using metrics such as Mean Absolute Error (MAE), Mean Squared Error (MSE), and Continuous Ranked Probability Score (CRPS). The primary goal was to model imbalance prices and use these predictions to enhance battery optimization policies.
|
||||
|
||||
The results indicated that traditional evaluation metrics do not always align with the profitability of the policies. Consequently, models were evaluated based on the profit they generated, revealing that better modeling performance does not necessarily lead to higher profits. Among the tested models, only the diffusion model outperformed the baseline policy, achieving a 9.74\% increase in profit.
|
||||
|
||||
The findings highlight the potential of generative modeling in modeling imbalance prices and optimizing energy trading strategies. Future work could involve more sophisticated diffusion model implementations and advanced conditioning techniques to further improve battery utilization and profitability. This thesis demonstrates that focusing on profitability as a measure of success can lead to more practical applications in the energy market.
|
||||
|
||||
\bibliographystyle{IEEEtran}
|
||||
\bibliography{../Thesis/references}
|
||||
\end{document}
|
||||
9
Reports/Extended_Abstract/references.bib
Normal file
@@ -0,0 +1,9 @@
|
||||
@article{code1,
|
||||
title={Article Title},
|
||||
author={A. Firstauthor and A. Secondauthor},
|
||||
journal={Journal name},
|
||||
volume={1},
|
||||
pages={1--2},
|
||||
year={2023},
|
||||
publisher={Publisher}
|
||||
}
|
||||
@@ -14,6 +14,44 @@
|
||||
long = Non-Autoregressive Quantile Regression
|
||||
}
|
||||
|
||||
% Deep Learning
|
||||
\DeclareAcronym{GRU}{
|
||||
short = GRU,
|
||||
long = Gated Recurrent Unit
|
||||
}
|
||||
|
||||
\DeclareAcronym{LSTM}{
|
||||
short = LSTM,
|
||||
long = Long Short-Term Memory
|
||||
}
|
||||
|
||||
\DeclareAcronym{GAN}{
|
||||
short = GAN,
|
||||
long = Generative Adversarial Network,
|
||||
plural = s
|
||||
}
|
||||
|
||||
\DeclareAcronym{CTSGAN}{
|
||||
short = CTSGAN,
|
||||
long = Conditional Time Series Generative Adversarial Network
|
||||
}
|
||||
|
||||
\DeclareAcronym{VAE}{
|
||||
short = VAE,
|
||||
long = Variational Autoencoder
|
||||
}
|
||||
|
||||
\DeclareAcronym{MLP}{
|
||||
short = MLP,
|
||||
long = Multi-Layer Perceptron
|
||||
}
|
||||
|
||||
\DeclareAcronym{GP}{
|
||||
short = GP,
|
||||
long = Gaussian Process,
|
||||
plural-form = Gaussian Processes
|
||||
}
|
||||
|
||||
% Metrics
|
||||
\DeclareAcronym{MSE}{
|
||||
short = MSE,
|
||||
@@ -30,6 +68,28 @@
|
||||
long = Continuous Ranked Probability Score
|
||||
}
|
||||
|
||||
\DeclareAcronym{TSPA}{
|
||||
short = TSPA,
|
||||
long = Two-Step Probabilistic Approach
|
||||
}
|
||||
|
||||
\DeclareAcronym{PLF}{
|
||||
short = PLF,
|
||||
long = Pinball Loss Function
|
||||
}
|
||||
|
||||
\DeclareAcronym{CDF}{
|
||||
short = CDF,
|
||||
long = Cumulative Distribution Function
|
||||
}
|
||||
|
||||
\DeclareAcronym{QE}{
|
||||
short = QE,
|
||||
long = Quarter Embedding
|
||||
}
|
||||
|
||||
|
||||
|
||||
% Electricity Market Terms
|
||||
\DeclareAcronym{NRV}{
|
||||
short = NRV,
|
||||
@@ -43,5 +103,69 @@
|
||||
|
||||
\DeclareAcronym{NP}{
|
||||
short = NP,
|
||||
long = Implicit Net Position
|
||||
long = Nominal Net Position
|
||||
}
|
||||
|
||||
\DeclareAcronym{TSO}{
|
||||
short = TSO,
|
||||
long = Transmission System Operator
|
||||
}
|
||||
|
||||
\DeclareAcronym{DSO}{
|
||||
short = DSO,
|
||||
long = Distribution System Operator
|
||||
}
|
||||
|
||||
\DeclareAcronym{BRP}{
|
||||
short = BRP,
|
||||
long = Balance Responsible Party,
|
||||
short-plural = s,
|
||||
long-plural = ies
|
||||
}
|
||||
|
||||
\DeclareAcronym{BSP}{
|
||||
short = BSP,
|
||||
long = Balancing Service Provider,
|
||||
short-plural = s,
|
||||
}
|
||||
|
||||
\DeclareAcronym{SI}{
|
||||
short = SI,
|
||||
long = System Imbalance
|
||||
}
|
||||
|
||||
\DeclareAcronym{FCR}{
|
||||
short = FCR,
|
||||
long = Frequency Containment Reserve
|
||||
}
|
||||
|
||||
\DeclareAcronym{aFRR}{
|
||||
short = aFRR,
|
||||
long = Automatic Frequency Restoration
|
||||
}
|
||||
|
||||
\DeclareAcronym{mFRR}{
|
||||
short = mFRR,
|
||||
long = Manual Frequency Restoration
|
||||
}
|
||||
|
||||
\DeclareAcronym{MW}{
|
||||
short = MW,
|
||||
long = Megawatt
|
||||
}
|
||||
|
||||
\DeclareAcronym{ACE}{
|
||||
short = ACE,
|
||||
long = Area Control Error
|
||||
}
|
||||
|
||||
\DeclareAcronym{MIP}{
|
||||
short = MIP,
|
||||
long = Marginal price of upward activation
|
||||
}
|
||||
|
||||
\DeclareAcronym{MDP}{
|
||||
short = MDP,
|
||||
long = Marginal price of downward activation
|
||||
}
|
||||
|
||||
|
||||
BIN
Reports/Thesis/images/bid_ladder.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
Reports/Thesis/images/comparison/final_comparison.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 82 KiB |
BIN
Reports/Thesis/images/diffusion/policies/comparison/crps.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
Reports/Thesis/images/diffusion/policies/comparison/profit.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 32 KiB |
@@ -1,11 +1,4 @@
|
||||
|
||||
@online{noauthor_zotero_nodate,
|
||||
title = {Zotero {\textbar} Connectors},
|
||||
url = {https://www.zotero.org/download/connectors},
|
||||
urldate = {2022-10-12},
|
||||
file = {Zotero | Connectors:/Users/victormylle/Zotero/storage/EPF3ZZRA/connectors.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_elia_nodate,
|
||||
title = {Elia: de electriciteitsmarkt en -systeem},
|
||||
url = {https://www.elia.be/nl/elektriciteitsmarkt-en-systeem},
|
||||
@@ -16,205 +9,6 @@
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/7QY94WTW/elektriciteitsmarkt-en-systeem.html:text/html},
|
||||
}
|
||||
|
||||
@misc{gao_easy--hard_2023,
|
||||
title = {Easy-to-Hard Learning for Information Extraction},
|
||||
url = {http://arxiv.org/abs/2305.09193},
|
||||
abstract = {Information extraction ({IE}) systems aim to automatically extract structured information, such as named entities, relations between entities, and events, from unstructured texts. While most existing work addresses a particular {IE} task, universally modeling various {IE} tasks with one model has achieved great success recently. Despite their success, they employ a one-stage learning strategy, i.e., directly learning to extract the target structure given the input text, which contradicts the human learning process. In this paper, we propose a unified easy-to-hard learning framework consisting of three stages, i.e., the easy stage, the hard stage, and the main stage, for {IE} by mimicking the human learning process. By breaking down the learning process into multiple stages, our framework facilitates the model to acquire general {IE} task knowledge and improve its generalization ability. Extensive experiments across four {IE} tasks demonstrate the effectiveness of our framework. We achieve new state-of-the-art results on 13 out of 17 datasets. Our code is available at {\textbackslash}url\{https://github.com/{DAMO}-{NLP}-{SG}/{IE}-E2H\}.},
|
||||
number = {{arXiv}:2305.09193},
|
||||
publisher = {{arXiv}},
|
||||
author = {Gao, Chang and Zhang, Wenxuan and Lam, Wai and Bing, Lidong},
|
||||
urldate = {2023-07-10},
|
||||
date = {2023-05-19},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2305.09193 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/5YBG5XYS/2305.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/D8LIDUE8/Gao et al. - 2023 - Easy-to-Hard Learning for Information Extraction.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{gaur_semi-supervised_2021,
|
||||
title = {Semi-supervised deep learning based named entity recognition model to parse education section of resumes},
|
||||
volume = {33},
|
||||
issn = {1433-3058},
|
||||
url = {https://doi.org/10.1007/s00521-020-05351-2},
|
||||
doi = {10.1007/s00521-020-05351-2},
|
||||
abstract = {A job seeker’s resume contains several sections, including educational qualifications. Educational qualifications capture the knowledge and skills relevant to the job. Machine processing of the education sections of resumes has been a difficult task. In this paper, we attempt to identify educational institutions’ names and degrees from a resume’s education section. Usually, a significant amount of annotated data is required for neural network-based named entity recognition techniques. A semi-supervised approach is used to overcome the lack of large annotated data. We trained a deep neural network model on an initial (seed) set of resume education sections. This model is used to predict entities of unlabeled education sections and is rectified using a correction module. The education sections containing the rectified entities are augmented to the seed set. The updated seed set is used for retraining, leading to better accuracy than the previously trained model. This way, it can provide a high overall accuracy without the need of large annotated data. Our model has achieved an accuracy of 92.06\% on the named entity recognition task.},
|
||||
pages = {5705--5718},
|
||||
number = {11},
|
||||
journaltitle = {Neural Computing and Applications},
|
||||
shortjournal = {Neural Comput \& Applic},
|
||||
author = {Gaur, Bodhvi and Saluja, Gurpreet Singh and Sivakumar, Hamsa Bharathi and Singh, Sanjay},
|
||||
urldate = {2023-07-10},
|
||||
date = {2021-06-01},
|
||||
langid = {english},
|
||||
keywords = {Deep learning models, Named entity recognition ({NER}), Natural language processing, Resume information extraction, Semi-supervised learning},
|
||||
file = {Full Text PDF:/Users/victormylle/Zotero/storage/4NK6IXHZ/Gaur et al. - 2021 - Semi-supervised deep learning based named entity r.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{landolsi_information_2023,
|
||||
title = {Information extraction from electronic medical documents: state of the art and future research directions},
|
||||
volume = {65},
|
||||
issn = {0219-3116},
|
||||
url = {https://doi.org/10.1007/s10115-022-01779-1},
|
||||
doi = {10.1007/s10115-022-01779-1},
|
||||
shorttitle = {Information extraction from electronic medical documents},
|
||||
abstract = {In the medical field, a doctor must have a comprehensive knowledge by reading and writing narrative documents, and he is responsible for every decision he takes for patients. Unfortunately, it is very tiring to read all necessary information about drugs, diseases and patients due to the large amount of documents that are increasing every day. Consequently, so many medical errors can happen and even kill people. Likewise, there is such an important field that can handle this problem, which is the information extraction. There are several important tasks in this field to extract the important and desired information from unstructured text written in natural language. The main principal tasks are named entity recognition and relation extraction since they can structure the text by extracting the relevant information. However, in order to treat the narrative text we should use natural language processing techniques to extract useful information and features. In our paper, we introduce and discuss the several techniques and solutions used in these tasks. Furthermore, we outline the challenges in information extraction from medical documents. In our knowledge, this is the most comprehensive survey in the literature with an experimental analysis and a suggestion for some uncovered directions.},
|
||||
pages = {463--516},
|
||||
number = {2},
|
||||
journaltitle = {Knowledge and Information Systems},
|
||||
shortjournal = {Knowl Inf Syst},
|
||||
author = {Landolsi, Mohamed Yassine and Hlaoua, Lobna and Ben Romdhane, Lotfi},
|
||||
urldate = {2023-07-10},
|
||||
date = {2023-02-01},
|
||||
langid = {english},
|
||||
keywords = {Electronic medical records, Information extraction, Medical named entities recognition, Medical relation extraction, Section detection},
|
||||
file = {Full Text PDF:/Users/victormylle/Zotero/storage/KRTKZW3M/Landolsi et al. - 2023 - Information extraction from electronic medical doc.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@inproceedings{fu_spanner_2021,
|
||||
location = {Online},
|
||||
title = {{SpanNER}: Named Entity Re-/Recognition as Span Prediction},
|
||||
url = {https://aclanthology.org/2021.acl-long.558},
|
||||
doi = {10.18653/v1/2021.acl-long.558},
|
||||
shorttitle = {{SpanNER}},
|
||||
abstract = {Recent years have seen the paradigm shift of Named Entity Recognition ({NER}) systems from sequence labeling to span prediction. Despite its preliminary effectiveness, the span prediction model's architectural bias has not been fully understood. In this paper, we first investigate the strengths and weaknesses when the span prediction model is used for named entity recognition compared with the sequence labeling framework and how to further improve it, which motivates us to make complementary advantages of systems based on different paradigms. We then reveal that span prediction, simultaneously, can serve as a system combiner to re-recognize named entities from different systems' outputs. We experimentally implement 154 systems on 11 datasets, covering three languages, comprehensive results show the effectiveness of span prediction models that both serve as base {NER} systems and system combiners. We make all codes and datasets available: https://github.com/neulab/spanner, as well as an online system demo: http://spanner.sh. Our model also has been deployed into the {ExplainaBoard} platform, which allows users to flexibly perform a system combination of top-scoring systems in an interactive way: http://explainaboard.nlpedia.ai/leaderboard/task-ner/.},
|
||||
eventtitle = {{ACL}-{IJCNLP} 2021},
|
||||
pages = {7183--7195},
|
||||
booktitle = {Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers)},
|
||||
publisher = {Association for Computational Linguistics},
|
||||
author = {Fu, Jinlan and Huang, Xuanjing and Liu, Pengfei},
|
||||
urldate = {2023-07-10},
|
||||
date = {2021-08},
|
||||
file = {Full Text PDF:/Users/victormylle/Zotero/storage/6JU4DR5Y/Fu et al. - 2021 - SpanNER Named Entity Re-Recognition as Span Pred.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@inproceedings{li_unified_2020,
|
||||
location = {Online},
|
||||
title = {A Unified {MRC} Framework for Named Entity Recognition},
|
||||
url = {https://aclanthology.org/2020.acl-main.519},
|
||||
doi = {10.18653/v1/2020.acl-main.519},
|
||||
abstract = {The task of named entity recognition ({NER}) is normally divided into nested {NER} and flat {NER} depending on whether named entities are nested or not.Models are usually separately developed for the two tasks, since sequence labeling models, the most widely used backbone for flat {NER}, are only able to assign a single label to a particular token, which is unsuitable for nested {NER} where a token may be assigned several labels. In this paper, we propose a unified framework that is capable of handling both flat and nested {NER} tasks. Instead of treating the task of {NER} as a sequence labeling problem, we propose to formulate it as a machine reading comprehension ({MRC}) task. For example, extracting entities with the per label is formalized as extracting answer spans to the question “which person is mentioned in the text”.This formulation naturally tackles the entity overlapping issue in nested {NER}: the extraction of two overlapping entities with different categories requires answering two independent questions. Additionally, since the query encodes informative prior knowledge, this strategy facilitates the process of entity extraction, leading to better performances for not only nested {NER}, but flat {NER}. We conduct experiments on both nested and flat {NER} datasets.Experiment results demonstrate the effectiveness of the proposed formulation. We are able to achieve a vast amount of performance boost over current {SOTA} models on nested {NER} datasets, i.e., +1.28, +2.55, +5.44, +6.37,respectively on {ACE}04, {ACE}05, {GENIA} and {KBP}17, along with {SOTA} results on flat {NER} datasets, i.e., +0.24, +1.95, +0.21, +1.49 respectively on English {CoNLL} 2003, English {OntoNotes} 5.0, Chinese {MSRA} and Chinese {OntoNotes} 4.0.},
|
||||
eventtitle = {{ACL} 2020},
|
||||
pages = {5849--5859},
|
||||
booktitle = {Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics},
|
||||
publisher = {Association for Computational Linguistics},
|
||||
author = {Li, Xiaoya and Feng, Jingrong and Meng, Yuxian and Han, Qinghong and Wu, Fei and Li, Jiwei},
|
||||
urldate = {2023-07-10},
|
||||
date = {2020-07},
|
||||
file = {Full Text PDF:/Users/victormylle/Zotero/storage/TIVIKNGN/Li et al. - 2020 - A Unified MRC Framework for Named Entity Recogniti.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{decorte_jobbert_2021,
|
||||
title = {{JobBERT}: Understanding Job Titles through Skills},
|
||||
url = {http://arxiv.org/abs/2109.09605},
|
||||
shorttitle = {{JobBERT}},
|
||||
abstract = {Job titles form a cornerstone of today's human resources ({HR}) processes. Within online recruitment, they allow candidates to understand the contents of a vacancy at a glance, while internal {HR} departments use them to organize and structure many of their processes. As job titles are a compact, convenient, and readily available data source, modeling them with high accuracy can greatly benefit many {HR} tech applications. In this paper, we propose a neural representation model for job titles, by augmenting a pre-trained language model with co-occurrence information from skill labels extracted from vacancies. Our {JobBERT} method leads to considerable improvements compared to using generic sentence encoders, for the task of job title normalization, for which we release a new evaluation benchmark.},
|
||||
number = {{arXiv}:2109.09605},
|
||||
publisher = {{arXiv}},
|
||||
author = {Decorte, Jens-Joris and Van Hautte, Jeroen and Demeester, Thomas and Develder, Chris},
|
||||
urldate = {2023-07-20},
|
||||
date = {2021-09-20},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2109.09605 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
}
|
||||
|
||||
@misc{sun_retentive_2023,
|
||||
title = {Retentive Network: A Successor to Transformer for Large Language Models},
|
||||
url = {http://arxiv.org/abs/2307.08621},
|
||||
shorttitle = {Retentive Network},
|
||||
abstract = {In this work, we propose Retentive Network ({RetNet}) as a foundation architecture for large language models, simultaneously achieving training parallelism, low-cost inference, and good performance. We theoretically derive the connection between recurrence and attention. Then we propose the retention mechanism for sequence modeling, which supports three computation paradigms, i.e., parallel, recurrent, and chunkwise recurrent. Specifically, the parallel representation allows for training parallelism. The recurrent representation enables low-cost \$O(1)\$ inference, which improves decoding throughput, latency, and {GPU} memory without sacrificing performance. The chunkwise recurrent representation facilitates efficient long-sequence modeling with linear complexity, where each chunk is encoded parallelly while recurrently summarizing the chunks. Experimental results on language modeling show that {RetNet} achieves favorable scaling results, parallel training, low-cost deployment, and efficient inference. The intriguing properties make {RetNet} a strong successor to Transformer for large language models. Code will be available at https://aka.ms/retnet.},
|
||||
number = {{arXiv}:2307.08621},
|
||||
publisher = {{arXiv}},
|
||||
author = {Sun, Yutao and Dong, Li and Huang, Shaohan and Ma, Shuming and Xia, Yuqing and Xue, Jilong and Wang, Jianyong and Wei, Furu},
|
||||
urldate = {2023-07-25},
|
||||
date = {2023-07-19},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2307.08621 [cs]},
|
||||
keywords = {Computer Science - Computation and Language, Computer Science - Machine Learning},
|
||||
}
|
||||
|
||||
@misc{zhang_generation-driven_2023,
|
||||
title = {Generation-driven Contrastive Self-training for Zero-shot Text Classification with Instruction-tuned {GPT}},
|
||||
url = {http://arxiv.org/abs/2304.11872},
|
||||
abstract = {Moreover, {GPT}-based zero-shot classification models tend to make independent predictions over test instances, which can be sub-optimal as the instance correlations and the decision boundaries in the target space are ignored. To address these difficulties and limitations, we propose a new approach to zero-shot text classification, namely {\textbackslash}ourmodelshort, which leverages the strong generative power of {GPT} to assist in training a smaller, more adaptable, and efficient sentence encoder classifier with contrastive self-training. Specifically, {GenCo} applies {GPT} in two ways: firstly, it generates multiple augmented texts for each input instance to enhance the semantic embedding of the instance and improve the mapping to relevant labels; secondly, it generates augmented texts conditioned on the predicted label during self-training, which makes the generative process tailored to the decision boundaries in the target space. In our experiments, {GenCo} outperforms previous state-of-the-art methods on multiple benchmark datasets, even when only limited in-domain text data is available.},
|
||||
number = {{arXiv}:2304.11872},
|
||||
publisher = {{arXiv}},
|
||||
author = {Zhang, Ruohong and Wang, Yau-Shian and Yang, Yiming},
|
||||
urldate = {2023-08-01},
|
||||
date = {2023-04-24},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2304.11872 [cs]},
|
||||
keywords = {Computer Science - Computation and Language, Computer Science - Artificial Intelligence, interesting},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/2ULMRMN5/2304.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/D98MRNHP/Zhang et al. - 2023 - Generation-driven Contrastive Self-training for Ze.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{zhang_clusterllm_2023,
|
||||
title = {{ClusterLLM}: Large Language Models as a Guide for Text Clustering},
|
||||
url = {http://arxiv.org/abs/2305.14871},
|
||||
shorttitle = {{ClusterLLM}},
|
||||
abstract = {We introduce {ClusterLLM}, a novel text clustering framework that leverages feedback from an instruction-tuned large language model, such as {ChatGPT}. Compared with traditional unsupervised methods that builds upon "small" embedders, {ClusterLLM} exhibits two intriguing advantages: (1) it enjoys the emergent capability of {LLM} even if its embeddings are inaccessible; and (2) it understands the user's preference on clustering through textual instruction and/or a few annotated data. First, we prompt {ChatGPT} for insights on clustering perspective by constructing hard triplet questions {\textless}does A better correspond to B than C{\textgreater}, where A, B and C are similar data points that belong to different clusters according to small embedder. We empirically show that this strategy is both effective for fine-tuning small embedder and cost-efficient to query {ChatGPT}. Second, we prompt {ChatGPT} for helps on clustering granularity by carefully designed pairwise questions {\textless}do A and B belong to the same category{\textgreater}, and tune the granularity from cluster hierarchies that is the most consistent with the {ChatGPT} answers. Extensive experiments on 14 datasets show that {ClusterLLM} consistently improves clustering quality, at an average cost of {\textasciitilde}\$0.6 per dataset.},
|
||||
number = {{arXiv}:2305.14871},
|
||||
publisher = {{arXiv}},
|
||||
author = {Zhang, Yuwei and Wang, Zihan and Shang, Jingbo},
|
||||
urldate = {2023-08-08},
|
||||
date = {2023-05-24},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2305.14871 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
}
|
||||
|
||||
@misc{zhang_clusterllm_2023-1,
|
||||
title = {{ClusterLLM}: Large Language Models as a Guide for Text Clustering},
|
||||
url = {http://arxiv.org/abs/2305.14871},
|
||||
shorttitle = {{ClusterLLM}},
|
||||
abstract = {We introduce {ClusterLLM}, a novel text clustering framework that leverages feedback from an instruction-tuned large language model, such as {ChatGPT}. Compared with traditional unsupervised methods that builds upon "small" embedders, {ClusterLLM} exhibits two intriguing advantages: (1) it enjoys the emergent capability of {LLM} even if its embeddings are inaccessible; and (2) it understands the user's preference on clustering through textual instruction and/or a few annotated data. First, we prompt {ChatGPT} for insights on clustering perspective by constructing hard triplet questions {\textless}does A better correspond to B than C{\textgreater}, where A, B and C are similar data points that belong to different clusters according to small embedder. We empirically show that this strategy is both effective for fine-tuning small embedder and cost-efficient to query {ChatGPT}. Second, we prompt {ChatGPT} for helps on clustering granularity by carefully designed pairwise questions {\textless}do A and B belong to the same category{\textgreater}, and tune the granularity from cluster hierarchies that is the most consistent with the {ChatGPT} answers. Extensive experiments on 14 datasets show that {ClusterLLM} consistently improves clustering quality, at an average cost of {\textasciitilde}\$0.6 per dataset.},
|
||||
number = {{arXiv}:2305.14871},
|
||||
publisher = {{arXiv}},
|
||||
author = {Zhang, Yuwei and Wang, Zihan and Shang, Jingbo},
|
||||
urldate = {2023-08-08},
|
||||
date = {2023-05-24},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2305.14871 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
}
|
||||
|
||||
@misc{zhang_clusterllm_2023-2,
|
||||
title = {{ClusterLLM}: Large Language Models as a Guide for Text Clustering},
|
||||
url = {http://arxiv.org/abs/2305.14871},
|
||||
shorttitle = {{ClusterLLM}},
|
||||
abstract = {We introduce {ClusterLLM}, a novel text clustering framework that leverages feedback from an instruction-tuned large language model, such as {ChatGPT}. Compared with traditional unsupervised methods that builds upon "small" embedders, {ClusterLLM} exhibits two intriguing advantages: (1) it enjoys the emergent capability of {LLM} even if its embeddings are inaccessible; and (2) it understands the user's preference on clustering through textual instruction and/or a few annotated data. First, we prompt {ChatGPT} for insights on clustering perspective by constructing hard triplet questions {\textless}does A better correspond to B than C{\textgreater}, where A, B and C are similar data points that belong to different clusters according to small embedder. We empirically show that this strategy is both effective for fine-tuning small embedder and cost-efficient to query {ChatGPT}. Second, we prompt {ChatGPT} for helps on clustering granularity by carefully designed pairwise questions {\textless}do A and B belong to the same category{\textgreater}, and tune the granularity from cluster hierarchies that is the most consistent with the {ChatGPT} answers. Extensive experiments on 14 datasets show that {ClusterLLM} consistently improves clustering quality, at an average cost of {\textasciitilde}\$0.6 per dataset.},
|
||||
number = {{arXiv}:2305.14871},
|
||||
publisher = {{arXiv}},
|
||||
author = {Zhang, Yuwei and Wang, Zihan and Shang, Jingbo},
|
||||
urldate = {2023-08-08},
|
||||
date = {2023-05-24},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2305.14871 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/68L6AESY/2305.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/VGWL9LRC/Zhang et al. - 2023 - ClusterLLM Large Language Models as a Guide for T.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{vijeikis_efficient_2022,
|
||||
title = {Efficient Violence Detection in Surveillance},
|
||||
volume = {22},
|
||||
rights = {http://creativecommons.org/licenses/by/3.0/},
|
||||
issn = {1424-8220},
|
||||
url = {https://www.mdpi.com/1424-8220/22/6/2216},
|
||||
doi = {10.3390/s22062216},
|
||||
abstract = {Intelligent video surveillance systems are rapidly being introduced to public places. The adoption of computer vision and machine learning techniques enables various applications for collected video features; one of the major is safety monitoring. The efficacy of violent event detection is measured by the efficiency and accuracy of violent event detection. In this paper, we present a novel architecture for violence detection from video surveillance cameras. Our proposed model is a spatial feature extracting a U-Net-like network that uses {MobileNet} V2 as an encoder followed by {LSTM} for temporal feature extraction and classification. The proposed model is computationally light and still achieves good results—experiments showed that an average accuracy is 0.82 ± 2\% and average precision is 0.81 ± 3\% using a complex real-world security camera footage dataset based on {RWF}-2000.},
|
||||
pages = {2216},
|
||||
number = {6},
|
||||
journaltitle = {Sensors},
|
||||
author = {Vijeikis, Romas and Raudonis, Vidas and Dervinis, Gintaras},
|
||||
urldate = {2023-08-08},
|
||||
date = {2022-01},
|
||||
langid = {english},
|
||||
note = {Number: 6
|
||||
Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
keywords = {computer vision, deep learning, intelligent video surveillance, {LSTM}, U-Net, violence detection, violent behavior},
|
||||
file = {Full Text PDF:/Users/victormylle/Zotero/storage/PSYA8YSJ/Vijeikis et al. - 2022 - Efficient Violence Detection in Surveillance.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{toubeau_interpretable_2022,
|
||||
title = {Interpretable Probabilistic Forecasting of Imbalances in Renewable-Dominated Electricity Systems},
|
||||
volume = {13},
|
||||
@@ -233,12 +27,6 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
file = {Toubeau et al. - 2022 - Interpretable Probabilistic Forecasting of Imbalan.pdf:/Users/victormylle/Zotero/storage/WA7DZBXX/Toubeau et al. - 2022 - Interpretable Probabilistic Forecasting of Imbalan.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{noauthor_deep_nodate,
|
||||
title = {Deep Generative Modelling: A Comparative Review of {VAEs}, {GANs}, Normalizing Flows, Energy-Based and Autoregressive Models {\textbar} {IEEE} Journals \& Magazine {\textbar} {IEEE} Xplore},
|
||||
url = {https://ieeexplore.ieee.org/document/9555209},
|
||||
urldate = {2023-10-11},
|
||||
}
|
||||
|
||||
@article{bond-taylor_deep_2022,
|
||||
title = {Deep Generative Modelling: A Comparative Review of {VAEs}, {GANs}, Normalizing Flows, Energy-Based and Autoregressive Models},
|
||||
volume = {44},
|
||||
@@ -368,39 +156,6 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/8LIRWZ4G/2101.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/QPPFJVR5/Rasul et al. - 2021 - Autoregressive Denoising Diffusion Models for Mult.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{noauthor_spacy_nodate,
|
||||
title = {{spaCy} · Industrial-strength Natural Language Processing in Python},
|
||||
url = {https://spacy.io/},
|
||||
abstract = {{spaCy} is a free open-source library for Natural Language Processing in Python. It features {NER}, {POS} tagging, dependency parsing, word vectors and more.},
|
||||
urldate = {2023-10-17},
|
||||
langid = {english},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/8WWDDEH4/spacy.io.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_intfloatmultilingual-e5-base_nodate,
|
||||
title = {intfloat/multilingual-e5-base · Hugging Face},
|
||||
url = {https://huggingface.co/intfloat/multilingual-e5-base},
|
||||
abstract = {We’re on a journey to advance and democratize artificial intelligence through open source and open science.},
|
||||
urldate = {2023-10-17},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/LYSDP8CD/multilingual-e5-base.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_googleflan-t5-base_nodate,
|
||||
title = {google/flan-t5-base · Hugging Face},
|
||||
url = {https://huggingface.co/google/flan-t5-base},
|
||||
urldate = {2023-10-17},
|
||||
file = {flan-t5-base · Hugging Face:/Users/victormylle/Zotero/storage/284DLNVT/flan-t5-base.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_openai_nodate,
|
||||
title = {{OpenAI} Platform},
|
||||
url = {https://platform.openai.com},
|
||||
abstract = {Explore developer resources, tutorials, {API} docs, and dynamic examples to get the most out of {OpenAI}'s platform.},
|
||||
urldate = {2023-10-17},
|
||||
langid = {english},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/9NFW3FCP/gpt-3-5.html:text/html},
|
||||
}
|
||||
|
||||
@article{cramer_normalizing_2022,
|
||||
title = {Normalizing flow-based day-ahead wind power scenario generation for profitable and reliable delivery commitments by wind farm operators},
|
||||
volume = {166},
|
||||
@@ -433,37 +188,6 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
file = {Full Text PDF:/Users/victormylle/Zotero/storage/U45EUFZU/Zhang and Chen - 2021 - Diffusion Normalizing Flow.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{rezende_variational_2016,
|
||||
title = {Variational Inference with Normalizing Flows},
|
||||
url = {http://arxiv.org/abs/1505.05770},
|
||||
abstract = {The choice of approximate posterior distribution is one of the core problems in variational inference. Most applications of variational inference employ simple families of posterior approximations in order to allow for efficient inference, focusing on mean-field or other simple structured approximations. This restriction has a significant impact on the quality of inferences made using variational methods. We introduce a new approach for specifying flexible, arbitrarily complex and scalable approximate posterior distributions. Our approximations are distributions constructed through a normalizing flow, whereby a simple initial density is transformed into a more complex one by applying a sequence of invertible transformations until a desired level of complexity is attained. We use this view of normalizing flows to develop categories of finite and infinitesimal flows and provide a unified view of approaches for constructing rich posterior approximations. We demonstrate that the theoretical advantages of having posteriors that better match the true posterior, combined with the scalability of amortized variational approaches, provides a clear improvement in performance and applicability of variational inference.},
|
||||
number = {{arXiv}:1505.05770},
|
||||
publisher = {{arXiv}},
|
||||
author = {Rezende, Danilo Jimenez and Mohamed, Shakir},
|
||||
urldate = {2023-10-18},
|
||||
date = {2016-06-14},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {1505.05770 [cs, stat]},
|
||||
note = {version: 6},
|
||||
keywords = {Computer Science - Machine Learning, Computer Science - Artificial Intelligence, Statistics - Machine Learning, Statistics - Computation, Statistics - Methodology},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/2J7MPVV5/1505.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/GQWIFAAN/Rezende and Mohamed - 2016 - Variational Inference with Normalizing Flows.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{gruver_large_2023,
|
||||
title = {Large Language Models Are Zero-Shot Time Series Forecasters},
|
||||
url = {http://arxiv.org/abs/2310.07820},
|
||||
doi = {10.48550/arXiv.2310.07820},
|
||||
abstract = {By encoding time series as a string of numerical digits, we can frame time series forecasting as next-token prediction in text. Developing this approach, we find that large language models ({LLMs}) such as {GPT}-3 and {LLaMA}-2 can surprisingly zero-shot extrapolate time series at a level comparable to or exceeding the performance of purpose-built time series models trained on the downstream tasks. To facilitate this performance, we propose procedures for effectively tokenizing time series data and converting discrete distributions over tokens into highly flexible densities over continuous values. We argue the success of {LLMs} for time series stems from their ability to naturally represent multimodal distributions, in conjunction with biases for simplicity, and repetition, which align with the salient features in many time series, such as repeated seasonal trends. We also show how {LLMs} can naturally handle missing data without imputation through non-numerical text, accommodate textual side information, and answer questions to help explain predictions. While we find that increasing model size generally improves performance on time series, we show {GPT}-4 can perform worse than {GPT}-3 because of how it tokenizes numbers, and poor uncertainty calibration, which is likely the result of alignment interventions such as {RLHF}.},
|
||||
number = {{arXiv}:2310.07820},
|
||||
author = {Gruver, Nate and Finzi, Marc and Qiu, Shikai and Wilson, Andrew Gordon},
|
||||
urldate = {2023-10-13},
|
||||
date = {2023-10-11},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2310.07820 [cs]},
|
||||
keywords = {Computer Science - Machine Learning},
|
||||
file = {Gruver et al. - 2023 - Large Language Models Are Zero-Shot Time Series Forecasters.pdf:/Users/victormylle/Zotero/storage/T5XZ227W/Gruver et al. - 2023 - Large Language Models Are Zero-Shot Time Series Forecasters.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{sweidan_probabilistic_nodate,
|
||||
title = {Probabilistic Prediction in scikit-learn},
|
||||
abstract = {Adding confidence measures to predictive models should increase the trustworthiness, but only if the models are well-calibrated. Historically, some algorithms like logistic regression, but also neural networks, have been considered to produce well-calibrated probability estimates off-the-shelf. Other techniques, like decision trees and Naive Bayes, on the other hand, are infamous for being significantly overconfident in their probabilistic predictions. In this paper, a large experimental study is conducted to investigate how well-calibrated models produced by a number of algorithms in the scikit-learn library are out-of-the-box, but also if either the built-in calibration techniques Platt scaling and isotonic regression, or Venn-Abers, can be used to improve the calibration. The results show that of the seven algorithms evaluated, the only one obtaining well-calibrated models without the external calibration is logistic regression. All other algorithms, i.e., decision trees, adaboost, gradient boosting, {kNN}, naive Bayes and random forest benefit from using any of the calibration techniques. In particular, decision trees, Naive Bayes and the boosted models are substantially improved using external calibration. From a practitioner’s perspective, the obvious recommendation becomes to incorporate calibration when using probabilistic prediction. Comparing the different calibration techniques, Platt scaling and {VennAbers} generally outperform isotonic regression, on these rather small datasets. Finally, the unique ability of Venn-Abers to output not only well-calibrated probability estimates, but also the confidence in these estimates is demonstrated.},
|
||||
@@ -490,49 +214,6 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
file = {Baskan et al. - 2023 - A Scenario-Based Model Comparison for Short-Term D.pdf:/Users/victormylle/Zotero/storage/TU5JX5D4/Baskan et al. - 2023 - A Scenario-Based Model Comparison for Short-Term D.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{tsaprounis_metrics_2023,
|
||||
title = {Metrics for Distributional Forecasts},
|
||||
url = {https://medium.com/trusted-data-science-haleon/metrics-for-distributional-forecasts-60e156c60177},
|
||||
abstract = {How to evaluate distributional/probabilistic time series forecasts in Python.},
|
||||
titleaddon = {Trusted Data Science @ Haleon},
|
||||
author = {Tsaprounis, Leonidas},
|
||||
urldate = {2023-10-24},
|
||||
date = {2023-02-27},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@misc{roy_recent_2021,
|
||||
title = {Recent Trends in Named Entity Recognition ({NER})},
|
||||
url = {http://arxiv.org/abs/2101.11420},
|
||||
doi = {10.48550/arXiv.2101.11420},
|
||||
abstract = {The availability of large amounts of computer-readable textual data and hardware that can process the data has shifted the focus of knowledge projects towards deep learning architecture. Natural Language Processing, particularly the task of Named Entity Recognition is no exception. The bulk of the learning methods that have produced state-of-the-art results have changed the deep learning model, the training method used, the training data itself or the encoding of the output of the {NER} system. In this paper, we review significant learning methods that have been employed for {NER} in the recent past and how they came about from the linear learning methods of the past. We also cover the progress of related tasks that are upstream or downstream to {NER}, e.g., sequence tagging, entity linking, etc., wherever the processes in question have also improved {NER} results.},
|
||||
number = {{arXiv}:2101.11420},
|
||||
publisher = {{arXiv}},
|
||||
author = {Roy, Arya},
|
||||
urldate = {2023-10-24},
|
||||
date = {2021-01-25},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2101.11420 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
file = {arXiv Fulltext PDF:/Users/victormylle/Zotero/storage/AAZ3I43G/Roy - 2021 - Recent Trends in Named Entity Recognition (NER).pdf:application/pdf;arXiv.org Snapshot:/Users/victormylle/Zotero/storage/DWNPFLCX/2101.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_sentencetransformers_nodate,
|
||||
title = {{SentenceTransformers} Documentation — Sentence-Transformers documentation},
|
||||
url = {https://www.sbert.net/},
|
||||
urldate = {2023-10-29},
|
||||
file = {SentenceTransformers Documentation — Sentence-Transformers documentation:/Users/victormylle/Zotero/storage/7ZPK2DIZ/www.sbert.net.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_hugging_2023,
|
||||
title = {Hugging Face – The {AI} community building the future.},
|
||||
url = {https://huggingface.co/},
|
||||
abstract = {We’re on a journey to advance and democratize artificial intelligence through open source and open science.},
|
||||
urldate = {2023-10-29},
|
||||
date = {2023-10-22},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/8U9I2BD9/huggingface.co.html:text/html},
|
||||
}
|
||||
|
||||
@misc{narayan_regularization_2021,
|
||||
title = {Regularization Strategies for Quantile Regression},
|
||||
url = {http://arxiv.org/abs/2102.05135},
|
||||
@@ -565,98 +246,6 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/WWFHI3UN/2011.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/SHMRZ3Q7/Chung et al. - 2021 - Beyond Pinball Loss Quantile Methods for Calibrat.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{van_hautte_bad_2019,
|
||||
title = {Bad Form: Comparing Context-Based and Form-Based Few-Shot Learning in Distributional Semantic Models},
|
||||
url = {http://arxiv.org/abs/1910.00275},
|
||||
shorttitle = {Bad Form},
|
||||
abstract = {Word embeddings are an essential component in a wide range of natural language processing applications. However, distributional semantic models are known to struggle when only a small number of context sentences are available. Several methods have been proposed to obtain higher-quality vectors for these words, leveraging both this context information and sometimes the word forms themselves through a hybrid approach. We show that the current tasks do not suffice to evaluate models that use word-form information, as such models can easily leverage word forms in the training data that are related to word forms in the test data. We introduce 3 new tasks, allowing for a more balanced comparison between models. Furthermore, we show that hyperparameters that have largely been ignored in previous work can consistently improve the performance of both baseline and advanced models, achieving a new state of the art on 4 out of 6 tasks.},
|
||||
number = {{arXiv}:1910.00275},
|
||||
publisher = {{arXiv}},
|
||||
author = {Van Hautte, Jeroen and Emerson, Guy and Rei, Marek},
|
||||
urldate = {2024-03-09},
|
||||
date = {2019-10-01},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {1910.00275 [cs]},
|
||||
keywords = {Computer Science - Computation and Language, Computer Science - Machine Learning},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/PUBS4DRK/1910.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/VY5YGVXU/Van Hautte et al. - 2019 - Bad Form Comparing Context-Based and Form-Based F.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{decorte_jobbert_2021-1,
|
||||
title = {{JobBERT}: Understanding Job Titles through Skills},
|
||||
url = {http://arxiv.org/abs/2109.09605},
|
||||
shorttitle = {{JobBERT}},
|
||||
abstract = {Job titles form a cornerstone of today's human resources ({HR}) processes. Within online recruitment, they allow candidates to understand the contents of a vacancy at a glance, while internal {HR} departments use them to organize and structure many of their processes. As job titles are a compact, convenient, and readily available data source, modeling them with high accuracy can greatly benefit many {HR} tech applications. In this paper, we propose a neural representation model for job titles, by augmenting a pre-trained language model with co-occurrence information from skill labels extracted from vacancies. Our {JobBERT} method leads to considerable improvements compared to using generic sentence encoders, for the task of job title normalization, for which we release a new evaluation benchmark.},
|
||||
number = {{arXiv}:2109.09605},
|
||||
publisher = {{arXiv}},
|
||||
author = {Decorte, Jens-Joris and Van Hautte, Jeroen and Demeester, Thomas and Develder, Chris},
|
||||
urldate = {2024-03-09},
|
||||
date = {2021-09-20},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2109.09605 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/6FMYQ68Y/2109.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/2SD3P252/Decorte et al. - 2021 - JobBERT Understanding Job Titles through Skills.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{van_hautte_leveraging_2020,
|
||||
title = {Leveraging the Inherent Hierarchy of Vacancy Titles for Automated Job Ontology Expansion},
|
||||
url = {http://arxiv.org/abs/2004.02814},
|
||||
abstract = {Machine learning plays an ever-bigger part in online recruitment, powering intelligent matchmaking and job recommendations across many of the world's largest job platforms. However, the main text is rarely enough to fully understand a job posting: more often than not, much of the required information is condensed into the job title. Several organised efforts have been made to map job titles onto a hand-made knowledge base as to provide this information, but these only cover around 60{\textbackslash}\% of online vacancies. We introduce a novel, purely data-driven approach towards the detection of new job titles. Our method is conceptually simple, extremely efficient and competitive with traditional {NER}-based approaches. Although the standalone application of our method does not outperform a finetuned {BERT} model, it can be applied as a preprocessing step as well, substantially boosting accuracy across several architectures.},
|
||||
number = {{arXiv}:2004.02814},
|
||||
publisher = {{arXiv}},
|
||||
author = {Van Hautte, Jeroen and Schelstraete, Vincent and Wornoo, Mikaël},
|
||||
urldate = {2024-03-09},
|
||||
date = {2020-04-06},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2004.02814 [cs]},
|
||||
keywords = {Computer Science - Computation and Language, Computer Science - Machine Learning},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/6FAKZYDM/2004.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/EY3RNC6S/Van Hautte et al. - 2020 - Leveraging the Inherent Hierarchy of Vacancy Title.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{decorte_design_2022,
|
||||
title = {Design of Negative Sampling Strategies for Distantly Supervised Skill Extraction},
|
||||
url = {http://arxiv.org/abs/2209.05987},
|
||||
abstract = {Skills play a central role in the job market and many human resources ({HR}) processes. In the wake of other digital experiences, today's online job market has candidates expecting to see the right opportunities based on their skill set. Similarly, enterprises increasingly need to use data to guarantee that the skills within their workforce remain future-proof. However, structured information about skills is often missing, and processes building on self- or manager-assessment have shown to struggle with issues around adoption, completeness, and freshness of the resulting data. Extracting skills is a highly challenging task, given the many thousands of possible skill labels mentioned either explicitly or merely described implicitly and the lack of finely annotated training corpora. Previous work on skill extraction overly simplifies the task to an explicit entity detection task or builds on manually annotated training data that would be infeasible if applied to a complete vocabulary of skills. We propose an end-to-end system for skill extraction, based on distant supervision through literal matching. We propose and evaluate several negative sampling strategies, tuned on a small validation dataset, to improve the generalization of skill extraction towards implicitly mentioned skills, despite the lack of such implicit skills in the distantly supervised data. We observe that using the {ESCO} taxonomy to select negative examples from related skills yields the biggest improvements, and combining three different strategies in one model further increases the performance, up to 8 percentage points in {RP}@5. We introduce a manually annotated evaluation benchmark for skill extraction based on the {ESCO} taxonomy, on which we validate our models. We release the benchmark dataset for research purposes to stimulate further research on the task.},
|
||||
number = {{arXiv}:2209.05987},
|
||||
publisher = {{arXiv}},
|
||||
author = {Decorte, Jens-Joris and Van Hautte, Jeroen and Deleu, Johannes and Develder, Chris and Demeester, Thomas},
|
||||
urldate = {2024-03-09},
|
||||
date = {2022-09-13},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2209.05987 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/E79F2EV8/2209.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/SBEAYV66/Decorte et al. - 2022 - Design of Negative Sampling Strategies for Distant.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{decorte_extreme_2023,
|
||||
title = {Extreme Multi-Label Skill Extraction Training using Large Language Models},
|
||||
url = {http://arxiv.org/abs/2307.10778},
|
||||
abstract = {Online job ads serve as a valuable source of information for skill requirements, playing a crucial role in labor market analysis and e-recruitment processes. Since such ads are typically formatted in free text, natural language processing ({NLP}) technologies are required to automatically process them. We specifically focus on the task of detecting skills (mentioned literally, or implicitly described) and linking them to a large skill ontology, making it a challenging case of extreme multi-label classification ({XMLC}). Given that there is no sizable labeled (training) dataset are available for this specific {XMLC} task, we propose techniques to leverage general Large Language Models ({LLMs}). We describe a cost-effective approach to generate an accurate, fully synthetic labeled dataset for skill extraction, and present a contrastive learning strategy that proves effective in the task. Our results across three skill extraction benchmarks show a consistent increase of between 15 to 25 percentage points in {\textbackslash}textit\{R-Precision@5\} compared to previously published results that relied solely on distant supervision through literal matches.},
|
||||
number = {{arXiv}:2307.10778},
|
||||
publisher = {{arXiv}},
|
||||
author = {Decorte, Jens-Joris and Verlinden, Severine and Van Hautte, Jeroen and Deleu, Johannes and Develder, Chris and Demeester, Thomas},
|
||||
urldate = {2024-03-09},
|
||||
date = {2023-07-20},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2307.10778 [cs]},
|
||||
keywords = {Computer Science - Computation and Language},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/VVZZQW45/2307.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/8U7P43IE/Decorte et al. - 2023 - Extreme Multi-Label Skill Extraction Training usin.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{decorte_career_2023,
|
||||
title = {Career Path Prediction using Resume Representation Learning and Skill-based Matching},
|
||||
url = {http://arxiv.org/abs/2310.15636},
|
||||
abstract = {The impact of person-job fit on job satisfaction and performance is widely acknowledged, which highlights the importance of providing workers with next steps at the right time in their career. This task of predicting the next step in a career is known as career path prediction, and has diverse applications such as turnover prevention and internal job mobility. Existing methods to career path prediction rely on large amounts of private career history data to model the interactions between job titles and companies. We propose leveraging the unexplored textual descriptions that are part of work experience sections in resumes. We introduce a structured dataset of 2,164 anonymized career histories, annotated with {ESCO} occupation labels. Based on this dataset, we present a novel representation learning approach, {CareerBERT}, specifically designed for work history data. We develop a skill-based model and a text-based model for career path prediction, which achieve 35.24\% and 39.61\% recall@10 respectively on our dataset. Finally, we show that both approaches are complementary as a hybrid approach achieves the strongest result with 43.01\% recall@10.},
|
||||
number = {{arXiv}:2310.15636},
|
||||
publisher = {{arXiv}},
|
||||
author = {Decorte, Jens-Joris and Van Hautte, Jeroen and Deleu, Johannes and Develder, Chris and Demeester, Thomas},
|
||||
urldate = {2024-03-09},
|
||||
date = {2023-10-24},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2310.15636 [cs]},
|
||||
keywords = {Computer Science - Computation and Language, Computer Science - Artificial Intelligence},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/I6AMKGVA/2310.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/AKTKCWBR/Decorte et al. - 2023 - Career Path Prediction using Resume Representation.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{noauthor_liberalised_nodate,
|
||||
title = {The liberalised electricity market includes many parties who all have to work together and at the same time try to make a profit. An overview of the most...},
|
||||
url = {https://www.next-kraftwerke.be/en/knowledge-hub/players-in-the-belgian-power-market/},
|
||||
@@ -697,13 +286,6 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
file = {arXiv.org Snapshot:/Users/victormylle/Zotero/storage/3N56FPYP/2106.html:text/html;Full Text PDF:/Users/victormylle/Zotero/storage/958MBH5M/Dumas et al. - 2019 - Probabilistic Forecasting of Imbalance Prices in t.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{noauthor_ghent_nodate,
|
||||
title = {Ghent University: Master of Science in Computer Science Engineering},
|
||||
url = {https://studiekiezer.ugent.be/2024/master-of-science-in-computer-science-engineering-en},
|
||||
urldate = {2024-04-17},
|
||||
file = {master-of-science-in-computer-science-engineering-en:/Users/victormylle/Zotero/storage/JCELQ9VV/master-of-science-in-computer-science-engineering-en.html:text/html},
|
||||
}
|
||||
|
||||
@article{gunduz_transfer_2023,
|
||||
title = {Transfer learning for electricity price forecasting},
|
||||
volume = {34},
|
||||
@@ -754,7 +336,7 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
author = {Weron, Rafał},
|
||||
urldate = {2024-05-02},
|
||||
date = {2014-10-01},
|
||||
keywords = {Autoregression, Day-ahead market, Electricity price forecasting, Factor model, Forecast combination, Neural network, Probabilistic forecast, Seasonality},
|
||||
keywords = {Electricity price forecasting, Autoregression, Day-ahead market, Factor model, Forecast combination, Neural network, Probabilistic forecast, Seasonality},
|
||||
file = {ScienceDirect Snapshot:/Users/victormylle/Zotero/storage/DDGF263F/S0169207014001083.html:text/html},
|
||||
}
|
||||
|
||||
@@ -776,6 +358,344 @@ Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
langid = {english},
|
||||
note = {Number: 2
|
||||
Publisher: Multidisciplinary Digital Publishing Institute},
|
||||
keywords = {autoregressive, deep learning, electricity price forecasting, machine learning, neural network, statistical method, univariate model},
|
||||
keywords = {deep learning, autoregressive, electricity price forecasting, machine learning, neural network, statistical method, univariate model},
|
||||
file = {Full Text PDF:/Users/victormylle/Zotero/storage/3IR29RU3/Poggi et al. - 2023 - Electricity Price Forecasting via Statistical and .pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{noauthor_welcome_nodate,
|
||||
title = {Welcome — Elia Open Data Portal},
|
||||
url = {https://opendata.elia.be/pages/home/},
|
||||
urldate = {2024-05-18},
|
||||
file = {Welcome — Elia Open Data Portal:/Users/victormylle/Zotero/storage/SYR9PM3Z/home.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_imbalance_nodate,
|
||||
title = {Imbalance prices per quarter-hour (Historical data)},
|
||||
url = {https://opendata.elia.be/explore/dataset/ods047/information/?sort=datetime},
|
||||
abstract = {System imbalance prices applied if an imbalance is found between injections and offtakes in a balance responsible parties ({BRPs}) balance area. When imbalance prices are published on a quarter-hourly basis, the published prices have not yet been validated and can therefore only be used as an indication of the imbalance price.Only after the published prices have been validated can they be used for invoicing purposes. The records for month M are validated after the 15th of month M+1. Contains the historical data and is refreshed daily.This dataset contains data until 21/05/2024 (before {MARI} local go-live).},
|
||||
urldate = {2024-05-18},
|
||||
langid = {british},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/PZI6PTQ2/information.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_measured_nodate,
|
||||
title = {Measured and forecasted total load on the Belgian grid (Historical data)},
|
||||
url = {https://opendata.elia.be/explore/dataset/ods001/table/?sort=datetime},
|
||||
abstract = {Measured and upscaled, most recent, day-ahead and week-ahead forecasts for total load on the Belgian grid.},
|
||||
urldate = {2024-05-18},
|
||||
langid = {british},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/8857IXIQ/table.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_measured_nodate-1,
|
||||
title = {Measured and forecasted total load on the Belgian grid (Historical data)},
|
||||
url = {https://opendata.elia.be/explore/dataset/ods001/table/?sort=datetime},
|
||||
abstract = {Measured and upscaled, most recent, day-ahead and week-ahead forecasts for total load on the Belgian grid.},
|
||||
urldate = {2024-05-18},
|
||||
langid = {british},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/88FLT7BA/table.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_photovoltaic_nodate,
|
||||
title = {Photovoltaic power production estimation and forecast on Belgian grid (Historical)},
|
||||
url = {https://opendata.elia.be/explore/dataset/ods032/table/?sort=datetime},
|
||||
abstract = {Measured and upscaled photovoltaic power generation on the Belgian grid.Please note that the measured and forecast values are in {MW}, it is of the users responsibility to interpret the values as such.},
|
||||
urldate = {2024-05-18},
|
||||
langid = {british},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/7VB5YHYE/table.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_wind_nodate,
|
||||
title = {Wind power production estimation and forecast on Belgian grid (Historical)},
|
||||
url = {https://opendata.elia.be/explore/dataset/ods031/information/},
|
||||
abstract = {Measured and upscaled wind power generation on the Belgian grid.Please note that the measured and forecast values are in {MW}, it is of the users responsibility to interpret the values as such.},
|
||||
urldate = {2024-05-18},
|
||||
langid = {british},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/UTJUH5VQ/information.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_intraday_nodate,
|
||||
title = {Intraday implicit net position (Belgium's balance)},
|
||||
url = {https://opendata.elia.be/explore/dataset/ods022/information/?sort=datetime},
|
||||
abstract = {Net sum of intraday nominations of the implicit capacity allocated for energy exchanges for Belgium.},
|
||||
urldate = {2024-05-18},
|
||||
langid = {british},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/XJ7KBDWG/information.html:text/html},
|
||||
}
|
||||
|
||||
@misc{narajewski_probabilistic_2022,
|
||||
title = {Probabilistic forecasting of German electricity imbalance prices},
|
||||
url = {http://arxiv.org/abs/2205.11439},
|
||||
abstract = {The exponential growth of renewable energy capacity has brought much uncertainty to electricity prices and to electricity generation. To address this challenge, the energy exchanges have been developing further trading possibilities, especially the intraday and balancing markets. For an energy trader participating in both markets, the forecasting of imbalance prices is of particular interest. Therefore, in this manuscript we conduct a very short-term probabilistic forecasting of imbalance prices, contributing to the scarce literature in this novel subject. The forecasting is performed 30 minutes before the delivery, so that the trader might still choose the trading place. The distribution of the imbalance prices is modelled and forecasted using methods well-known in the electricity price forecasting literature: lasso with bootstrap, gamlss, and probabilistic neural networks. The methods are compared with a naive benchmark in a meaningful rolling window study. The results provide evidence of the efficiency between the intraday and balancing markets as the sophisticated methods do not substantially overperform the intraday continuous price index. On the other hand, they significantly improve the empirical coverage. The analysis was conducted on the German market, however it could be easily applied to any other market of similar structure.},
|
||||
number = {{arXiv}:2205.11439},
|
||||
publisher = {{arXiv}},
|
||||
author = {Narajewski, Michał},
|
||||
urldate = {2024-05-19},
|
||||
date = {2022-05-23},
|
||||
langid = {english},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2205.11439 [econ, q-fin, stat]},
|
||||
keywords = {Economics - Econometrics, Quantitative Finance - Statistical Finance, Statistics - Machine Learning},
|
||||
file = {Narajewski - 2022 - Probabilistic forecasting of German electricity im.pdf:/Users/victormylle/Zotero/storage/3D2WFRCD/Narajewski - 2022 - Probabilistic forecasting of German electricity im.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{noauthor_geliberaliseerde_nodate,
|
||||
title = {De geliberaliseerde elektriciteitsmarkt omvat vele partijen die allen samen moeten werken en tegelijkertijd proberen winst te maken. Hieronder volgt een...},
|
||||
url = {https://www.next-kraftwerke.be/nl/weten/spelers-energiemarkt},
|
||||
abstract = {De geliberaliseerde elektriciteitsmarkt omvat vele partijen die allen samen moeten werken en tegelijkertijd proberen winst te maken. Hieronder volgt een...},
|
||||
urldate = {2024-05-19},
|
||||
langid = {dutch},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/ZC2QU3PI/spelers-energiemarkt.html:text/html},
|
||||
}
|
||||
|
||||
@article{baetens_imbalance_nodate,
|
||||
title = {{IMBALANCE} {PRICE} {PREDICTION} {FOR} {THE} {IMPLICIT} {DEMAND} {RESPONSE} {POTENTIAL} {EVALUATION} {OF} {AN} {ELECTRODE} {BOILER}},
|
||||
abstract = {Increasing Renewable Energy Sources ({RES}) penetration in the electricity grid increases the electricity market price volatility. This mechanism could be economically exploited by electrifying the heat demand in industry. An electrode boiler could assist the existing gas-fired boiler in steam production, decreasing the overall {CO}2 intensity of the produced steam. In this work, the predictability of the Net Regulation Volume is shown and used to estimate the imbalance price for a current quarter-hour. The electrode boiler is steered based on the predicted imbalance price, making use of the price volatility and single imbalance pricing mechanism as used in Belgium.},
|
||||
author = {Baetens, Jens},
|
||||
langid = {english},
|
||||
file = {Baetens - IMBALANCE PRICE PREDICTION FOR THE IMPLICIT DEMAND.pdf:/Users/victormylle/Zotero/storage/EZ3MXHGN/Baetens - IMBALANCE PRICE PREDICTION FOR THE IMPLICIT DEMAND.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{rintamaki_does_2017,
|
||||
title = {Does renewable energy generation decrease the volatility of electricity prices? An analysis of Denmark and Germany},
|
||||
volume = {62},
|
||||
issn = {0140-9883},
|
||||
url = {https://www.sciencedirect.com/science/article/pii/S0140988317300063},
|
||||
doi = {10.1016/j.eneco.2016.12.019},
|
||||
shorttitle = {Does renewable energy generation decrease the volatility of electricity prices?},
|
||||
abstract = {Although variable renewable energy ({VRE}) technologies with zero marginal costs decrease electricity prices, the literature is inconclusive about how the resulting shift in the supply curves impacts price volatility. Because the flexibility to respond to high peak and low off-peak prices is crucial for demand-response applications and may compensate for the losses of conventional generators caused by lower average prices, there is a need to understand how the penetration of {VRE} affects volatility. In this paper, we build distributed lag models with Danish and German data to estimate the impact of {VRE} generation on electricity price volatility. We find that in Denmark wind power decreases the daily volatility of prices by flattening the hourly price profile, but in Germany it increases the volatility because it has a stronger impact on off-peak prices. Our analysis suggests that access to flexible generation capacity and wind power generation patterns contribute to these differing impacts. Meanwhile, solar power decreases price volatility in Germany. By contrast, the weekly volatility of prices increases in both areas due to the intermittency of {VRE}. Thus, policy measures for facilitating the integration of {VRE} should be tailored to such region-specific patterns.},
|
||||
pages = {270--282},
|
||||
journaltitle = {Energy Economics},
|
||||
shortjournal = {Energy Economics},
|
||||
author = {Rintamäki, Tuomas and Siddiqui, Afzal S. and Salo, Ahti},
|
||||
urldate = {2024-05-19},
|
||||
date = {2017-02-01},
|
||||
keywords = {{EEX}, Electricity price volatility, Nord Pool, Solar power, Time-series model, Wind power},
|
||||
file = {Submitted Version:/Users/victormylle/Zotero/storage/FN6FC96E/Rintamäki et al. - 2017 - Does renewable energy generation decrease the vola.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@report{commission_for_electricity_and_gas_regulation_creg_study_2023,
|
||||
location = {Brussels, Belgium},
|
||||
title = {Study on the Functioning and Price Evolution of the Belgian Wholesale Electricity Market - Monitoring Report 2022},
|
||||
url = {https://www.creg.be/sites/default/files/assets/Publications/Studies/F2537EN.pdf},
|
||||
number = {F2537},
|
||||
institution = {Commission for Electricity and Gas Regulation ({CREG})},
|
||||
author = {{Commission for Electricity and Gas Regulation (CREG)}},
|
||||
date = {2023-06},
|
||||
}
|
||||
|
||||
@online{noauthor_role_nodate,
|
||||
title = {Role of {BRP}},
|
||||
url = {https://www.elia.be/en/electricity-market-and-system/role-of-brp},
|
||||
urldate = {2024-05-19},
|
||||
langid = {english},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/RLRZAFBM/role-of-brp.html:text/html},
|
||||
}
|
||||
|
||||
@online{noauthor_fcr_nodate,
|
||||
title = {{FCR}},
|
||||
url = {https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/fcr},
|
||||
urldate = {2024-05-19},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@online{noauthor_afrr_nodate,
|
||||
title = {{aFRR}},
|
||||
url = {https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/afrr},
|
||||
urldate = {2024-05-19},
|
||||
langid = {english},
|
||||
}
|
||||
|
||||
@online{noauthor_mfrr_nodate,
|
||||
title = {{mFRR}},
|
||||
url = {https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/mfrr},
|
||||
urldate = {2024-05-19},
|
||||
langid = {english},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/P92IN76K/mfrr.html:text/html},
|
||||
}
|
||||
|
||||
@misc{elia_tariffs_2022,
|
||||
title = {Tariffs for Maintaining and Restoring the Residual Balance of Individual Access Responsible Parties},
|
||||
url = {https://www.elia.be/-/media/project/elia/elia-site/customers/tarrifs-and-invoicing/tariffs-and-invoicing/en/grille-tarifaire-desequilibre-2022-en-v20220214s.pdf},
|
||||
author = {{Elia}},
|
||||
date = {2022-02},
|
||||
}
|
||||
|
||||
@article{hagfors_modeling_2016,
|
||||
title = {Modeling the {UK} electricity price distributions using quantile regression},
|
||||
volume = {102},
|
||||
issn = {0360-5442},
|
||||
url = {https://www.sciencedirect.com/science/article/pii/S0360544216300688},
|
||||
doi = {10.1016/j.energy.2016.02.025},
|
||||
abstract = {In this paper we develop fundamental quantile regression models for the {UK} electricity price in each trading period. Intraday properties of price risk, as represented by the predictive distribution rather than expected values, have previously not been fully analyzed. The sample covers half hourly data from 2005 to 2012. From our analysis we are able to show how the sensitivity towards different fundamental factors changes across quantiles and time of day. In the {UK} the supply of electricity is to a large extent generated from coal and gas plants, thus the price of gas and coal, as well as the carbon emission price, are included as fundamental factors in our model. We also include the electricity price lagged by one day, as well as demand and margin forecasts. We find that the sensitivities vary across the price distribution. Our findings also suggest that the sensitivity to fundamental factors exhibit intraday variation. We find that the sensitivity to gas relative to coal is higher in high quantiles and lower in low quantiles, as well as some indications of market power being exercised during peak hours. We have demonstrated a scenario analysis based on the quantile regression models, showing how changes in the values of the fundamentals influence the electricity price distribution.},
|
||||
pages = {231--243},
|
||||
journaltitle = {Energy},
|
||||
shortjournal = {Energy},
|
||||
author = {Hagfors, Lars Ivar and Bunn, Derek and Kristoffersen, Eline and Staver, Tiril Toftdahl and Westgaard, Sjur},
|
||||
urldate = {2024-05-19},
|
||||
date = {2016-05-01},
|
||||
keywords = {Electricity markets, Prices, Quantile regression, Risk},
|
||||
file = {ScienceDirect Snapshot:/Users/victormylle/Zotero/storage/M3768XYM/S0360544216300688.html:text/html;Submitted Version:/Users/victormylle/Zotero/storage/X4EUFX4U/Hagfors et al. - 2016 - Modeling the UK electricity price distributions us.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{koenker_regression_1978,
|
||||
title = {Regression Quantiles},
|
||||
volume = {46},
|
||||
issn = {0012-9682},
|
||||
url = {https://www.jstor.org/stable/1913643},
|
||||
doi = {10.2307/1913643},
|
||||
abstract = {A simple minimization problem yielding the ordinary sample quantiles in the location model is shown to generalize naturally to the linear model generating a new class of statistics we term "regression quantiles." The estimator which minimizes the sum of absolute residuals is an important special case. Some equivariance properties and the joint asymptotic distribution of regression quantiles are established. These results permit a natural generalization of the linear model of certain well-known robust estimators of location. Estimators are suggested, which have comparable efficiency to least squares for Gaussian linear models while substantially out-performing the least-squares estimator over a wide class of non-Gaussian error distributions.},
|
||||
pages = {33--50},
|
||||
number = {1},
|
||||
journaltitle = {Econometrica},
|
||||
author = {Koenker, Roger and Bassett, Gilbert},
|
||||
urldate = {2024-05-19},
|
||||
date = {1978},
|
||||
note = {Publisher: [Wiley, Econometric Society]},
|
||||
file = {JSTOR Full Text PDF:/Users/victormylle/Zotero/storage/QK6JQA54/Koenker and Bassett - 1978 - Regression Quantiles.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@misc{dhariwal_diffusion_2021,
|
||||
title = {Diffusion Models Beat {GANs} on Image Synthesis},
|
||||
url = {http://arxiv.org/abs/2105.05233},
|
||||
doi = {10.48550/arXiv.2105.05233},
|
||||
abstract = {We show that diffusion models can achieve image sample quality superior to the current state-of-the-art generative models. We achieve this on unconditional image synthesis by finding a better architecture through a series of ablations. For conditional image synthesis, we further improve sample quality with classifier guidance: a simple, compute-efficient method for trading off diversity for fidelity using gradients from a classifier. We achieve an {FID} of 2.97 on {ImageNet} 128\${\textbackslash}times\$128, 4.59 on {ImageNet} 256\${\textbackslash}times\$256, and 7.72 on {ImageNet} 512\${\textbackslash}times\$512, and we match {BigGAN}-deep even with as few as 25 forward passes per sample, all while maintaining better coverage of the distribution. Finally, we find that classifier guidance combines well with upsampling diffusion models, further improving {FID} to 3.94 on {ImageNet} 256\${\textbackslash}times\$256 and 3.85 on {ImageNet} 512\${\textbackslash}times\$512. We release our code at https://github.com/openai/guided-diffusion},
|
||||
number = {{arXiv}:2105.05233},
|
||||
publisher = {{arXiv}},
|
||||
author = {Dhariwal, Prafulla and Nichol, Alex},
|
||||
urldate = {2024-05-19},
|
||||
date = {2021-06-01},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2105.05233 [cs, stat]},
|
||||
note = {version: 4},
|
||||
keywords = {Computer Science - Artificial Intelligence, Computer Science - Computer Vision and Pattern Recognition, Computer Science - Machine Learning, Statistics - Machine Learning},
|
||||
file = {arXiv Fulltext PDF:/Users/victormylle/Zotero/storage/YRPKR9RL/Dhariwal and Nichol - 2021 - Diffusion Models Beat GANs on Image Synthesis.pdf:application/pdf;arXiv.org Snapshot:/Users/victormylle/Zotero/storage/5W4HS765/2105.html:text/html},
|
||||
}
|
||||
|
||||
@misc{ho_classifier-free_2022,
|
||||
title = {Classifier-Free Diffusion Guidance},
|
||||
url = {http://arxiv.org/abs/2207.12598},
|
||||
doi = {10.48550/arXiv.2207.12598},
|
||||
abstract = {Classifier guidance is a recently introduced method to trade off mode coverage and sample fidelity in conditional diffusion models post training, in the same spirit as low temperature sampling or truncation in other types of generative models. Classifier guidance combines the score estimate of a diffusion model with the gradient of an image classifier and thereby requires training an image classifier separate from the diffusion model. It also raises the question of whether guidance can be performed without a classifier. We show that guidance can be indeed performed by a pure generative model without such a classifier: in what we call classifier-free guidance, we jointly train a conditional and an unconditional diffusion model, and we combine the resulting conditional and unconditional score estimates to attain a trade-off between sample quality and diversity similar to that obtained using classifier guidance.},
|
||||
number = {{arXiv}:2207.12598},
|
||||
publisher = {{arXiv}},
|
||||
author = {Ho, Jonathan and Salimans, Tim},
|
||||
urldate = {2024-05-19},
|
||||
date = {2022-07-25},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {2207.12598 [cs]},
|
||||
keywords = {Computer Science - Artificial Intelligence, Computer Science - Machine Learning},
|
||||
file = {arXiv Fulltext PDF:/Users/victormylle/Zotero/storage/8AB5GKED/Ho and Salimans - 2022 - Classifier-Free Diffusion Guidance.pdf:application/pdf;arXiv.org Snapshot:/Users/victormylle/Zotero/storage/JDFPZBZW/2207.html:text/html},
|
||||
}
|
||||
|
||||
@misc{goodfellow_generative_2014,
|
||||
title = {Generative Adversarial Networks},
|
||||
url = {http://arxiv.org/abs/1406.2661},
|
||||
doi = {10.48550/arXiv.1406.2661},
|
||||
abstract = {We propose a new framework for estimating generative models via an adversarial process, in which we simultaneously train two models: a generative model G that captures the data distribution, and a discriminative model D that estimates the probability that a sample came from the training data rather than G. The training procedure for G is to maximize the probability of D making a mistake. This framework corresponds to a minimax two-player game. In the space of arbitrary functions G and D, a unique solution exists, with G recovering the training data distribution and D equal to 1/2 everywhere. In the case where G and D are defined by multilayer perceptrons, the entire system can be trained with backpropagation. There is no need for any Markov chains or unrolled approximate inference networks during either training or generation of samples. Experiments demonstrate the potential of the framework through qualitative and quantitative evaluation of the generated samples.},
|
||||
number = {{arXiv}:1406.2661},
|
||||
publisher = {{arXiv}},
|
||||
author = {Goodfellow, Ian J. and Pouget-Abadie, Jean and Mirza, Mehdi and Xu, Bing and Warde-Farley, David and Ozair, Sherjil and Courville, Aaron and Bengio, Yoshua},
|
||||
urldate = {2024-05-19},
|
||||
date = {2014-06-10},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {1406.2661 [cs, stat]},
|
||||
keywords = {Computer Science - Machine Learning, Statistics - Machine Learning},
|
||||
file = {arXiv Fulltext PDF:/Users/victormylle/Zotero/storage/VSATPZJ9/Goodfellow et al. - 2014 - Generative Adversarial Networks.pdf:application/pdf;arXiv.org Snapshot:/Users/victormylle/Zotero/storage/3BQ8BDKU/1406.html:text/html},
|
||||
}
|
||||
|
||||
@inproceedings{rezende_variational_2015,
|
||||
location = {Lille, France},
|
||||
title = {Variational Inference with Normalizing Flows},
|
||||
volume = {37},
|
||||
url = {https://proceedings.mlr.press/v37/rezende15.html},
|
||||
series = {Proceedings of Machine Learning Research},
|
||||
abstract = {The choice of the approximate posterior distribution is one of the core problems in variational inference. Most applications of variational inference employ simple families of posterior approximations in order to allow for efficient inference, focusing on mean-field or other simple structured approximations. This restriction has a significant impact on the quality of inferences made using variational methods. We introduce a new approach for specifying flexible, arbitrarily complex and scalable approximate posterior distributions. Our approximations are distributions constructed through a normalizing flow, whereby a simple initial density is transformed into a more complex one by applying a sequence of invertible transformations until a desired level of complexity is attained. We use this view of normalizing flows to develop categories of finite and infinitesimal flows and provide a unified view of approaches for constructing rich posterior approximations. We demonstrate that the theoretical advantages of having posteriors that better match the true posterior, combined with the scalability of amortized variational approaches, provides a clear improvement in performance and applicability of variational inference.},
|
||||
pages = {1530--1538},
|
||||
booktitle = {Proceedings of the 32nd International Conference on Machine Learning},
|
||||
publisher = {{PMLR}},
|
||||
author = {Rezende, Danilo and Mohamed, Shakir},
|
||||
editor = {Bach, Francis and Blei, David},
|
||||
date = {2015-07-07},
|
||||
}
|
||||
|
||||
@misc{sohl-dickstein_deep_2015,
|
||||
title = {Deep Unsupervised Learning using Nonequilibrium Thermodynamics},
|
||||
url = {http://arxiv.org/abs/1503.03585},
|
||||
doi = {10.48550/arXiv.1503.03585},
|
||||
abstract = {A central problem in machine learning involves modeling complex data-sets using highly flexible families of probability distributions in which learning, sampling, inference, and evaluation are still analytically or computationally tractable. Here, we develop an approach that simultaneously achieves both flexibility and tractability. The essential idea, inspired by non-equilibrium statistical physics, is to systematically and slowly destroy structure in a data distribution through an iterative forward diffusion process. We then learn a reverse diffusion process that restores structure in data, yielding a highly flexible and tractable generative model of the data. This approach allows us to rapidly learn, sample from, and evaluate probabilities in deep generative models with thousands of layers or time steps, as well as to compute conditional and posterior probabilities under the learned model. We additionally release an open source reference implementation of the algorithm.},
|
||||
number = {{arXiv}:1503.03585},
|
||||
publisher = {{arXiv}},
|
||||
author = {Sohl-Dickstein, Jascha and Weiss, Eric A. and Maheswaranathan, Niru and Ganguli, Surya},
|
||||
urldate = {2024-05-19},
|
||||
date = {2015-11-18},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {1503.03585 [cond-mat, q-bio, stat]},
|
||||
keywords = {Computer Science - Machine Learning, Condensed Matter - Disordered Systems and Neural Networks, Quantitative Biology - Neurons and Cognition, Statistics - Machine Learning},
|
||||
file = {arXiv Fulltext PDF:/Users/victormylle/Zotero/storage/YUMKKECP/Sohl-Dickstein et al. - 2015 - Deep Unsupervised Learning using Nonequilibrium Th.pdf:application/pdf;arXiv.org Snapshot:/Users/victormylle/Zotero/storage/F96F2JL6/1503.html:text/html},
|
||||
}
|
||||
|
||||
@misc{kingma_auto-encoding_2022,
|
||||
title = {Auto-Encoding Variational Bayes},
|
||||
url = {http://arxiv.org/abs/1312.6114},
|
||||
doi = {10.48550/arXiv.1312.6114},
|
||||
abstract = {How can we perform efficient inference and learning in directed probabilistic models, in the presence of continuous latent variables with intractable posterior distributions, and large datasets? We introduce a stochastic variational inference and learning algorithm that scales to large datasets and, under some mild differentiability conditions, even works in the intractable case. Our contributions are two-fold. First, we show that a reparameterization of the variational lower bound yields a lower bound estimator that can be straightforwardly optimized using standard stochastic gradient methods. Second, we show that for i.i.d. datasets with continuous latent variables per datapoint, posterior inference can be made especially efficient by fitting an approximate inference model (also called a recognition model) to the intractable posterior using the proposed lower bound estimator. Theoretical advantages are reflected in experimental results.},
|
||||
number = {{arXiv}:1312.6114},
|
||||
publisher = {{arXiv}},
|
||||
author = {Kingma, Diederik P. and Welling, Max},
|
||||
urldate = {2024-05-19},
|
||||
date = {2022-12-10},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {1312.6114 [cs, stat]},
|
||||
keywords = {Computer Science - Machine Learning, Statistics - Machine Learning},
|
||||
file = {arXiv Fulltext PDF:/Users/victormylle/Zotero/storage/W2KMR8B9/Kingma and Welling - 2022 - Auto-Encoding Variational Bayes.pdf:application/pdf;arXiv.org Snapshot:/Users/victormylle/Zotero/storage/6M4IJ4B8/1312.html:text/html},
|
||||
}
|
||||
|
||||
@article{gneiting_strictly_2007,
|
||||
title = {Strictly Proper Scoring Rules, Prediction, and Estimation},
|
||||
volume = {102},
|
||||
issn = {0162-1459, 1537-274X},
|
||||
url = {http://www.tandfonline.com/doi/abs/10.1198/016214506000001437},
|
||||
doi = {10.1198/016214506000001437},
|
||||
pages = {359--378},
|
||||
number = {477},
|
||||
journaltitle = {Journal of the American Statistical Association},
|
||||
shortjournal = {Journal of the American Statistical Association},
|
||||
author = {Gneiting, Tilmann and Raftery, Adrian E},
|
||||
urldate = {2024-05-19},
|
||||
date = {2007-03},
|
||||
langid = {english},
|
||||
file = {Gneiting and Raftery - 2007 - Strictly Proper Scoring Rules, Prediction, and Est.pdf:/Users/victormylle/Zotero/storage/UTDSA82K/Gneiting and Raftery - 2007 - Strictly Proper Scoring Rules, Prediction, and Est.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@online{team_pinball_nodate,
|
||||
title = {Pinball Loss Function Definition},
|
||||
url = {https://www.lokad.com/pinball-loss-function-definition/},
|
||||
abstract = {The pinball loss function is a metric used to assess the accuracy of a quantile forecast.},
|
||||
author = {team, Lokad},
|
||||
urldate = {2024-05-20},
|
||||
langid = {english},
|
||||
file = {Snapshot:/Users/victormylle/Zotero/storage/K5Q5MH2R/pinball-loss-function-definition.html:text/html},
|
||||
}
|
||||
|
||||
@article{hochreiter_long_1997,
|
||||
title = {Long Short-Term Memory},
|
||||
volume = {9},
|
||||
doi = {10.1162/neco.1997.9.8.1735},
|
||||
pages = {1735--1780},
|
||||
number = {8},
|
||||
journaltitle = {Neural Computation},
|
||||
author = {Hochreiter, Sepp and Schmidhuber, Jürgen},
|
||||
date = {1997},
|
||||
note = {Publisher: {MIT} Press},
|
||||
}
|
||||
|
||||
@inproceedings{cho_learning_2014,
|
||||
title = {Learning Phrase Representations using {RNN} Encoder-Decoder for Statistical Machine Translation},
|
||||
doi = {10.3115/v1/D14-1179},
|
||||
pages = {1724--1734},
|
||||
booktitle = {Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing ({EMNLP})},
|
||||
publisher = {Association for Computational Linguistics},
|
||||
author = {Cho, Kyunghyun and van Merriënboer, Bart and Bahdanau, Dzmitry and Bengio, Yoshua},
|
||||
date = {2014},
|
||||
}
|
||||
|
||||
65
Reports/Thesis/sections/abstract.aux
Normal file
@@ -0,0 +1,65 @@
|
||||
\relax
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Abstract}{1}{section.1}\protected@file@percent }
|
||||
\@setckpt{sections/abstract}{
|
||||
\setcounter{page}{2}
|
||||
\setcounter{equation}{0}
|
||||
\setcounter{enumi}{0}
|
||||
\setcounter{enumii}{0}
|
||||
\setcounter{enumiii}{0}
|
||||
\setcounter{enumiv}{0}
|
||||
\setcounter{footnote}{0}
|
||||
\setcounter{mpfootnote}{0}
|
||||
\setcounter{part}{0}
|
||||
\setcounter{section}{1}
|
||||
\setcounter{subsection}{0}
|
||||
\setcounter{subsubsection}{0}
|
||||
\setcounter{paragraph}{0}
|
||||
\setcounter{subparagraph}{0}
|
||||
\setcounter{figure}{0}
|
||||
\setcounter{table}{0}
|
||||
\setcounter{parentequation}{0}
|
||||
\setcounter{float@type}{4}
|
||||
\setcounter{caption@flags}{0}
|
||||
\setcounter{continuedfloat}{0}
|
||||
\setcounter{subfigure}{0}
|
||||
\setcounter{subtable}{0}
|
||||
\setcounter{NAT@ctr}{0}
|
||||
\setcounter{AM@survey}{0}
|
||||
\setcounter{section@level}{0}
|
||||
\setcounter{Item}{0}
|
||||
\setcounter{Hfootnote}{0}
|
||||
\setcounter{bookmark@seq@number}{1}
|
||||
\setcounter{g@acro@QR@int}{0}
|
||||
\setcounter{g@acro@AQR@int}{0}
|
||||
\setcounter{g@acro@NAQR@int}{0}
|
||||
\setcounter{g@acro@GRU@int}{0}
|
||||
\setcounter{g@acro@LSTM@int}{0}
|
||||
\setcounter{g@acro@GAN@int}{0}
|
||||
\setcounter{g@acro@CTSGAN@int}{0}
|
||||
\setcounter{g@acro@VAE@int}{0}
|
||||
\setcounter{g@acro@MLP@int}{0}
|
||||
\setcounter{g@acro@GP@int}{0}
|
||||
\setcounter{g@acro@MSE@int}{0}
|
||||
\setcounter{g@acro@MAE@int}{0}
|
||||
\setcounter{g@acro@CRPS@int}{0}
|
||||
\setcounter{g@acro@TSPA@int}{0}
|
||||
\setcounter{g@acro@PLF@int}{0}
|
||||
\setcounter{g@acro@CDF@int}{0}
|
||||
\setcounter{g@acro@QE@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{0}
|
||||
\setcounter{g@acro@PV@int}{0}
|
||||
\setcounter{g@acro@NP@int}{0}
|
||||
\setcounter{g@acro@TSO@int}{0}
|
||||
\setcounter{g@acro@DSO@int}{0}
|
||||
\setcounter{g@acro@BRP@int}{0}
|
||||
\setcounter{g@acro@BSP@int}{0}
|
||||
\setcounter{g@acro@SI@int}{0}
|
||||
\setcounter{g@acro@FCR@int}{0}
|
||||
\setcounter{g@acro@aFRR@int}{0}
|
||||
\setcounter{g@acro@mFRR@int}{0}
|
||||
\setcounter{g@acro@MW@int}{0}
|
||||
\setcounter{g@acro@ACE@int}{0}
|
||||
\setcounter{g@acro@MIP@int}{0}
|
||||
\setcounter{g@acro@MDP@int}{0}
|
||||
}
|
||||
4
Reports/Thesis/sections/abstract.tex
Normal file
@@ -0,0 +1,4 @@
|
||||
\section{Abstract}
|
||||
The integration of renewable energy sources has introduced greater volatility to the electricity market, making accurate imbalance forecasting increasingly important. This thesis explores the effectiveness of generative modeling techniques in forecasting imbalance prices and optimizing battery usage for energy trading in the Belgian electricity market. Various generative models were trained using data from Elia, the Transmission System Operator (TSO) in Belgium, incorporating features like load, wind, photovoltaic power, and nominal net position. These models were evaluated using Mean Absolute Error (MAE), Mean Squared Error (MSE), and Continuous Ranked Probability Score (CRPS). The primary approach involved modeling Net Regulation Volume (NRV) values and generating multiple full-day NRV samples to reconstruct imbalance prices. These prices were used to optimize a simple policy for charging and discharging a battery to maximize profit. Traditional evaluation metrics did not correlate well with profitability, leading to an evaluation based on profit generation. Among the tested models, the diffusion model achieved a profit increase of 9.74\% over the baseline policy, which used the previous day's NRV as a prediction. This demonstrates the potential benefits of advanced generative models for enhancing decision-making in energy trading. This thesis underscores the potential of generative modeling in forecasting imbalance prices and optimizing energy trading policies. Focusing on profitability as a key metric can lead to more practical and impactful applications in the energy market, especially as the share of renewable energy grows. Overall, the findings highlight the importance of using profitability to evaluate model performance and show the effectiveness of diffusion models in improving energy trading strategies and maximizing profit in the electricity market.
|
||||
|
||||
\textbf{Keywords:} Generative modeling, imbalance prices, diffusion model, battery optimization
|
||||
64
Reports/Thesis/sections/appendix.aux
Normal file
@@ -0,0 +1,64 @@
|
||||
\relax
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\@setckpt{sections/appendix}{
|
||||
\setcounter{page}{67}
|
||||
\setcounter{equation}{8}
|
||||
\setcounter{enumi}{0}
|
||||
\setcounter{enumii}{0}
|
||||
\setcounter{enumiii}{0}
|
||||
\setcounter{enumiv}{0}
|
||||
\setcounter{footnote}{0}
|
||||
\setcounter{mpfootnote}{0}
|
||||
\setcounter{part}{0}
|
||||
\setcounter{section}{0}
|
||||
\setcounter{subsection}{0}
|
||||
\setcounter{subsubsection}{0}
|
||||
\setcounter{paragraph}{0}
|
||||
\setcounter{subparagraph}{0}
|
||||
\setcounter{figure}{23}
|
||||
\setcounter{table}{14}
|
||||
\setcounter{parentequation}{0}
|
||||
\setcounter{float@type}{4}
|
||||
\setcounter{caption@flags}{2}
|
||||
\setcounter{continuedfloat}{0}
|
||||
\setcounter{subfigure}{0}
|
||||
\setcounter{subtable}{0}
|
||||
\setcounter{NAT@ctr}{34}
|
||||
\setcounter{AM@survey}{0}
|
||||
\setcounter{section@level}{0}
|
||||
\setcounter{Item}{0}
|
||||
\setcounter{Hfootnote}{0}
|
||||
\setcounter{bookmark@seq@number}{34}
|
||||
\setcounter{g@acro@QR@int}{0}
|
||||
\setcounter{g@acro@AQR@int}{0}
|
||||
\setcounter{g@acro@NAQR@int}{1}
|
||||
\setcounter{g@acro@GRU@int}{0}
|
||||
\setcounter{g@acro@LSTM@int}{0}
|
||||
\setcounter{g@acro@GAN@int}{0}
|
||||
\setcounter{g@acro@CTSGAN@int}{0}
|
||||
\setcounter{g@acro@VAE@int}{0}
|
||||
\setcounter{g@acro@MLP@int}{0}
|
||||
\setcounter{g@acro@GP@int}{0}
|
||||
\setcounter{g@acro@MSE@int}{4}
|
||||
\setcounter{g@acro@MAE@int}{4}
|
||||
\setcounter{g@acro@CRPS@int}{2}
|
||||
\setcounter{g@acro@TSPA@int}{0}
|
||||
\setcounter{g@acro@PLF@int}{0}
|
||||
\setcounter{g@acro@CDF@int}{0}
|
||||
\setcounter{g@acro@QE@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{12}
|
||||
\setcounter{g@acro@PV@int}{0}
|
||||
\setcounter{g@acro@NP@int}{0}
|
||||
\setcounter{g@acro@TSO@int}{3}
|
||||
\setcounter{g@acro@DSO@int}{0}
|
||||
\setcounter{g@acro@BRP@int}{1}
|
||||
\setcounter{g@acro@BSP@int}{1}
|
||||
\setcounter{g@acro@SI@int}{0}
|
||||
\setcounter{g@acro@FCR@int}{1}
|
||||
\setcounter{g@acro@aFRR@int}{1}
|
||||
\setcounter{g@acro@mFRR@int}{1}
|
||||
\setcounter{g@acro@MW@int}{0}
|
||||
\setcounter{g@acro@ACE@int}{0}
|
||||
\setcounter{g@acro@MIP@int}{0}
|
||||
\setcounter{g@acro@MDP@int}{0}
|
||||
}
|
||||
0
Reports/Thesis/sections/appendix.tex
Normal file
@@ -1,36 +1,67 @@
|
||||
\relax
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Electricity market}{3}{section.2}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Overview of the most important parties in the electricity market\relax }}{3}{table.caption.1}\protected@file@percent }
|
||||
\citation{noauthor_geliberaliseerde_nodate}
|
||||
\citation{noauthor_role_nodate}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Electricity market}{9}{section.3}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Overview of the most important parties in the electricity market\relax }}{9}{table.caption.1}\protected@file@percent }
|
||||
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
|
||||
\newlabel{tab:parties}{{1}{3}{Overview of the most important parties in the electricity market\relax }{table.caption.1}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Prices paid by the BRPs\relax }}{5}{table.caption.2}\protected@file@percent }
|
||||
\newlabel{tab:imbalance_price}{{2}{5}{Prices paid by the BRPs\relax }{table.caption.2}{}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Generative modeling}{5}{section.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Quantile Regression}{6}{subsection.3.1}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Example of quantiles\relax }}{6}{figure.caption.3}\protected@file@percent }
|
||||
\newlabel{fig:quantile_example}{{1}{6}{Example of quantiles\relax }{figure.caption.3}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Example of quantile regression output for one-quarter of the NRV, showing interpolated values for quantiles at 1\%, 5\%, 10\%, 15\%, 30\%, 40\%, 50\%, 60\%, 70\%, 85\%, 90\%, 95\%, and 99\%. These quantiles are used to reconstruct the cumulative distribution function.\relax }}{7}{figure.caption.4}\protected@file@percent }
|
||||
\newlabel{fig:quantile_regression_example}{{2}{7}{Example of quantile regression output for one-quarter of the NRV, showing interpolated values for quantiles at 1\%, 5\%, 10\%, 15\%, 30\%, 40\%, 50\%, 60\%, 70\%, 85\%, 90\%, 95\%, and 99\%. These quantiles are used to reconstruct the cumulative distribution function.\relax }{figure.caption.4}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Autoregressive vs Non-Autoregressive models}{8}{subsection.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Model Types}{9}{subsection.3.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.1}Linear Model}{9}{subsubsection.3.3.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}Non-Linear Model}{10}{subsubsection.3.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.3}Recurrent Neural Network (RNN)}{10}{subsubsection.3.3.3}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces RNN model input and output visualization\relax }}{11}{figure.caption.5}\protected@file@percent }
|
||||
\newlabel{fig:rnn_model_visualization}{{3}{11}{RNN model input and output visualization\relax }{figure.caption.5}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Diffusion models}{11}{subsection.3.4}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}Overview}{12}{subsubsection.3.4.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}Applications}{12}{subsubsection.3.4.2}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Example of the diffusion process. The image of a cat is generated by starting from noise and iteratively denoising the image.\relax }}{12}{figure.caption.6}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_example}{{4}{12}{Example of the diffusion process. The image of a cat is generated by starting from noise and iteratively denoising the image.\relax }{figure.caption.6}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.3}Generation process}{12}{subsubsection.3.4.3}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_process}{{\caption@xref {fig:diffusion_process}{ on input line 281}}{14}{Generation process}{figure.caption.7}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Evaluation}{14}{subsection.3.5}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Visualization of the CRPS metric\relax }}{16}{figure.caption.8}\protected@file@percent }
|
||||
\newlabel{fig:crps_visualization}{{5}{16}{Visualization of the CRPS metric\relax }{figure.caption.8}{}}
|
||||
\newlabel{tab:parties}{{1}{9}{Overview of the most important parties in the electricity market\relax }{table.caption.1}{}}
|
||||
\ACRO{recordpage}{BRP}{10}{1}{9}
|
||||
\citation{elia_tariffs_2022}
|
||||
\citation{noauthor_fcr_nodate}
|
||||
\citation{noauthor_afrr_nodate}
|
||||
\citation{noauthor_mfrr_nodate}
|
||||
\ACRO{recordpage}{TSO}{12}{1}{11}
|
||||
\ACRO{recordpage}{FCR}{12}{1}{11}
|
||||
\ACRO{recordpage}{BSP}{12}{1}{11}
|
||||
\ACRO{recordpage}{aFRR}{12}{1}{11}
|
||||
\ACRO{recordpage}{mFRR}{12}{1}{11}
|
||||
\citation{elia_tariffs_2022}
|
||||
\citation{elia_tariffs_2022}
|
||||
\citation{elia_tariffs_2022}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Prices paid by the BRPs \cite {elia_tariffs_2022}\relax }}{12}{table.caption.2}\protected@file@percent }
|
||||
\newlabel{tab:imbalance_price}{{2}{12}{Prices paid by the BRPs \cite {elia_tariffs_2022}\relax }{table.caption.2}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Example of a bid ladder. The bid ladder shows the total price for the activation of a certain volume of energy.\relax }}{13}{figure.caption.3}\protected@file@percent }
|
||||
\newlabel{fig:bid_ladder}{{1}{13}{Example of a bid ladder. The bid ladder shows the total price for the activation of a certain volume of energy.\relax }{figure.caption.3}{}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4}Generative modeling}{13}{section.4}\protected@file@percent }
|
||||
\citation{goodfellow_generative_2014}
|
||||
\citation{kingma_auto-encoding_2022}
|
||||
\citation{rezende_variational_2015}
|
||||
\citation{sohl-dickstein_deep_2015}
|
||||
\citation{koenker_regression_1978}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Quantile Regression}{14}{subsection.4.1}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Example of a cumulative distribution function (CDF) and some quantiles. The quantiles are the values below which a certain proportion of observations fall.\relax }}{15}{figure.caption.4}\protected@file@percent }
|
||||
\newlabel{fig:quantile_example}{{2}{15}{Example of a cumulative distribution function (CDF) and some quantiles. The quantiles are the values below which a certain proportion of observations fall.\relax }{figure.caption.4}{}}
|
||||
\citation{team_pinball_nodate}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Example of quantile regression output for one-quarter of the NRV, showing interpolated values for quantiles at 1\%, 5\%, 10\%, 15\%, 30\%, 40\%, 50\%, 60\%, 70\%, 85\%, 90\%, 95\%, and 99\%. These quantiles are used to reconstruct the cumulative distribution function.\relax }}{16}{figure.caption.5}\protected@file@percent }
|
||||
\newlabel{fig:quantile_regression_example}{{3}{16}{Example of quantile regression output for one-quarter of the NRV, showing interpolated values for quantiles at 1\%, 5\%, 10\%, 15\%, 30\%, 40\%, 50\%, 60\%, 70\%, 85\%, 90\%, 95\%, and 99\%. These quantiles are used to reconstruct the cumulative distribution function.\relax }{figure.caption.5}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Autoregressive vs Non-Autoregressive models}{17}{subsection.4.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Model Types}{18}{subsection.4.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.1}Linear Model}{18}{subsubsection.4.3.1}\protected@file@percent }
|
||||
\citation{hochreiter_long_1997}
|
||||
\citation{cho_learning_2014}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}Non-Linear Model}{19}{subsubsection.4.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.3}Recurrent Neural Network (RNN)}{19}{subsubsection.4.3.3}\protected@file@percent }
|
||||
\citation{sohl-dickstein_deep_2015}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces RNN model input and output visualization\relax }}{20}{figure.caption.6}\protected@file@percent }
|
||||
\newlabel{fig:rnn_model_visualization}{{4}{20}{RNN model input and output visualization\relax }{figure.caption.6}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Diffusion models}{20}{subsection.4.4}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.1}Overview}{20}{subsubsection.4.4.1}\protected@file@percent }
|
||||
\citation{ho_denoising_2020}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2}Applications}{21}{subsubsection.4.4.2}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Example of the diffusion process. The image of a cat is generated by starting from noise and iteratively denoising the image.\relax }}{21}{figure.caption.7}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_example}{{5}{21}{Example of the diffusion process. The image of a cat is generated by starting from noise and iteratively denoising the image.\relax }{figure.caption.7}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.3}Generation process}{21}{subsubsection.4.4.3}\protected@file@percent }
|
||||
\citation{ho_denoising_2020}
|
||||
\citation{ho_denoising_2020}
|
||||
\citation{gneiting_strictly_2007}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Diffusion process}}{23}{figure.caption.8}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_process}{{6}{23}{Diffusion process}{figure.caption.8}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.5}Evaluation}{23}{subsection.4.5}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Visualization of the CRPS metric\relax }}{24}{figure.caption.9}\protected@file@percent }
|
||||
\newlabel{fig:crps_visualization}{{7}{24}{Visualization of the CRPS metric\relax }{figure.caption.9}{}}
|
||||
\@setckpt{sections/background}{
|
||||
\setcounter{page}{17}
|
||||
\setcounter{page}{25}
|
||||
\setcounter{equation}{7}
|
||||
\setcounter{enumi}{0}
|
||||
\setcounter{enumii}{0}
|
||||
@@ -39,12 +70,12 @@
|
||||
\setcounter{footnote}{0}
|
||||
\setcounter{mpfootnote}{0}
|
||||
\setcounter{part}{0}
|
||||
\setcounter{section}{3}
|
||||
\setcounter{section}{4}
|
||||
\setcounter{subsection}{5}
|
||||
\setcounter{subsubsection}{0}
|
||||
\setcounter{paragraph}{0}
|
||||
\setcounter{subparagraph}{0}
|
||||
\setcounter{figure}{5}
|
||||
\setcounter{figure}{7}
|
||||
\setcounter{table}{2}
|
||||
\setcounter{parentequation}{0}
|
||||
\setcounter{float@type}{4}
|
||||
@@ -52,141 +83,42 @@
|
||||
\setcounter{continuedfloat}{0}
|
||||
\setcounter{subfigure}{0}
|
||||
\setcounter{subtable}{0}
|
||||
\setcounter{tabx@nest}{0}
|
||||
\setcounter{listtotal}{0}
|
||||
\setcounter{listcount}{0}
|
||||
\setcounter{liststart}{0}
|
||||
\setcounter{liststop}{0}
|
||||
\setcounter{citecount}{0}
|
||||
\setcounter{citetotal}{0}
|
||||
\setcounter{multicitecount}{0}
|
||||
\setcounter{multicitetotal}{0}
|
||||
\setcounter{instcount}{0}
|
||||
\setcounter{maxnames}{2}
|
||||
\setcounter{minnames}{1}
|
||||
\setcounter{maxitems}{999}
|
||||
\setcounter{minitems}{1}
|
||||
\setcounter{citecounter}{0}
|
||||
\setcounter{maxcitecounter}{0}
|
||||
\setcounter{savedcitecounter}{0}
|
||||
\setcounter{uniquelist}{0}
|
||||
\setcounter{uniquename}{0}
|
||||
\setcounter{refsection}{0}
|
||||
\setcounter{refsegment}{0}
|
||||
\setcounter{maxextratitle}{0}
|
||||
\setcounter{maxextratitleyear}{0}
|
||||
\setcounter{maxextraname}{0}
|
||||
\setcounter{maxextradate}{0}
|
||||
\setcounter{maxextraalpha}{0}
|
||||
\setcounter{abbrvpenalty}{50}
|
||||
\setcounter{highnamepenalty}{50}
|
||||
\setcounter{lownamepenalty}{25}
|
||||
\setcounter{maxparens}{3}
|
||||
\setcounter{parenlevel}{0}
|
||||
\setcounter{blx@maxsection}{0}
|
||||
\setcounter{mincomprange}{10}
|
||||
\setcounter{maxcomprange}{100000}
|
||||
\setcounter{mincompwidth}{1}
|
||||
\setcounter{afterword}{0}
|
||||
\setcounter{savedafterword}{0}
|
||||
\setcounter{annotator}{0}
|
||||
\setcounter{savedannotator}{0}
|
||||
\setcounter{author}{0}
|
||||
\setcounter{savedauthor}{0}
|
||||
\setcounter{bookauthor}{0}
|
||||
\setcounter{savedbookauthor}{0}
|
||||
\setcounter{commentator}{0}
|
||||
\setcounter{savedcommentator}{0}
|
||||
\setcounter{editor}{0}
|
||||
\setcounter{savededitor}{0}
|
||||
\setcounter{editora}{0}
|
||||
\setcounter{savededitora}{0}
|
||||
\setcounter{editorb}{0}
|
||||
\setcounter{savededitorb}{0}
|
||||
\setcounter{editorc}{0}
|
||||
\setcounter{savededitorc}{0}
|
||||
\setcounter{foreword}{0}
|
||||
\setcounter{savedforeword}{0}
|
||||
\setcounter{holder}{0}
|
||||
\setcounter{savedholder}{0}
|
||||
\setcounter{introduction}{0}
|
||||
\setcounter{savedintroduction}{0}
|
||||
\setcounter{namea}{0}
|
||||
\setcounter{savednamea}{0}
|
||||
\setcounter{nameb}{0}
|
||||
\setcounter{savednameb}{0}
|
||||
\setcounter{namec}{0}
|
||||
\setcounter{savednamec}{0}
|
||||
\setcounter{translator}{0}
|
||||
\setcounter{savedtranslator}{0}
|
||||
\setcounter{shortauthor}{0}
|
||||
\setcounter{savedshortauthor}{0}
|
||||
\setcounter{shorteditor}{0}
|
||||
\setcounter{savedshorteditor}{0}
|
||||
\setcounter{narrator}{0}
|
||||
\setcounter{savednarrator}{0}
|
||||
\setcounter{execproducer}{0}
|
||||
\setcounter{savedexecproducer}{0}
|
||||
\setcounter{execdirector}{0}
|
||||
\setcounter{savedexecdirector}{0}
|
||||
\setcounter{with}{0}
|
||||
\setcounter{savedwith}{0}
|
||||
\setcounter{labelname}{0}
|
||||
\setcounter{savedlabelname}{0}
|
||||
\setcounter{institution}{0}
|
||||
\setcounter{savedinstitution}{0}
|
||||
\setcounter{lista}{0}
|
||||
\setcounter{savedlista}{0}
|
||||
\setcounter{listb}{0}
|
||||
\setcounter{savedlistb}{0}
|
||||
\setcounter{listc}{0}
|
||||
\setcounter{savedlistc}{0}
|
||||
\setcounter{listd}{0}
|
||||
\setcounter{savedlistd}{0}
|
||||
\setcounter{liste}{0}
|
||||
\setcounter{savedliste}{0}
|
||||
\setcounter{listf}{0}
|
||||
\setcounter{savedlistf}{0}
|
||||
\setcounter{location}{0}
|
||||
\setcounter{savedlocation}{0}
|
||||
\setcounter{organization}{0}
|
||||
\setcounter{savedorganization}{0}
|
||||
\setcounter{origlocation}{0}
|
||||
\setcounter{savedoriglocation}{0}
|
||||
\setcounter{origpublisher}{0}
|
||||
\setcounter{savedorigpublisher}{0}
|
||||
\setcounter{publisher}{0}
|
||||
\setcounter{savedpublisher}{0}
|
||||
\setcounter{language}{0}
|
||||
\setcounter{savedlanguage}{0}
|
||||
\setcounter{origlanguage}{0}
|
||||
\setcounter{savedoriglanguage}{0}
|
||||
\setcounter{citation}{0}
|
||||
\setcounter{savedcitation}{0}
|
||||
\setcounter{pageref}{0}
|
||||
\setcounter{savedpageref}{0}
|
||||
\setcounter{textcitecount}{0}
|
||||
\setcounter{textcitetotal}{0}
|
||||
\setcounter{textcitemaxnames}{0}
|
||||
\setcounter{biburlbigbreakpenalty}{100}
|
||||
\setcounter{biburlbreakpenalty}{200}
|
||||
\setcounter{biburlnumpenalty}{0}
|
||||
\setcounter{biburlucpenalty}{0}
|
||||
\setcounter{biburllcpenalty}{0}
|
||||
\setcounter{smartand}{1}
|
||||
\setcounter{bbx:relatedcount}{0}
|
||||
\setcounter{bbx:relatedtotal}{0}
|
||||
\setcounter{NAT@ctr}{0}
|
||||
\setcounter{AM@survey}{0}
|
||||
\setcounter{section@level}{0}
|
||||
\setcounter{Item}{0}
|
||||
\setcounter{Hfootnote}{0}
|
||||
\setcounter{bookmark@seq@number}{14}
|
||||
\setcounter{bookmark@seq@number}{15}
|
||||
\setcounter{g@acro@QR@int}{0}
|
||||
\setcounter{g@acro@AQR@int}{0}
|
||||
\setcounter{g@acro@NAQR@int}{0}
|
||||
\setcounter{g@acro@GRU@int}{0}
|
||||
\setcounter{g@acro@LSTM@int}{0}
|
||||
\setcounter{g@acro@GAN@int}{0}
|
||||
\setcounter{g@acro@CTSGAN@int}{0}
|
||||
\setcounter{g@acro@VAE@int}{0}
|
||||
\setcounter{g@acro@MLP@int}{0}
|
||||
\setcounter{g@acro@GP@int}{0}
|
||||
\setcounter{g@acro@MSE@int}{0}
|
||||
\setcounter{g@acro@MAE@int}{0}
|
||||
\setcounter{g@acro@CRPS@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{0}
|
||||
\setcounter{g@acro@TSPA@int}{0}
|
||||
\setcounter{g@acro@PLF@int}{0}
|
||||
\setcounter{g@acro@CDF@int}{0}
|
||||
\setcounter{g@acro@QE@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{3}
|
||||
\setcounter{g@acro@PV@int}{0}
|
||||
\setcounter{g@acro@NP@int}{0}
|
||||
\setcounter{g@acro@TSO@int}{3}
|
||||
\setcounter{g@acro@DSO@int}{0}
|
||||
\setcounter{g@acro@BRP@int}{1}
|
||||
\setcounter{g@acro@BSP@int}{1}
|
||||
\setcounter{g@acro@SI@int}{0}
|
||||
\setcounter{g@acro@FCR@int}{1}
|
||||
\setcounter{g@acro@aFRR@int}{1}
|
||||
\setcounter{g@acro@mFRR@int}{1}
|
||||
\setcounter{g@acro@MW@int}{0}
|
||||
\setcounter{g@acro@ACE@int}{0}
|
||||
\setcounter{g@acro@MIP@int}{0}
|
||||
\setcounter{g@acro@MDP@int}{0}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
% Achtergrond informatie
|
||||
% Generatief modelleren
|
||||
% -> enkel forecast is vaak brak -> reinforcement learning is lastig -> generatief modelleren, veel generaties om mee te trainen
|
||||
% - Achtergrond electrititetismarkt
|
||||
% - Achtergrond Generatief modelleren (van NRV)
|
||||
% - TODO: Achtergrond RNN?
|
||||
|
||||
\section{Electricity market}
|
||||
The electricity market consists of many different parties who all work together and want to make a profit in the end. An overview of the most important parties can be found in Table \ref{tab:parties}.
|
||||
The electricity market consists of many different parties who all work together and want to make a profit in the end. An overview of the most important parties can be found in Table \ref{tab:parties} \cite{noauthor_geliberaliseerde_nodate}.
|
||||
|
||||
% table
|
||||
\begin{table}[h]
|
||||
@@ -19,41 +12,60 @@ The electricity market consists of many different parties who all work together
|
||||
\hline
|
||||
Consumers & Uses electricity. This can be normal households, companies but also industry. \\
|
||||
\hline
|
||||
Transmission system operator (TSO) & Party responsible for reliable transmission of electricity from generation plants to local distribution networks. This is done over the high-voltage grid. In Belgium, this party is Elia.\\
|
||||
\acf{TSO} & Party responsible for reliable transmission of electricity from generation plants to local distribution networks. This is done over the high-voltage grid. In Belgium, this party is Elia.\\
|
||||
\hline
|
||||
Distribution system operator (DSO) & Party responsible for the distribution of electricity to the end users. Here, the electricity is transported over the low-voltage grid. \\
|
||||
\acf{DSO} & Party responsible for the distribution of electricity to the end users. Here, the electricity is transported over the low-voltage grid. \\
|
||||
\hline
|
||||
Balancing responsible party (BRP) & These parties forecast the electricity consumption and generation of their clients. They make balanced nominations to Elia.
|
||||
\acf{BRP} & These parties forecast the electricity consumption and generation of their clients. They make balanced nominations to Elia.
|
||||
\\
|
||||
\hline
|
||||
Balancing Service Provider (BSP) & Parties that provide the TSO (Elia) with balancing services. They submit Balancing Energy Bids to Elia. If needed, they will provide balancing energy at a set price. \\
|
||||
\acf{BSP} & Parties that provide the \ac{TSO} (Elia) with balancing services. They submit Balancing Energy Bids to Elia. If needed, they will provide balancing energy at a set price. \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
\caption{Overview of the most important parties in the electricity market}
|
||||
\label{tab:parties}
|
||||
\end{table}
|
||||
|
||||
Elia, the Transmission system operator (TSO) in Belgium is responsible for keeping the grid stable. They do this by balancing the electricity consumption and generation. If there is an imbalance, Elia will use reserves to balance the grid. These reserves are expensive and are paid by the market participants. The prices paid for the activations of these reserves is called the imbalance price. Keeping the grid balanced is a very important but also a very difficult task. If the grid is not balanced, it can lead to blackouts but also other problems like damage to equipment and so on.
|
||||
The most important aspect of the electricity market is that the grid needs to be balanced. This means that the amount of electricity consumed and generated must be equal at all times. If this is not the case, the grid can become unstable which can lead to blackouts and disrupt equipment. One company is responsible for keeping the grid balanced. This company is called the Transmission System Operator (TSO). In Belgium, this party is Elia. The TSO keeps the grid balanced by activating reserves when needed. These reserves, however, are expensive and need to be paid by the market participants. The prices paid for the activations of these reserves are called the imbalance prices.
|
||||
|
||||
Balance responsible parties (BRPs) forecast the electricity consumption and generation of their portfolio to effectively manage the balance between supply and demand within the grid they operate in. They submit a daily balance schedule for their portfolio the day before to the transmission system operator. This consists of the expected physical injections and offtakes from the grid and the commercial power trades. The power trades can be purchases and sales between BRPs or they can even be trades with other countries. BRPs must provide and deploy all reasonable resources to be balanced on a quarter-hourly basis. They can exchange electricity with other BRPs for the following day or the same day. There is one exception where a BRP can deviate from the balance schedule. This is when the grid is not balanced and they can help Elia to stabilize the grid. In this case, they will receive a compensation for their help. When a BRP deviates from the balance schedule in a way that destabilizes the grid, it will need to pay the imbalance price for the deviation.
|
||||
At every access point of the grid, there is a designated \acf{BRP}. This party may be a producer, major consumer, energy supplier or trader. The BRP must take all reasonable measures to maintain the balance between injections, offtakes and commercial power trades within its portfolio. Each day, the BRP submits a daily balance schedule for the next day to the TSO. This schedule contains the expected physical injections and offtakes from the grid as well as the commercial power trades with other BRPs or other countries. These schedules are forecasts and are not always 100\% accurate. A lot of factors can influence the production and consumption of electricity like the weather, the economy, the time of day etc. The BRP must take all reasonable measures to be balanced on a quarter-hourly basis. This can be done by day-ahead or intra-day trading with other BRPs. If the BRP is not balanced for a certain quarter, it will need to pay the imbalance price for the deviation. The imbalance of a BRP is the quarter-hourly difference between total injections and offtakes from the grid. \cite{noauthor_role_nodate}
|
||||
|
||||
The imbalance price is determined based on which reserves Elia needs to activate to stabilize the grid. The imbalance of a BRP is the quarter-hourly difference between total injections and offtakes from the grid. The Net Regulation Volume (NRV) is the net control volume of energy that Elia applies to maintain balance in the Elia control area. The Area Control Error is the current difference between the scheduled values and the actual values of power exchanged in the Belgian control area. The imbalance of the system (SI) is the Area Control Error minus the NRV. Using the System Imbalance, the imbalance price is calculated.
|
||||
The imbalance price is a crucial factor in the management of electricity grids, set by the Transmission System Operator (TSO) to ensure grid stability and reliability. This price is mainly calculated based on the Net Regulation Volume (NRV), which represents the amount of reserves activated by the TSO to maintain balance in the grid. Essentially, the NRV reflects the net control volume of energy used for upward or downward regulation within the TSO's control area.
|
||||
|
||||
Elia, the Transmission System Operator (TSO) in Belgium, maintains grid stability by activating three types of reserves, each designed to address specific conditions of imbalance. These reserves are crucial for ensuring that the electricity supply continuously meets the demand, thereby maintaining the frequency within the required operational limits. The reserves include:
|
||||
Another key concept is the Area Control Error (ACE), which measures the discrepancy between planned (scheduled) and actual power exchanges in the control area. Specifically, ACE quantifies the difference between the scheduled values and actual values of power exchanges, accounting for frequency deviations. In the Belgian control area, this measurement indicates how much the actual conditions deviate from what was anticipated, providing a real-time assessment of grid balance.
|
||||
|
||||
1) \textbf{Frequency Containment Reserve (FCR)} \\
|
||||
FCR is a reserve that responds automatically to frequency deviations in the grid. The reserve responds automatically in seconds and provides a proportional response to the frequency deviation. Elia must provide a minimal share of this volume within the Belgian control area. This type of volume can also be offered by the BSPs.
|
||||
The System Imbalance (SI) is derived by subtracting the NRV from the ACE. This calculation provides a measure of the overall grid imbalance, where SI = ACE - NRV. The value of the SI directly influences the calculation of the imbalance price. The TSO uses the magnitude of the System Imbalance to determine the appropriate imbalance price, ensuring that costs are allocated to market participants based on their contribution to the overall grid imbalance. \cite{elia_tariffs_2022}
|
||||
|
||||
2) \textbf{Automatic Frequency Restoration Process (aFRR)} \\
|
||||
aFRR is the second reserve that Elia can activate to restore the frequency to 50Hz. The aFRR is activated when the FCR is not sufficient to restore the frequency. Every 4 seconds, Elia sends a set-point to the BSPs. The BSPs use this set-point to adjust their production or consumption. The BSPs have a 7.5-minute window to activate the full requested energy volume.
|
||||
The Transmission System Operator (TSO) can activate reserves to maintain grid stability, and these reserves are supplied by entities known as Balancing Service Providers (BSPs). BSPs are crucial participants in the electricity market as they provide the necessary reserve capacity that the TSO can call upon in times of need. Each BSP submits bids to the TSO for the potential activation of these reserves. These bids are detailed and include several key components: the specific type of reserve being offered, the total volume of energy available for activation (measured in megawatt-hours, MWh), the price per MWh at which the BSP is willing to provide this reserve, and a start price which initiates the reserve's deployment. Through this bidding process, the TSO selects the most cost-effective and appropriate offers to ensure the grid's stability and balance.
|
||||
|
||||
3) \textbf{Manual Frequency Restoration (mFRR)} \\
|
||||
Sometimes the FCR and aFRR are not enough to restore the imbalance between generation and consumption. Elia activates the mFRR manually and the requested energy volume is to be activated in 15 minutes.
|
||||
Elia, the \acf{TSO} in Belgium, maintains grid stability by activating three types of reserves, each designed to address specific conditions of imbalance. These reserves are crucial for ensuring that the electricity supply continuously meets the demand, thereby maintaining the frequency within the required operational limits. The reserves include:
|
||||
|
||||
The order in which the reserves are activated is as follows: FCR, aFRR and mFRR. BSPs provide bids for the aFRR and mFRR volumes. The provided bids consist of the type (aFRR or mFRR), bid volume (MW), bid price (per MWh) and start price (per MWh).
|
||||
The start price is used to cover the costs of starting a unit.
|
||||
1) \textbf{ \acf{FCR}} \\
|
||||
FCR is a reserve that responds automatically to frequency deviations in the grid. The reserve responds automatically in seconds and provides a proportional response to the frequency deviation. Elia must provide a minimal share of this volume within the Belgian control area. This type of volume can also be offered by the \acsp{BSP}. \cite{noauthor_fcr_nodate}
|
||||
|
||||
Elia selects the bids based on the order of activation and then the price. The highest marginal price paid for upward or downward activation determines the imbalance price. This means that the last bid that is activated determines the imbalance price. This price is paid by the BRPs that are not balanced. The imbalance price calculation is shown in Table \ref{tab:imbalance_price}.
|
||||
2) \textbf{ \acf{aFRR}} \\
|
||||
aFRR is the second reserve that Elia can activate to restore the frequency to 50Hz. The aFRR is activated when the FCR is not sufficient to restore the frequency. Every 4 seconds, Elia sends a set point to the BSPs. The BSPs use this set-point to adjust their production or consumption. The BSPs have a 7.5-minute window to activate the full requested energy volume. \cite{noauthor_afrr_nodate}
|
||||
|
||||
3) \textbf{ \acf{mFRR}} \\
|
||||
Sometimes the FCR and aFRR are not enough to restore the imbalance between generation and consumption. Elia activates the mFRR manually and the requested energy volume is to be activated in 15 minutes. This reserve is the slowest and is used when the other reserves are not sufficient. This reserve can also be offered by the BSPs. \cite{noauthor_mfrr_nodate}
|
||||
|
||||
The order in which the reserves are activated is FCR, aFRR, and mFRR. The reserves are activated in this order because of the response time of the reserves. The FCR is the fastest reserve and can respond automatically in seconds. The aFRR is the second reserve and can respond in 7.5 minutes. The mFRR is the slowest reserve and can respond in 15 minutes. The reserves are activated in this order to ensure that the grid remains stable and that the frequency remains within the required operational limits. The BSPs submit bids to Elia for the activation of these reserves. When reserves need to be activated, Elia selects the bids based on the order of activation and then the price.
|
||||
|
||||
The highest marginal price paid for upward or downward activation, for a given quarter-hour, determines the imbalance price. This means that the last bid that is activated determines the imbalance price. The imbalance price calculation is shown in Table \ref{tab:imbalance_price}. Four possible scenarios can happen. The System Imbalance (SI) can be positive or negative and the imbalance of the balance responsible party can be positive or negative. These factors determine in which direction the payments are made. It is possible the BRP needs to pay Elia for the imbalance or that Elia needs to pay the BRP. A positive imbalance corresponds with a surplus of injections to the grid. On the other hand, a negative imbalance indicates a deficit in the injections or an excess of offtakes from the grid.
|
||||
|
||||
% TODO: Check MDP and MIP again and the directions of the payments
|
||||
|
||||
% list the scenarios
|
||||
\begin{itemize}
|
||||
\item \textbf{Positive SI + Positive BRP Imbalance }\\
|
||||
This means that the BRP injects more energy into the grid than it takes out. The BRP has a positive imbalance. The System Imbalance is also positive which means that the grid has a surplus of injections. The BRP will need to pay Elia for the surplus injections. The price paid by the BRP is the MDP minus an extra parameter \(\alpha\).
|
||||
\item \textbf{Positive SI + Negative BRP Imbalance }\\
|
||||
The BRP takes more energy out of the grid than it injects. The BRP has a negative imbalance. The System Imbalance is positive which means that the grid has a surplus of injections. Elia will need to downward activate reserves to balance the grid. Elia needs to pay the BRP for the surplus of offtakes. The price paid by Elia is the MDP minus an extra parameter \(\alpha\).
|
||||
\item \textbf{Negative SI + Positive BRP Imbalance }\\
|
||||
The BRP injects more energy into the grid than it takes out. The BRP has a positive imbalance. The System Imbalance is negative which means that the grid has a deficit of injections. Elia will need to upward activate reserves to balance the grid. Elia needs to pay the BRP for the surplus of injections. The price paid by Elia is the MIP plus an extra parameter \(\alpha\).
|
||||
\item \textbf{Negative SI + Negative BRP Imbalance }\\
|
||||
The BRP takes more energy out of the grid than it injects. The BRP has a negative imbalance. The System Imbalance is negative which means that the grid has a deficit of injections. The BRP will need to pay Elia for the deficit of injections or surplus of offtakes. The price paid by the BRP is the MIP plus an extra parameter \(\alpha\).
|
||||
\end{itemize}
|
||||
|
||||
\begin{table}[h]
|
||||
\centering
|
||||
@@ -68,50 +80,59 @@ Elia selects the bids based on the order of activation and then the price. The h
|
||||
\textbf{Negative} & MDP - \(\alpha\) & MIP + \(\alpha\) \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\caption{Prices paid by the BRPs}
|
||||
\caption{Prices paid by the BRPs \cite{elia_tariffs_2022}}
|
||||
\label{tab:imbalance_price}
|
||||
\end{table}
|
||||
|
||||
The imbalance price calculation includes the following variables: \\
|
||||
- MDP: Marginal price of downward activation \\
|
||||
- MIP: Marginal price of upward activation \\
|
||||
- \(\alpha\): Extra parameter dependent on System Imbalance \\
|
||||
\\
|
||||
- \(\alpha\): Extra parameter dependent on System Imbalance
|
||||
|
||||
TODO: Add more information about the imbalance price calculation, alpha?
|
||||
The formulas used to calculate the imbalance price can change. Elia publishes the tariffs and formulas used to calculate the imbalance price \cite{elia_tariffs_2022}.
|
||||
|
||||
The imbalance price can be reconstructed given the bids of a certain quarter/day and the System Imbalance. During this thesis, the system imbalance is assumed to be almost the same as the Net Regulation Volume. This is a simplification but it is a good approximation. The goal of this thesis is to model the Net Regulation Volume which can then be used to reconstruct the imbalance price and to make decisions on when to buy or sell electricity.
|
||||
Given the bids of the BSPs for a certain quarter or day and knowing System Imbalance, the imbalance price can be reconstructed using the calculation provided by Elia. During this thesis, the system imbalance is assumed to be almost the same as the Net Regulation Volume. This is a simplification but it is a good approximation. The goal of this thesis is to model the Net Regulation Volume which can then be used to reconstruct the imbalance price and to make decisions on when to buy or sell electricity. To reconstruct the imbalance price from the NRV value for a certain quarter, the bids of the BSPs are needed. These bids can be transformed into a bid ladder. This bid ladder aggregates the bids of the BSPs and shows the total price for the activation of a certain volume of energy. This way, the highest marginal prices can easily be determined for the activation of a certain volume of energy. A bid ladder example is shown in Figure \ref{fig:bid_ladder}.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{images/bid_ladder.png}
|
||||
\caption{Example of a bid ladder. The bid ladder shows the total price for the activation of a certain volume of energy.}
|
||||
\label{fig:bid_ladder}
|
||||
\end{figure}
|
||||
|
||||
\section{Generative modeling}
|
||||
Simple forecasting of the NRV is often not accurate and defining a policy using this forecast will lead to wrong decisions. A better method would be to try to model the NRV and sample multiple generations of the NRV for a whole day. This can give a better understanding of the uncertainty of the NRV. Better decisions can then be made based on multiple generations of the NRV.
|
||||
Forecasting the imbalance price is a difficult task. The price is influenced by many different factors like the weather, time of day, ... but also by the formulas used by the TSO to calculate the imbalance price. The formulas can change which results in a different imbalance price distribution. This makes it hard to train a model to forecast the imbalance price using historical data. Another method to forecast the imbalance price is to forecast the Net Regulation Volume (NRV) and then use the formulas provided by the TSO to calculate the imbalance price. This way, the model does not need to learn the imbalance price distribution but only the NRV distribution.
|
||||
|
||||
Generative modeling is a type of machine learning that is used to generate new data samples that look like the training data. The goal of generative modeling is to learn the true data distribution and use this distribution to generate new samples. Generative modeling is used in many different fields including image generation, text generation etc.
|
||||
Forecasting a time series is a difficult task because of the uncertainty in the data and the many different factors that can influence the data. Simple forecasting of the NRV is often not accurate and defining a policy using this forecast will lead to wrong decisions. A better method would be to try to model the NRV and sample multiple full-day generations of the NRV. This can give a better understanding of the uncertainty of the NRV. More informed decisions can then be made based on multiple generations of the NRV.
|
||||
|
||||
In this thesis, generative modeling can be used to model the NRV of the Belgian electricity market using different conditional input features like the weather, the load forecast etc. The model can then be used to generate new samples of the NRV.
|
||||
Generative modeling is a type of machine learning that is used to generate new data samples that look like the training data. The goal of generative modeling is to learn the true data distribution and use this distribution to generate new samples. Generative modeling is used in many different fields including image generation, text generation, audio generation etc.
|
||||
|
||||
In this thesis, generative modeling can be used to model the NRV of the Belgian electricity market using different conditional input features like the weather, the load forecast etc. The model can then be used to generate new full-day generations of the NRV that can be used to make better decisions on when to buy or sell electricity.
|
||||
|
||||
There exist many different types of generative models. Some of the most popular ones are:
|
||||
\begin{itemize}
|
||||
\item Generative Adversarial Networks (GANs)
|
||||
\item Variational Autoencoders (VAEs)
|
||||
\item Normalizing Flows
|
||||
\item Diffusion models
|
||||
\item Generative Adversarial Networks (GANs) \cite{goodfellow_generative_2014}
|
||||
\item Variational Autoencoders (VAEs) \cite{kingma_auto-encoding_2022}
|
||||
\item Normalizing Flows \cite{rezende_variational_2015}
|
||||
\item Diffusion models \cite{sohl-dickstein_deep_2015}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Quantile Regression}
|
||||
Another method can be used to use any feedforward neural network as a generative model. This method is called quantile regression. This method enables the model to output values to reconstruct the distribution of the target variable instead of a single value for a quarter. This distribution can then be used to sample the NRV value for a quarter. The sampling allows for multiple full-day generations of the NRV.
|
||||
Any feedforward neural network can also be used to output distributions for the target values. For example, if the distribution is assumed to be normal, the model can output the mean and the standard deviation of the target value. This way, the model can output a distribution for the target value instead of a single forecast value. The outputted distribution allows for multiple samples to be drawn from the distribution. This can be used to generate multiple full-day generations of the NRV.
|
||||
|
||||
When quantile regression is used, the model outputs the values for multiple quantiles for the target value of a certain quarter. A quantile is a statistical value of a random variable below which a certain proportion of observations fall. Figure \ref{fig:quantile_example} shows the cumulative distribution function of a normal distribution. The figure shows the 25th, 50th and 75th quantiles. The 25th quantile is the value below which 25\% of the observations fall. In the example, this value is -0.67. The other quantiles work in the same way.
|
||||
This method requires that the distributions of the target values be known in advance, or at least assumed. However, it is common for these distributions to be unknown. Fortunately, there is an alternative approach that can estimate the distribution of the target values without prior knowledge of the distribution. This technique is known as quantile regression, introduced by Koenker and Bassett \cite{koenker_regression_1978}.
|
||||
|
||||
Quantile regression is a method that uses feedforward neural networks to estimate multiple quantiles of the target value. A quantile is a statistical value of a random variable below which a certain proportion of observations fall. For example, the 25th quantile is the value below which 25\% of the observations fall. An example is shown in Figure \ref{fig:quantile_example}. By estimating multiple quantiles using quantile regression, the cumulative distribution of the target values can be reconstructed. For each quarter of the day, the quantiles of the NRV are estimated by the model and used to reconstruct the distribution of the NRV for that quarter. Samples can then be drawn from this reconstructed distribution. This way, multiple full-day generations of the NRV can be generated.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{images/quantile_regression/cdf_quantiles_example.png}
|
||||
\caption{Example of quantiles}
|
||||
\caption{Example of a cumulative distribution function (CDF) and some quantiles. The quantiles are the values below which a certain proportion of observations fall.}
|
||||
\label{fig:quantile_example}
|
||||
\end{figure}
|
||||
|
||||
Using the outputted quantiles, the cumulative distribution function can be reconstructed and used to sample the NRV value for the quarter to predict. An example of the output of a quantile regression model is shown in figure \ref{fig:quantile_regression_example}. The output values of the different quantiles are plotted and these are interpolated to get the cumulative distribution function. In this thesis, the quantiles used are 1\%, 5\%, 10\%, 15\%, 30\%, 40\%, 50\%, 60\%, 70\%, 85\%, 90\%, 95\%, and 99\%. These are chosen to get a good approximation of the cumulative distribution function. More quantiles at the tails of the distribution are used because the edges of the distribution are more important for the imbalance price calculation. The outputted quantile values are then interpolated using cubic spline and samples can be drawn from the reconstructed cumulative distribution function.
|
||||
The model outputs quantiles that can be used to reconstruct the cumulative distribution function (CDF) of a target NRV value. This distribution can then be used to sample the NRV value for a quarter. An example of the output of a quantile regression model is shown in figure \ref{fig:quantile_regression_example}. The output values of the different quantiles are plotted and interpolated to get the cumulative distribution function. In this thesis, the quantiles used are 1\%, 5\%, 10\%, 15\%, 30\%, 40\%, 50\%, 60\%, 70\%, 85\%, 90\%, 95\%, and 99\%. These are chosen to get a good approximation of the cumulative distribution function. More quantiles at the tails of the distribution are used because the edges of the distribution are important. They capture extreme outcomes, which are crucial for risk management, decision-making under uncertainty, and ensuring model robustness and accuracy.
|
||||
|
||||
TODO: figure goes under 0, maybe use other values or other interpolation? + inverse the values to real values
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{images/quantile_regression/reconstructed_cdf.png}
|
||||
@@ -121,7 +142,7 @@ TODO: figure goes under 0, maybe use other values or other interpolation? + inve
|
||||
|
||||
The NRV value for a quarter can be sampled from the reconstructed cumulative distribution function. A full-day prediction for the NRV exists of 96 values. This means 96 cumulative distributions need to be reconstructed and samples need to be drawn from each of the distributions.
|
||||
|
||||
The quantile regression model is trained using the pinball loss function, also known as the quantile loss. The model outputs the quantile values for the NRV. The quantile values themselves are not available in the training data. Only the real NRV values are known. The loss function is defined as:
|
||||
The model needs to learn the quantiles of the NRV values. These, however, are not available in the training data. Only the historical NRV values are known. A special loss function is needed to train the model to output the quantiles of the NRV values. This loss function is called the pinball loss function \cite{team_pinball_nodate}. The loss function is defined as: \\
|
||||
\begin{equation}
|
||||
L_\tau(y, \hat{y}) = \begin{cases}
|
||||
\tau(y - \hat{y}) & \text{if } y \geq \hat{y} \\
|
||||
@@ -134,7 +155,8 @@ The quantile regression model is trained using the pinball loss function, also k
|
||||
y & = \text{Actual observed value of NRV} \\
|
||||
\hat{y} & = \text{Predicted quantile value of NRV} \\
|
||||
\end{align*}
|
||||
The loss function works by penalizing underestimation and overestimation differently. When a quantile is predicted that is lower than or equal to the actual value, the loss is calculated as the difference between the actual value and the predicted quantile value multiplied by the quantile of interest. This means that underestimations for high quantiles are penalized higher than for lower quantiles.
|
||||
|
||||
The loss function works by penalizing underestimation and overestimation of the quantile predictions differently. When a predicted quantile is lower than or equal to the actual value, the loss is calculated as the difference between the actual value and the predicted quantile value multiplied by the quantile of interest. This implies that the underestimations for high quantiles are penalized more heavily than for lower quantiles, as $\tau$ is larger for higher quantiles.
|
||||
|
||||
When the quantile value prediction is higher than the real NRV value, the loss is calculated as the difference between the predicted quantile value and the real NRV multiplied by $(1-\tau)$. This means that overestimations are penalized less for high quantiles of interest.
|
||||
|
||||
@@ -150,16 +172,21 @@ When the quantile value prediction is higher than the real NRV value, the loss i
|
||||
\hat{y}_i & = \text{Predicted quantile value of NRV for sample i} \\
|
||||
\end{align*}
|
||||
|
||||
To calculate the pinball loss, the mean over the quantiles of interest and samples need to be taken. This gives a scalar loss value which can be used to do backpropagation. The lower this value, the better the NRV distribution is modeled.
|
||||
To calculate the pinball loss, the mean is taken over the quantiles of interest and the samples. This results in a scalar loss value that can be used for backpropagation. A lower pinball loss indicates a better modeling of the NRV distribution.
|
||||
|
||||
\subsection{Autoregressive vs Non-Autoregressive models}
|
||||
Two types of generative models exist, autoregressive and non-autoregressive models. Autoregressive models generate samples by sampling from the model one step at a time. The model generates the next value based on the previous values. This means that the model generates samples sequentially. Non-autoregressive models on the other hand generate samples in one step. The model generates the whole sample existing of multiple values at once. This means that the model can generate samples in parallel which can be done way faster than autoregressive models. The downside of non-autoregressive models is that the model itself is more complex and harder to train. It needs to predict all values at once which can be harder than predicting one value at a time.
|
||||
|
||||
The quantile regression method can be used with both types of models. The autoregressive model will only output the quantiles for the next quarter based on the given input features. The cumulative distribution function can be reconstructed from these and be used to sample the NRV value. To obtain a full-day sample, the model needs to be run 96 times sequentially. The sample for the next quarter depends on the sample of the previous quarter.
|
||||
Generative models can be broadly classified into two types: autoregressive and non-autoregressive models.
|
||||
|
||||
The non-autoregressive model will output the quantiles for all quarters of the day based on the input features. The cumulative distribution functions all need to be reconstructed and samples can be drawn from each of the distributions. When sampling from the distributions at once, the samples are independent of each other. The sample for the next quarter does not depend on the sample of the previous quarter which can result in some unrealistic samples.
|
||||
Autoregressive models generate samples sequentially, one step at a time. At each step, the model generates the next value based on the previously generated values. This sequential process ensures that the dependencies between values are naturally captured, but it also results in slower sample generation, as each value must be generated in order.
|
||||
|
||||
The input features for autoregressive and non-autoregressive also differ. When forecasted features are used, the autoregressive model only uses the forecasted values for the next quarter while the non-autoregressive model uses the forecasted values for all quarters of the day. In theory, the autoregressive model should also be able to use forecasted values for quarters further in the future but this makes it harder to use in practice. When the last quarter of a day needs to be predicted, the forecasted values for the next day are needed which are not available. For simplicity, during this thesis, the autoregressive model will only be provided with the forecasted values for the next quarter.
|
||||
Non-autoregressive models, in contrast, generate the entire sample in a single step. Instead of generating values sequentially, these models produce all the values of the sample simultaneously, allowing for parallel generation. This significantly speeds up the sample generation process compared to autoregressive models. However, the complexity of non-autoregressive models is higher, making them more challenging to train. These models must accurately predict all values of the sample at once, which can be more difficult than predicting one value at a time.
|
||||
|
||||
Quantile regression can be applied to both types of models. For autoregressive models, the model outputs the quantiles for the next time step based on the given input features. From these quantiles, the cumulative distribution function (CDF) can be reconstructed and used to sample the NRV value. To obtain a full-day sample, the model needs to run sequentially for each quarter-hour, resulting in 96 iterations per day. Each sample for the next quarter depends on the sample of the previous quarter.
|
||||
|
||||
For non-autoregressive models, the model outputs the quantiles for all quarters of the day simultaneously based on the input features. The CDFs for each quarter are reconstructed, and samples are drawn from these distributions. Since the samples are generated in parallel, they are independent of each other. This independence can sometimes lead to unrealistic samples, as the sample for the next quarter does not depend on the sample of the previous quarter.
|
||||
|
||||
The input features for autoregressive and non-autoregressive models also differ. When using forecasted features, the autoregressive model utilizes forecasted values for the next quarter only, while the non-autoregressive model uses forecasted values for all quarters of the day. Although, in theory, the autoregressive model could use forecasted values for further future quarters, this complicates practical application. For instance, predicting the last quarter of a day would require forecasted values for the next day, which may not be available. Therefore, in this thesis, the autoregressive model is provided only with forecasted values for the next quarter to simplify the approach.
|
||||
|
||||
\subsection{Model Types}
|
||||
\subsubsection{Linear Model}
|
||||
@@ -176,7 +203,7 @@ A simple linear model can be used as a baseline to compare the more complex mode
|
||||
x_1, ..., x_n & = \text{Input features} \\
|
||||
\end{align*}
|
||||
|
||||
This model needs to be adapted to be used for quantile regression. The model needs to output the quantiles for the target value. This can be done by training multiple linear models for each of the quantiles. The model can be trained using the pinball loss function. The number of parameters in this model is quite low which makes it easier and faster to train. The downside of this model is that it is very simple and might not be able to capture the complexity of the data. The number of parameters of this model is $\text{number of quantiles} \times (\text{number of input features} + 1)$.
|
||||
This model needs to be adapted to be used for quantile regression. The model needs to output the quantiles for the target value. This can be done by training multiple linear models for each of the quantiles. The model can be trained using the pinball loss function. The number of parameters in this model is quite low which makes it easier and faster to train. The downside of this model is that it is very simple and might not be able to capture the complexity of the data. The number of parameters of this model is $\text{number of quantiles} \times (\text{number of input features} + 1)$. The formula for a linear quantile regression model is shown below:
|
||||
|
||||
\begin{equation}
|
||||
\hat{y}_\tau = \beta_{0, \tau} + \beta_{1, \tau} x_1 + \beta_{2, \tau} x_2 + ... + \beta_{n, \tau} x_n
|
||||
@@ -199,7 +226,7 @@ Another more complex model that can be used is a Recurrent Neural Network (RNN).
|
||||
|
||||
The RNN model can be used to model the NRV data. The input features are structured in a way that the model can learn the sequential patterns in the data. The model can be trained to output the quantiles for the NRV based on the input features using the pinball loss function.
|
||||
|
||||
Multiple types of RNN models exist. The two most common types of RNNs are the Long Short-Term Memory (LSTM) and the Gated Recurrent Unit (GRU). The GRU is a simpler version of the LSTM. The GRU has fewer parameters which results in faster training times. The GRU still can capture long-term dependencies in the data and can achieve similar performance to the LSTM. The GRU model has two gates, the reset gate and the update gate. The reset gate determines how much of the past information to forget, and the update gate determines how much of the new information to keep.
|
||||
Multiple types of RNN models exist. The two most common types of RNNs are the Long Short-Term Memory (LSTM) \cite{hochreiter_long_1997} and the Gated Recurrent Unit (GRU) \cite{cho_learning_2014}. The GRU is a simpler version of the LSTM. The GRU has fewer parameters which results in faster training times. The GRU still can capture long-term dependencies in the data and can achieve similar performance to the LSTM. The GRU model has two gates, the reset gate and the update gate. The reset gate determines how much of the past information to forget, and the update gate determines how much of the new information to keep.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
@@ -219,13 +246,11 @@ The input features for the RNN model are carefully structured to capture the rel
|
||||
The input feature structure is designed to provide the model with a comprehensive view of the previous quarters and the forecasted values for the current quarter. By incorporating both historical and forecasted information sequentially, the model can learn to predict the NRV quantiles for the next quarter more accurately.
|
||||
|
||||
\subsection{Diffusion models}
|
||||
TODO: reference the paper
|
||||
The "Denoising Diffusion Probabilistic Models" (DDPM)
|
||||
\subsubsection{Overview}
|
||||
Diffusion models are a type of probabilistic model designed to generate high-quality, diverse samples from complex data distributions. The way this type of model is trained is unique. The model is trained to reverse an iterative noise process that is applied to the data. This process is called the diffusion process. The model denoises the data in each iteration. During the training, the model learns to reverse the diffusion process. A training sample is transformed into a noise sample by applying the diffusion process. The model is then trained to recover the original sample from the noise sample. The model is trained to maximize the likelihood of the data given the noise. By doing this, the model learns to generate samples from the data distribution. Starting from the noise, the model can generate samples that look like the data. The model can also be conditioned on additional information to generate samples that follow other distributions.
|
||||
Diffusion models are a type of probabilistic model designed to generate high-quality, diverse samples from complex data distributions. The way this type of model is trained is unique. The model is trained to reverse an iterative noise process that is applied to the data. This process is called the diffusion process. The model denoises the data in each iteration. During the training, the model learns to reverse the diffusion process. A training sample is transformed into a noise sample by applying the diffusion process. The model is then trained to recover the original sample from the noise sample. The model is trained to maximize the likelihood of the data given the noise. By doing this, the model learns to generate samples from the data distribution. Starting from the noise, the model can generate samples that look like the data. The model can also be conditioned on additional information to generate samples that follow other distributions. \cite{sohl-dickstein_deep_2015}
|
||||
|
||||
\subsubsection{Applications}
|
||||
Diffusion models gained popularity in the field of computer vision. They are used for inpainting, super-resolution, image generation, image editing etc. The paper introducing "Denoising Diffusion Probabilistic Models" (DDPM) showed that diffusion models can achieve state-of-the-art results in image generation. This type of model was then applied to other fields like text generation, audio generation etc. The most popular application of diffusion models is still image generation. Many different models and products exist that make use of diffusion models to generate images. Some examples are DALL·E, Stable Diffusion, Midjourney, etc. These models can generate or edit images based on a given text description.
|
||||
Diffusion models gained popularity in the field of computer vision. They are used for inpainting, super-resolution, image generation, image editing etc. The paper introducing "Denoising Diffusion Probabilistic Models" (DDPM) by \citet{ho_denoising_2020} showed that diffusion models can achieve state-of-the-art results in image generation. This type of model was then applied to other fields like text generation, audio generation etc. The most popular application of diffusion models is still image generation. Many different models and products exist that make use of diffusion models to generate images. Some examples are DALL·E, Stable Diffusion, Midjourney, etc. These models can generate or edit images based on a given text description.
|
||||
|
||||
This method can also be applied to other fields like audio generation, text generation etc. In this thesis, diffusion models are explored to model time series data conditioned on additional information. A small example of the diffusion process is shown in Figure \ref{fig:diffusion_example}. An image of a cat is generated by starting from noise and iteratively denoising the image.
|
||||
|
||||
@@ -237,7 +262,7 @@ This method can also be applied to other fields like audio generation, text gene
|
||||
\end{figure}
|
||||
|
||||
\subsubsection{Generation process}
|
||||
The generation process is quite different in comparison to other models. For example, GANs and VAE generate samples by sampling from a noise distribution and then transforming the noise into a sample that looks like the training data in one step using a generator network. Diffusion models generate samples by starting from a noise distribution and then applying a series of denoising steps to the noise. The diffusion process consists of 3 main components: the forward process, the reverse process and the sampling process.
|
||||
The generation process is quite different in comparison to other models. For example, GANs and VAEs generate samples by sampling from a noise distribution and then transforming the noise into a sample that looks like the training data in one step using a generator network. Diffusion models generate samples by starting from a noise distribution and then applying a series of denoising steps to the noise. The diffusion process consists of 3 main components: the forward process, the reverse process and the sampling process.
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Forward process} \\
|
||||
@@ -257,7 +282,6 @@ The generation process is quite different in comparison to other models. For exa
|
||||
In the reverse process, each step aims to undo the diffusion by estimating what the previous, less noisy state might have been. This is done using a series of conditional Gaussian distributions $p_{\theta}(\mathbf{x}_{t-1}|\mathbf{x}_t)$. For each of these Gaussians, a neural network with parameters $\theta$ is used to estimate the mean $\mu_{\theta}(\mathbf{x}_t, t)$ and the covariance $\Sigma_{\theta}(\mathbf{x}_t, t)$ of the distribution. The joint distribution $p_{\theta}(\mathbf{x}_{0:T})$ is then the product the marginal distribution of the last timestep $p(\mathbf{x}_T)$ and the conditional distributions $p_{\theta}(\mathbf{x}_{t-1}|\mathbf{x}_t)$ for each timestep.
|
||||
|
||||
\item \textbf{Training} \\
|
||||
TODO: explain better! \\
|
||||
The model training is done by optimizing the variational bound of the negative log-likelihood. This is also called the evidence lower bound (ELBO) in the context of generative models.
|
||||
\begin{align*}
|
||||
\log p(x) \geq & \mathbb{E}_q \left[ \log p_{\theta} (x_0 | x_1) | x_1 , x_0 \right] \\
|
||||
@@ -276,8 +300,7 @@ The diffusion process can be seen in Figure \ref{fig:diffusion_process}. The mod
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{images/diffusion/diffusion_graphical_model.png}
|
||||
TODO: fix citation
|
||||
%\caption[Diffusion process]{Diffusion process (adapted from \cite{ho2020denoising}).}
|
||||
\caption[Diffusion process]{Diffusion process \cite{ho_denoising_2020}.}
|
||||
\label{fig:diffusion_process}
|
||||
\end{figure}
|
||||
|
||||
@@ -301,7 +324,7 @@ MSE is more sensitive to outliers than MAE because it squares the error between
|
||||
MSE = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{96} \sum_{j=1}^{96} (y_{ij} - \hat{y}_{ij})^2
|
||||
\end{equation}
|
||||
|
||||
The MAE and MSE metrics do not compare the distribution of the NRV to the real NRV value but only take into account the sampled values. Evaluating the outputted distribution for the NRV must be done differently. The Continuous Ranked Probability Score (CRPS) can be used to evaluate the distribution to the real NRV value. The CRPS metric is used to evaluate the accuracy of the predicted cumulative distribution function. The CRPS can be seen as a generalization of the MAE for probabilistic forecasts. The formula for the CRPS is:
|
||||
The MAE and MSE metrics do not compare the distribution of the NRV to the real NRV value but only take into account the sampled values. Evaluating the outputted distribution for the NRV must be done differently. The Continuous Ranked Probability Score (CRPS) \cite{gneiting_strictly_2007} can be used to evaluate the distribution to the real NRV value. The CRPS metric is used to evaluate the accuracy of the predicted cumulative distribution function. The CRPS can be seen as a generalization of the MAE for probabilistic forecasts. The formula for the CRPS is:
|
||||
|
||||
\begin{equation}
|
||||
CRPS(F, x) = \int_{-\infty}^{\infty} (F(y) - \mathbbm{1}(y - x))^2 \, dy
|
||||
@@ -319,10 +342,9 @@ The MAE and MSE metrics do not compare the distribution of the NRV to the real N
|
||||
|
||||
The mean CRPS can be calculated over the different days to get a single value. The lower this value, the better the NRV is modeled. The CRPS metric can be visualized as shown in figure \ref{fig:crps_visualization}. The CRPS is the area between the predicted cumulative distribution function and the Heavyside function. The lower the area between the curves, the better the NRV is modeled.
|
||||
|
||||
TODO: improve visualisation? -> echte NRV + y as cummulative prob
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{images/quantile_regression/crps_visualization.png}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/crps_visualization.png}
|
||||
\caption{Visualization of the CRPS metric}
|
||||
\label{fig:crps_visualization}
|
||||
\end{figure}
|
||||
|
||||
15
Reports/Thesis/sections/conclusion.tex
Normal file
@@ -0,0 +1,15 @@
|
||||
\section{Conclusion}
|
||||
|
||||
During this thesis, multiple models were developed and trained to predict the Net Regulation Volume (NRV) values for specific days using data provided by Elia, the Transmission System Operator (TSO) in Belgium. The models incorporated various input features, including load, wind, photovoltaic power, and nominal net position. To evaluate their performance, the models were assessed using several metrics such as Mean Absolute Error (MAE), Mean Squared Error (MSE), and Continuous Ranked Probability Score (CRPS).
|
||||
|
||||
The primary objective was to model imbalance prices and generate multiple predictions for these prices. These predictions were then utilized to optimize a simple policy for charging and discharging a battery to maximize profit. The optimization process followed a two-step approach: first, different models were used to predict NRV values and generate multiple full-day NRV samples. These samples were then used to reconstruct imbalance prices. Based on these reconstructed prices, the policy determined optimal charge and discharge thresholds for each prediction, with the mean of these thresholds serving as the final thresholds for a given day. The policy's effectiveness was measured by the profit it generated during the test period.
|
||||
|
||||
One significant finding is that traditional evaluation metrics like MAE, MSE, and CRPS do not correlate well with the profitability of the policy. This disconnect necessitates evaluating the models based on the profit they achieve during training, which increases computational complexity and duration. To mitigate this, a smaller validation set can be used to compare models based on maximum profit rather than conventional metrics. This approach revealed that better modeling performance does not always translate into higher profits.
|
||||
|
||||
Among the models tested, only the diffusion model surpassed the baseline policy, which used the previous day's NRV as a prediction. The diffusion model achieved a profit of €218,170.75, marking a 9.74\% increase over the baseline. This demonstrates the potential benefits of modeling imbalance prices and utilizing generated samples to optimize a simple policy for energy trading.
|
||||
|
||||
Future improvements to the diffusion model could involve more sophisticated implementations and advanced conditioning techniques. The current model is basic, and incorporating more complex policies could further enhance battery utilization and profitability.
|
||||
|
||||
In conclusion, this thesis underscores the potential of generative modeling in forecasting imbalance prices and optimizing energy trading policies. While traditional evaluation metrics have limitations, focusing on profitability as a measure of success can lead to more practical and impactful applications in the energy market.
|
||||
|
||||
In conclusion, this thesis shows that generative modeling can be very useful for predicting imbalance prices and improving energy trading strategies. Traditional metrics like MAE, MSE, and CRPS don't always reflect how profitable a model can be. Instead, evaluating models based on the profit they generate is more effective and practical. This approach can lead to better and more impactful applications in the energy market.
|
||||
@@ -1,8 +1,14 @@
|
||||
\relax
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{2}{section.1}\protected@file@percent }
|
||||
\citation{commission_for_electricity_and_gas_regulation_creg_study_2023}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Introduction}{7}{section.2}\protected@file@percent }
|
||||
\ACRO{recordpage}{TSO}{8}{1}{7}
|
||||
\ACRO{recordpage}{TSO}{8}{1}{7}
|
||||
\ACRO{recordpage}{NRV}{9}{1}{8}
|
||||
\ACRO{recordpage}{NRV}{9}{1}{8}
|
||||
\ACRO{recordpage}{NRV}{9}{1}{8}
|
||||
\@setckpt{sections/introduction}{
|
||||
\setcounter{page}{3}
|
||||
\setcounter{page}{9}
|
||||
\setcounter{equation}{0}
|
||||
\setcounter{enumi}{0}
|
||||
\setcounter{enumii}{0}
|
||||
@@ -11,7 +17,7 @@
|
||||
\setcounter{footnote}{0}
|
||||
\setcounter{mpfootnote}{0}
|
||||
\setcounter{part}{0}
|
||||
\setcounter{section}{1}
|
||||
\setcounter{section}{2}
|
||||
\setcounter{subsection}{0}
|
||||
\setcounter{subsubsection}{0}
|
||||
\setcounter{paragraph}{0}
|
||||
@@ -24,141 +30,42 @@
|
||||
\setcounter{continuedfloat}{0}
|
||||
\setcounter{subfigure}{0}
|
||||
\setcounter{subtable}{0}
|
||||
\setcounter{tabx@nest}{0}
|
||||
\setcounter{listtotal}{0}
|
||||
\setcounter{listcount}{0}
|
||||
\setcounter{liststart}{0}
|
||||
\setcounter{liststop}{0}
|
||||
\setcounter{citecount}{0}
|
||||
\setcounter{citetotal}{0}
|
||||
\setcounter{multicitecount}{0}
|
||||
\setcounter{multicitetotal}{0}
|
||||
\setcounter{instcount}{0}
|
||||
\setcounter{maxnames}{2}
|
||||
\setcounter{minnames}{1}
|
||||
\setcounter{maxitems}{999}
|
||||
\setcounter{minitems}{1}
|
||||
\setcounter{citecounter}{0}
|
||||
\setcounter{maxcitecounter}{0}
|
||||
\setcounter{savedcitecounter}{0}
|
||||
\setcounter{uniquelist}{0}
|
||||
\setcounter{uniquename}{0}
|
||||
\setcounter{refsection}{0}
|
||||
\setcounter{refsegment}{0}
|
||||
\setcounter{maxextratitle}{0}
|
||||
\setcounter{maxextratitleyear}{0}
|
||||
\setcounter{maxextraname}{0}
|
||||
\setcounter{maxextradate}{0}
|
||||
\setcounter{maxextraalpha}{0}
|
||||
\setcounter{abbrvpenalty}{50}
|
||||
\setcounter{highnamepenalty}{50}
|
||||
\setcounter{lownamepenalty}{25}
|
||||
\setcounter{maxparens}{3}
|
||||
\setcounter{parenlevel}{0}
|
||||
\setcounter{blx@maxsection}{0}
|
||||
\setcounter{mincomprange}{10}
|
||||
\setcounter{maxcomprange}{100000}
|
||||
\setcounter{mincompwidth}{1}
|
||||
\setcounter{afterword}{0}
|
||||
\setcounter{savedafterword}{0}
|
||||
\setcounter{annotator}{0}
|
||||
\setcounter{savedannotator}{0}
|
||||
\setcounter{author}{0}
|
||||
\setcounter{savedauthor}{0}
|
||||
\setcounter{bookauthor}{0}
|
||||
\setcounter{savedbookauthor}{0}
|
||||
\setcounter{commentator}{0}
|
||||
\setcounter{savedcommentator}{0}
|
||||
\setcounter{editor}{0}
|
||||
\setcounter{savededitor}{0}
|
||||
\setcounter{editora}{0}
|
||||
\setcounter{savededitora}{0}
|
||||
\setcounter{editorb}{0}
|
||||
\setcounter{savededitorb}{0}
|
||||
\setcounter{editorc}{0}
|
||||
\setcounter{savededitorc}{0}
|
||||
\setcounter{foreword}{0}
|
||||
\setcounter{savedforeword}{0}
|
||||
\setcounter{holder}{0}
|
||||
\setcounter{savedholder}{0}
|
||||
\setcounter{introduction}{0}
|
||||
\setcounter{savedintroduction}{0}
|
||||
\setcounter{namea}{0}
|
||||
\setcounter{savednamea}{0}
|
||||
\setcounter{nameb}{0}
|
||||
\setcounter{savednameb}{0}
|
||||
\setcounter{namec}{0}
|
||||
\setcounter{savednamec}{0}
|
||||
\setcounter{translator}{0}
|
||||
\setcounter{savedtranslator}{0}
|
||||
\setcounter{shortauthor}{0}
|
||||
\setcounter{savedshortauthor}{0}
|
||||
\setcounter{shorteditor}{0}
|
||||
\setcounter{savedshorteditor}{0}
|
||||
\setcounter{narrator}{0}
|
||||
\setcounter{savednarrator}{0}
|
||||
\setcounter{execproducer}{0}
|
||||
\setcounter{savedexecproducer}{0}
|
||||
\setcounter{execdirector}{0}
|
||||
\setcounter{savedexecdirector}{0}
|
||||
\setcounter{with}{0}
|
||||
\setcounter{savedwith}{0}
|
||||
\setcounter{labelname}{0}
|
||||
\setcounter{savedlabelname}{0}
|
||||
\setcounter{institution}{0}
|
||||
\setcounter{savedinstitution}{0}
|
||||
\setcounter{lista}{0}
|
||||
\setcounter{savedlista}{0}
|
||||
\setcounter{listb}{0}
|
||||
\setcounter{savedlistb}{0}
|
||||
\setcounter{listc}{0}
|
||||
\setcounter{savedlistc}{0}
|
||||
\setcounter{listd}{0}
|
||||
\setcounter{savedlistd}{0}
|
||||
\setcounter{liste}{0}
|
||||
\setcounter{savedliste}{0}
|
||||
\setcounter{listf}{0}
|
||||
\setcounter{savedlistf}{0}
|
||||
\setcounter{location}{0}
|
||||
\setcounter{savedlocation}{0}
|
||||
\setcounter{organization}{0}
|
||||
\setcounter{savedorganization}{0}
|
||||
\setcounter{origlocation}{0}
|
||||
\setcounter{savedoriglocation}{0}
|
||||
\setcounter{origpublisher}{0}
|
||||
\setcounter{savedorigpublisher}{0}
|
||||
\setcounter{publisher}{0}
|
||||
\setcounter{savedpublisher}{0}
|
||||
\setcounter{language}{0}
|
||||
\setcounter{savedlanguage}{0}
|
||||
\setcounter{origlanguage}{0}
|
||||
\setcounter{savedoriglanguage}{0}
|
||||
\setcounter{citation}{0}
|
||||
\setcounter{savedcitation}{0}
|
||||
\setcounter{pageref}{0}
|
||||
\setcounter{savedpageref}{0}
|
||||
\setcounter{textcitecount}{0}
|
||||
\setcounter{textcitetotal}{0}
|
||||
\setcounter{textcitemaxnames}{0}
|
||||
\setcounter{biburlbigbreakpenalty}{100}
|
||||
\setcounter{biburlbreakpenalty}{200}
|
||||
\setcounter{biburlnumpenalty}{0}
|
||||
\setcounter{biburlucpenalty}{0}
|
||||
\setcounter{biburllcpenalty}{0}
|
||||
\setcounter{smartand}{1}
|
||||
\setcounter{bbx:relatedcount}{0}
|
||||
\setcounter{bbx:relatedtotal}{0}
|
||||
\setcounter{NAT@ctr}{0}
|
||||
\setcounter{AM@survey}{0}
|
||||
\setcounter{section@level}{0}
|
||||
\setcounter{Item}{0}
|
||||
\setcounter{Hfootnote}{0}
|
||||
\setcounter{bookmark@seq@number}{1}
|
||||
\setcounter{bookmark@seq@number}{2}
|
||||
\setcounter{g@acro@QR@int}{0}
|
||||
\setcounter{g@acro@AQR@int}{0}
|
||||
\setcounter{g@acro@NAQR@int}{0}
|
||||
\setcounter{g@acro@GRU@int}{0}
|
||||
\setcounter{g@acro@LSTM@int}{0}
|
||||
\setcounter{g@acro@GAN@int}{0}
|
||||
\setcounter{g@acro@CTSGAN@int}{0}
|
||||
\setcounter{g@acro@VAE@int}{0}
|
||||
\setcounter{g@acro@MLP@int}{0}
|
||||
\setcounter{g@acro@GP@int}{0}
|
||||
\setcounter{g@acro@MSE@int}{0}
|
||||
\setcounter{g@acro@MAE@int}{0}
|
||||
\setcounter{g@acro@CRPS@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{0}
|
||||
\setcounter{g@acro@TSPA@int}{0}
|
||||
\setcounter{g@acro@PLF@int}{0}
|
||||
\setcounter{g@acro@CDF@int}{0}
|
||||
\setcounter{g@acro@QE@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{3}
|
||||
\setcounter{g@acro@PV@int}{0}
|
||||
\setcounter{g@acro@NP@int}{0}
|
||||
\setcounter{g@acro@TSO@int}{2}
|
||||
\setcounter{g@acro@DSO@int}{0}
|
||||
\setcounter{g@acro@BRP@int}{0}
|
||||
\setcounter{g@acro@BSP@int}{0}
|
||||
\setcounter{g@acro@SI@int}{0}
|
||||
\setcounter{g@acro@FCR@int}{0}
|
||||
\setcounter{g@acro@aFRR@int}{0}
|
||||
\setcounter{g@acro@mFRR@int}{0}
|
||||
\setcounter{g@acro@MW@int}{0}
|
||||
\setcounter{g@acro@ACE@int}{0}
|
||||
\setcounter{g@acro@MIP@int}{0}
|
||||
\setcounter{g@acro@MDP@int}{0}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
\section{Introduction}
|
||||
The electricity market is a complex system influenced by numerous factors. The rise of renewable energy sources adds to this complexity, introducing greater volatility compared to traditional energy sources. Renewables, with their unpredictable nature, exacerbate the challenge of maintaining a stable balance between supply and demand. This critical balance is managed by the transmission system operator, Elia, which utilizes reserves to mitigate any potential shortages or surpluses, directly influencing electricity prices.
|
||||
The electricity market is a complex system influenced by numerous factors. The rise of renewable energy sources adds to this complexity, introducing greater volatility compared to traditional energy sources. Renewables, with their unpredictable nature, exacerbate the challenge of maintaining a stable balance between supply and demand. This critical balance is managed by the \ac{TSO}, Elia in Belgium, which utilizes reserves to mitigate any potential shortages or surpluses, directly influencing electricity imbalance prices.
|
||||
|
||||
(TODO: Market participants met flexible assets (Groot genoeg), zij willen grote winst maken. Elia moet minder eigen reserves gebruiken -> goedkoper voor iedereen)
|
||||
Market participants with big enough flexible assets (e.g., industrial batteries) can help keep the grid stable. This helps Elia to use fewer of its reserves, which in turn makes the system cheaper for everyone. The market participants are then paid for their services by Elia. The main goal of the market participants is not to help stabilize the grid, but to make a profit. They can do this by buying electricity when it is cheap and selling it when Elia pays a high price for it.
|
||||
|
||||
The integration of renewable energy sources has significantly increased the complexity and volatility of the electricity market. Unlike traditional energy sources, renewables such as wind and solar power are inherently variable and less predictable. This variability leads to frequent imbalances between electricity supply and demand, necessitating a greater reliance on reserves to stabilize the grid. Consequently, the needed reserves are increasing as the share of renewable energy in the energy mix grows, making it more challenging for the \ac{TSO} to maintain system stability and manage costs. For instance, the proportion of quarter-hours with negative system imbalances has grown, reflecting the increased volatility introduced by renewables. \cite{commission_for_electricity_and_gas_regulation_creg_study_2023}
|
||||
|
||||
Forecasting the imbalance price is vital for market participants engaged in buying or selling electricity. It enables them to make informed decisions on the optimal times to buy or sell, aiming to maximize their profits. However, current industry practices often rely on simplistic policies, such as adhering to a fixed price for transactions. This approach is not optimal and overlooks the potential benefits of adaptive policies that consider the forecasted imbalance prices.
|
||||
|
||||
The goal of this thesis is to generatively model the Belgian electricity market. This allows the reconstruction of the imbalance price for a given day which can then be used by other simple policies to make decisions on when to buy or sell electricity. These policies can then be compared to the current industry practices to assess their performance.
|
||||
The goal of this thesis is to generatively model the imbalance prices in the Belgian electricity market. Using these models, imbalance price forecasts can be generated for a certain day. These forecasts can then be used to optimize a simple policy to utilize a battery to maximize profit. The policy will charge and discharge the battery based on the imbalance price forecasts which results in better buying and selling decisions. This policy can then be compared to other baseline policies to evaluate its performance.
|
||||
|
||||
Forecasting the system imbalance will become increasingly important as the share of renewable energy sources continues to grow.
|
||||
|
||||
This thesis can be divided into two main parts. The first part focuses on modeling the Net Regulation Volume (NRV) of the Belgian electricity market for the next day. This modeling is conditioned on multiple inputs that can be obtained from Elia (TODO: add citation to the open data of Elia). The second part of the thesis focuses on optimizing a simple policy using the NRV generations for the next day. The policy tries to maximize profit by charging and discharging a battery and thereby buying and selling electricity on the market. Multiple models are trained and tested to model the NRV and compared to each other based on their profit optimization.
|
||||
This thesis can be divided into two main parts. The first part focuses on modeling the \ac{NRV} of the Belgian electricity market for the next day. The NRV can later be used to reconstruct the imbalance price. This modeling is conditioned on multiple inputs that can be obtained from data provided by Elia. The second part of the thesis focuses on optimizing a simple policy using the \ac{NRV} generations for the next day. The policy tries to maximize profit by charging and discharging a battery and thereby buying and selling electricity on the market. Multiple models are trained and tested to model the \ac{NRV} and are then compared to each other based on their profit optimization.
|
||||
|
||||
@@ -1,10 +1,20 @@
|
||||
\relax
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {5}Literature Study}{19}{section.5}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Electricity Price Forecasting}{19}{subsection.5.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Policies for Battery Optimization}{20}{subsection.5.2}\protected@file@percent }
|
||||
\citation{weron_electricity_2014}
|
||||
\citation{poggi_electricity_2023}
|
||||
\citation{lago_forecasting_2018}
|
||||
\citation{hagfors_modeling_2016}
|
||||
\citation{lu_scenarios_2022}
|
||||
\citation{dumas_deep_2022}
|
||||
\citation{rasul_autoregressive_2021}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6}Literature Study}{27}{section.6}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Day-Ahead Electricity Price Forecasting}{27}{subsection.6.1}\protected@file@percent }
|
||||
\citation{dumas_probabilistic_2019}
|
||||
\citation{narajewski_probabilistic_2022}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Imbalance Price Forecasting}{28}{subsection.6.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}Policies for Battery Optimization}{28}{subsection.6.3}\protected@file@percent }
|
||||
\@setckpt{sections/literature_study}{
|
||||
\setcounter{page}{21}
|
||||
\setcounter{page}{29}
|
||||
\setcounter{equation}{7}
|
||||
\setcounter{enumi}{0}
|
||||
\setcounter{enumii}{0}
|
||||
@@ -13,12 +23,12 @@
|
||||
\setcounter{footnote}{0}
|
||||
\setcounter{mpfootnote}{0}
|
||||
\setcounter{part}{0}
|
||||
\setcounter{section}{5}
|
||||
\setcounter{subsection}{2}
|
||||
\setcounter{section}{6}
|
||||
\setcounter{subsection}{3}
|
||||
\setcounter{subsubsection}{0}
|
||||
\setcounter{paragraph}{0}
|
||||
\setcounter{subparagraph}{0}
|
||||
\setcounter{figure}{5}
|
||||
\setcounter{figure}{7}
|
||||
\setcounter{table}{2}
|
||||
\setcounter{parentequation}{0}
|
||||
\setcounter{float@type}{4}
|
||||
@@ -26,141 +36,42 @@
|
||||
\setcounter{continuedfloat}{0}
|
||||
\setcounter{subfigure}{0}
|
||||
\setcounter{subtable}{0}
|
||||
\setcounter{tabx@nest}{0}
|
||||
\setcounter{listtotal}{0}
|
||||
\setcounter{listcount}{0}
|
||||
\setcounter{liststart}{0}
|
||||
\setcounter{liststop}{0}
|
||||
\setcounter{citecount}{0}
|
||||
\setcounter{citetotal}{0}
|
||||
\setcounter{multicitecount}{0}
|
||||
\setcounter{multicitetotal}{0}
|
||||
\setcounter{instcount}{5}
|
||||
\setcounter{maxnames}{2}
|
||||
\setcounter{minnames}{1}
|
||||
\setcounter{maxitems}{999}
|
||||
\setcounter{minitems}{1}
|
||||
\setcounter{citecounter}{0}
|
||||
\setcounter{maxcitecounter}{0}
|
||||
\setcounter{savedcitecounter}{0}
|
||||
\setcounter{uniquelist}{0}
|
||||
\setcounter{uniquename}{0}
|
||||
\setcounter{refsection}{0}
|
||||
\setcounter{refsegment}{0}
|
||||
\setcounter{maxextratitle}{0}
|
||||
\setcounter{maxextratitleyear}{0}
|
||||
\setcounter{maxextraname}{0}
|
||||
\setcounter{maxextradate}{0}
|
||||
\setcounter{maxextraalpha}{0}
|
||||
\setcounter{abbrvpenalty}{50}
|
||||
\setcounter{highnamepenalty}{50}
|
||||
\setcounter{lownamepenalty}{25}
|
||||
\setcounter{maxparens}{3}
|
||||
\setcounter{parenlevel}{0}
|
||||
\setcounter{blx@maxsection}{0}
|
||||
\setcounter{mincomprange}{10}
|
||||
\setcounter{maxcomprange}{100000}
|
||||
\setcounter{mincompwidth}{1}
|
||||
\setcounter{afterword}{0}
|
||||
\setcounter{savedafterword}{0}
|
||||
\setcounter{annotator}{0}
|
||||
\setcounter{savedannotator}{0}
|
||||
\setcounter{author}{0}
|
||||
\setcounter{savedauthor}{0}
|
||||
\setcounter{bookauthor}{0}
|
||||
\setcounter{savedbookauthor}{0}
|
||||
\setcounter{commentator}{0}
|
||||
\setcounter{savedcommentator}{0}
|
||||
\setcounter{editor}{0}
|
||||
\setcounter{savededitor}{0}
|
||||
\setcounter{editora}{0}
|
||||
\setcounter{savededitora}{0}
|
||||
\setcounter{editorb}{0}
|
||||
\setcounter{savededitorb}{0}
|
||||
\setcounter{editorc}{0}
|
||||
\setcounter{savededitorc}{0}
|
||||
\setcounter{foreword}{0}
|
||||
\setcounter{savedforeword}{0}
|
||||
\setcounter{holder}{0}
|
||||
\setcounter{savedholder}{0}
|
||||
\setcounter{introduction}{0}
|
||||
\setcounter{savedintroduction}{0}
|
||||
\setcounter{namea}{0}
|
||||
\setcounter{savednamea}{0}
|
||||
\setcounter{nameb}{0}
|
||||
\setcounter{savednameb}{0}
|
||||
\setcounter{namec}{0}
|
||||
\setcounter{savednamec}{0}
|
||||
\setcounter{translator}{0}
|
||||
\setcounter{savedtranslator}{0}
|
||||
\setcounter{shortauthor}{0}
|
||||
\setcounter{savedshortauthor}{0}
|
||||
\setcounter{shorteditor}{0}
|
||||
\setcounter{savedshorteditor}{0}
|
||||
\setcounter{narrator}{0}
|
||||
\setcounter{savednarrator}{0}
|
||||
\setcounter{execproducer}{0}
|
||||
\setcounter{savedexecproducer}{0}
|
||||
\setcounter{execdirector}{0}
|
||||
\setcounter{savedexecdirector}{0}
|
||||
\setcounter{with}{0}
|
||||
\setcounter{savedwith}{0}
|
||||
\setcounter{labelname}{0}
|
||||
\setcounter{savedlabelname}{0}
|
||||
\setcounter{institution}{0}
|
||||
\setcounter{savedinstitution}{0}
|
||||
\setcounter{lista}{0}
|
||||
\setcounter{savedlista}{0}
|
||||
\setcounter{listb}{0}
|
||||
\setcounter{savedlistb}{0}
|
||||
\setcounter{listc}{0}
|
||||
\setcounter{savedlistc}{0}
|
||||
\setcounter{listd}{0}
|
||||
\setcounter{savedlistd}{0}
|
||||
\setcounter{liste}{0}
|
||||
\setcounter{savedliste}{0}
|
||||
\setcounter{listf}{0}
|
||||
\setcounter{savedlistf}{0}
|
||||
\setcounter{location}{0}
|
||||
\setcounter{savedlocation}{0}
|
||||
\setcounter{organization}{0}
|
||||
\setcounter{savedorganization}{0}
|
||||
\setcounter{origlocation}{0}
|
||||
\setcounter{savedoriglocation}{0}
|
||||
\setcounter{origpublisher}{0}
|
||||
\setcounter{savedorigpublisher}{0}
|
||||
\setcounter{publisher}{0}
|
||||
\setcounter{savedpublisher}{0}
|
||||
\setcounter{language}{0}
|
||||
\setcounter{savedlanguage}{0}
|
||||
\setcounter{origlanguage}{0}
|
||||
\setcounter{savedoriglanguage}{0}
|
||||
\setcounter{citation}{0}
|
||||
\setcounter{savedcitation}{0}
|
||||
\setcounter{pageref}{0}
|
||||
\setcounter{savedpageref}{0}
|
||||
\setcounter{textcitecount}{0}
|
||||
\setcounter{textcitetotal}{0}
|
||||
\setcounter{textcitemaxnames}{0}
|
||||
\setcounter{biburlbigbreakpenalty}{100}
|
||||
\setcounter{biburlbreakpenalty}{200}
|
||||
\setcounter{biburlnumpenalty}{0}
|
||||
\setcounter{biburlucpenalty}{0}
|
||||
\setcounter{biburllcpenalty}{0}
|
||||
\setcounter{smartand}{1}
|
||||
\setcounter{bbx:relatedcount}{0}
|
||||
\setcounter{bbx:relatedtotal}{0}
|
||||
\setcounter{NAT@ctr}{0}
|
||||
\setcounter{AM@survey}{0}
|
||||
\setcounter{section@level}{0}
|
||||
\setcounter{Item}{0}
|
||||
\setcounter{Hfootnote}{0}
|
||||
\setcounter{bookmark@seq@number}{20}
|
||||
\setcounter{bookmark@seq@number}{22}
|
||||
\setcounter{g@acro@QR@int}{0}
|
||||
\setcounter{g@acro@AQR@int}{0}
|
||||
\setcounter{g@acro@NAQR@int}{0}
|
||||
\setcounter{g@acro@GRU@int}{0}
|
||||
\setcounter{g@acro@LSTM@int}{0}
|
||||
\setcounter{g@acro@GAN@int}{0}
|
||||
\setcounter{g@acro@CTSGAN@int}{0}
|
||||
\setcounter{g@acro@VAE@int}{0}
|
||||
\setcounter{g@acro@MLP@int}{0}
|
||||
\setcounter{g@acro@GP@int}{0}
|
||||
\setcounter{g@acro@MSE@int}{0}
|
||||
\setcounter{g@acro@MAE@int}{0}
|
||||
\setcounter{g@acro@CRPS@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{0}
|
||||
\setcounter{g@acro@TSPA@int}{0}
|
||||
\setcounter{g@acro@PLF@int}{0}
|
||||
\setcounter{g@acro@CDF@int}{0}
|
||||
\setcounter{g@acro@QE@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{3}
|
||||
\setcounter{g@acro@PV@int}{0}
|
||||
\setcounter{g@acro@NP@int}{0}
|
||||
\setcounter{g@acro@TSO@int}{3}
|
||||
\setcounter{g@acro@DSO@int}{0}
|
||||
\setcounter{g@acro@BRP@int}{1}
|
||||
\setcounter{g@acro@BSP@int}{1}
|
||||
\setcounter{g@acro@SI@int}{0}
|
||||
\setcounter{g@acro@FCR@int}{1}
|
||||
\setcounter{g@acro@aFRR@int}{1}
|
||||
\setcounter{g@acro@mFRR@int}{1}
|
||||
\setcounter{g@acro@MW@int}{0}
|
||||
\setcounter{g@acro@ACE@int}{0}
|
||||
\setcounter{g@acro@MIP@int}{0}
|
||||
\setcounter{g@acro@MDP@int}{0}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,28 @@
|
||||
% - Literatuur forecasting imbalance price
|
||||
% - Literatuur policies adhv forecasts
|
||||
|
||||
\subsection{Day-Ahead Electricity Price Forecasting}
|
||||
Forecasting electricity prices is crucial for market participants aiming to make informed decisions and optimize their operations and profits. Since the early 2000s, significant research has focused on predicting day-ahead electricity prices. Initial models relied on time series analysis, using methods such as autoregression and moving averages (ARMA, ARIMA). However, these often fell short in capturing the complex and nonlinear patterns of electricity prices.
|
||||
|
||||
\subsection{Electricity Price Forecasting}
|
||||
Forecasting the electricity price is a challenging task that has been researched extensively. Knowing the future electricity price is crucial for market participants to make informed decisions and optimize their operations and profit. Already since the early 2000s, researchers have been trying to predict the electricity price. The first models were based on time series analysis, but with the rise of machine learning, more advanced models have been developed. A rise in publications on this topic can be observed since 2005. This is described in the literature review by \parencite{weron_electricity_2014}. An overview is given of the evolution of the methods used for electricity price forecasting. A significant shift can be observed towards integrating machine learning techniques with traditional statistical methods. The earliest models were based on time series analysis involving methods like autoregression, moving averages and their combinations (ARMA, ARIMA). These methods are not always able to capture the complex patterns in the electricity price. Therefore, researchers started to use more advanced models like neural networks, support vector machines, and random forests. The combination of statistical and machine learning models is more accurate. The statistical models are used to capture the linear patterns, while the machine learning models are used to capture the more complex non-linear patterns. This results in a more accurate and robust model. The more recent paper \parencite{poggi_electricity_2023} compares the performance of statistical and machine learning methods for electricity price forecasting. The authors use ARIMA and SARIMA as statistical methods and XGBoost as a machine learning method. They also compare the performance of Long Short-Term Memory (LSTM) networks for electricity price forecasting.
|
||||
With the rise of machine learning, more advanced models have emerged. A notable increase in publications since 2005, highlighted by \citet{weron_electricity_2014}, marks a shift towards integrating machine learning with traditional statistical methods. Early models like ARMA and ARIMA focused on linear patterns, but the complexity of price movements led to the adoption of more sophisticated models. Researchers began using neural networks, support vector machines, and random forests to better capture nonlinear aspects of price behavior.
|
||||
|
||||
Because forecasting the electricity price is a challenging task with a lot of uncertainty, other generative methods to model the electricity price were researched. Generative modeling is a type of unsupervised learning that can be used to generate new samples from the same distribution as the training data. This can be used to generate new electricity price samples. The authors of \parencite{lu_scenarios_2022} use General Adversarial Networks (GANs) to generate new electricity price scenarios. They introduce a deep learning framework called Conditional Time Series Generative Adversarial Networks (CTSGAN) to generate electricity price scenarios. This enhances the traditional forecasting models by allowing the generation of a diverse set of potential future scenarios. This capability allows the modeling of the uncertainty in the electricity price. The authors show that the CTSGAN model outperforms traditional forecasting models in terms of forecasting accuracy. Other generative models like normalizing flows can also be used to generate new electricity price samples. The authors of \parencite{dumas_deep_2022} use normalizing flows to generate new electricity price samples. They show that normalizing flow models for electricity price forecasting are more accurate in quality than other generative models like GANs and Variational Autoencoders (VAEs). Not a lot of research has been done on using diffusion models for electricity price forecasting. The authors of \parencite{rasul_autoregressive_2021}, however, show that autoregressive diffusion models can be used for time series forecasting and achieve good results. They apply the model on multiple datasets which includes an electricity price dataset. The use of diffusion models for NRV modeling is further explored in this thesis.
|
||||
Combining statistical and machine learning models has proven more accurate. Statistical models capture linear patterns, while machine learning models identify complex, nonlinear patterns. This hybrid approach results in robust forecasting models. For instance, \citet{poggi_electricity_2023} compare ARIMA and SARIMA with machine learning methods like XGBoost and Long Short-Term Memory (LSTM) networks.
|
||||
|
||||
Most research on forecasting for the electricity market focuses on the electricity price for consumers. Another important aspect of the electricity market is the imbalance price. Not many papers have been published on forecasting the imbalance price. One paper \parencite{dumas_deep_2022} describes the forecasting of the imbalance price. They do not forecast the price itself but rather forecast the NRV and use this to reconstruct the imbalance price. This approach will also be used in this thesis.
|
||||
\citet{lago_forecasting_2018} introduce a novel deep learning framework for forecasting electricity prices, comparing traditional algorithms with deep learning approaches. Their results show that deep learning models, such as LSTM and GRU networks, significantly improve predictive accuracy over traditional statistical models. This comprehensive benchmarking study highlights the potential of deep learning models to enhance the accuracy and reliability of electricity price forecasts, making them valuable for market participants.
|
||||
|
||||
Given the challenges and uncertainties in forecasting electricity prices, researchers have also tried to model the prices. Generative modeling, an unsupervised learning approach, generates new samples mimicking the training data distribution, helping model price uncertainty. The paper by \citet{hagfors_modeling_2016} uses Quantile Regression to model the electricity prices. This is a method that outputs the quantiles of the distribution of the target variable. This can be used to model the uncertainty in electricity prices.
|
||||
|
||||
More advanced modeling techniques can also be used. \citet{lu_scenarios_2022} utilize Generative Adversarial Networks (GANs) to generate new electricity price scenarios for the Australian market, introducing a deep learning framework called CTSGAN. This framework enhances traditional models by generating diverse potential future scenarios, improving accuracy.
|
||||
|
||||
Other generative models, such as normalizing flows, have also been used to generate new electricity price samples. \citet{dumas_deep_2022} show that normalizing flow models are more accurate than GANs and Variational Autoencoders (VAEs) for electricity price forecasting. While diffusion models are less researched, \citet{rasul_autoregressive_2021} demonstrate that autoregressive diffusion models can effectively forecast time series, including electricity prices. This thesis further explores the use of diffusion models for NRV (Net Regulation Volume) modeling.
|
||||
|
||||
\subsection{Imbalance Price Forecasting}
|
||||
This thesis focuses on forecasting the imbalance price, which, while related to the day-ahead electricity price, is more volatile and harder to predict. Techniques used for day-ahead price forecasting can be applied to imbalance prices, but the latter presents additional challenges due to its greater variability. Most research on electricity market forecasting has centered on day-ahead prices, with fewer studies addressing imbalance prices.
|
||||
|
||||
\citet{dumas_probabilistic_2019} provide a notable study on imbalance price forecasting. They use a two-step approach, first forecasting the Net Regulation Volume (NRV) and then converting this forecast into an imbalance price using data from the Transmission System Operator (TSO). This approach leverages various methods, including a deterministic Multilayer Perceptron (MLP), Gaussian Processes (GP), and a Two-Stage Probabilistic Approach (TSPA). Their findings indicate that the two-step probabilistic approach outperforms other methods in terms of probabilistic error measures, although it is less precise in predicting exact imbalance prices.
|
||||
|
||||
Another study by \citet{narajewski_probabilistic_2022} examines short-term forecasting of German imbalance prices using methods such as Lasso regression, Generalized Additive Models for Location, Scale, and Shape (GAMLSS), and probabilistic neural networks. Their results show that while these advanced models do not significantly outperform a simple benchmark in terms of point forecasts, they provide more reliable probabilistic forecasts. This is particularly valuable for market participants who need to manage the inherent uncertainty and volatility in imbalance prices.
|
||||
|
||||
TODO: more information?
|
||||
|
||||
\subsection{Policies for Battery Optimization}
|
||||
\subsection{Policies for Battery Optimization}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
\relax
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4}Policies}{17}{section.4}\protected@file@percent }
|
||||
\newlabel{sec:policies}{{4}{17}{Policies}{section.4}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Baselines}{17}{subsection.4.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Policies based on NRV generations}{18}{subsection.4.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {5}Battery Optimization Policies}{25}{section.5}\protected@file@percent }
|
||||
\newlabel{sec:policies}{{5}{25}{Battery Optimization Policies}{section.5}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Baselines}{25}{subsection.5.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Policies based on NRV generations}{25}{subsection.5.2}\protected@file@percent }
|
||||
\@setckpt{sections/policies}{
|
||||
\setcounter{page}{19}
|
||||
\setcounter{page}{27}
|
||||
\setcounter{equation}{7}
|
||||
\setcounter{enumi}{0}
|
||||
\setcounter{enumii}{0}
|
||||
@@ -14,12 +14,12 @@
|
||||
\setcounter{footnote}{0}
|
||||
\setcounter{mpfootnote}{0}
|
||||
\setcounter{part}{0}
|
||||
\setcounter{section}{4}
|
||||
\setcounter{section}{5}
|
||||
\setcounter{subsection}{2}
|
||||
\setcounter{subsubsection}{0}
|
||||
\setcounter{paragraph}{0}
|
||||
\setcounter{subparagraph}{0}
|
||||
\setcounter{figure}{5}
|
||||
\setcounter{figure}{7}
|
||||
\setcounter{table}{2}
|
||||
\setcounter{parentequation}{0}
|
||||
\setcounter{float@type}{4}
|
||||
@@ -27,141 +27,42 @@
|
||||
\setcounter{continuedfloat}{0}
|
||||
\setcounter{subfigure}{0}
|
||||
\setcounter{subtable}{0}
|
||||
\setcounter{tabx@nest}{0}
|
||||
\setcounter{listtotal}{0}
|
||||
\setcounter{listcount}{0}
|
||||
\setcounter{liststart}{0}
|
||||
\setcounter{liststop}{0}
|
||||
\setcounter{citecount}{0}
|
||||
\setcounter{citetotal}{0}
|
||||
\setcounter{multicitecount}{0}
|
||||
\setcounter{multicitetotal}{0}
|
||||
\setcounter{instcount}{0}
|
||||
\setcounter{maxnames}{2}
|
||||
\setcounter{minnames}{1}
|
||||
\setcounter{maxitems}{999}
|
||||
\setcounter{minitems}{1}
|
||||
\setcounter{citecounter}{0}
|
||||
\setcounter{maxcitecounter}{0}
|
||||
\setcounter{savedcitecounter}{0}
|
||||
\setcounter{uniquelist}{0}
|
||||
\setcounter{uniquename}{0}
|
||||
\setcounter{refsection}{0}
|
||||
\setcounter{refsegment}{0}
|
||||
\setcounter{maxextratitle}{0}
|
||||
\setcounter{maxextratitleyear}{0}
|
||||
\setcounter{maxextraname}{0}
|
||||
\setcounter{maxextradate}{0}
|
||||
\setcounter{maxextraalpha}{0}
|
||||
\setcounter{abbrvpenalty}{50}
|
||||
\setcounter{highnamepenalty}{50}
|
||||
\setcounter{lownamepenalty}{25}
|
||||
\setcounter{maxparens}{3}
|
||||
\setcounter{parenlevel}{0}
|
||||
\setcounter{blx@maxsection}{0}
|
||||
\setcounter{mincomprange}{10}
|
||||
\setcounter{maxcomprange}{100000}
|
||||
\setcounter{mincompwidth}{1}
|
||||
\setcounter{afterword}{0}
|
||||
\setcounter{savedafterword}{0}
|
||||
\setcounter{annotator}{0}
|
||||
\setcounter{savedannotator}{0}
|
||||
\setcounter{author}{0}
|
||||
\setcounter{savedauthor}{0}
|
||||
\setcounter{bookauthor}{0}
|
||||
\setcounter{savedbookauthor}{0}
|
||||
\setcounter{commentator}{0}
|
||||
\setcounter{savedcommentator}{0}
|
||||
\setcounter{editor}{0}
|
||||
\setcounter{savededitor}{0}
|
||||
\setcounter{editora}{0}
|
||||
\setcounter{savededitora}{0}
|
||||
\setcounter{editorb}{0}
|
||||
\setcounter{savededitorb}{0}
|
||||
\setcounter{editorc}{0}
|
||||
\setcounter{savededitorc}{0}
|
||||
\setcounter{foreword}{0}
|
||||
\setcounter{savedforeword}{0}
|
||||
\setcounter{holder}{0}
|
||||
\setcounter{savedholder}{0}
|
||||
\setcounter{introduction}{0}
|
||||
\setcounter{savedintroduction}{0}
|
||||
\setcounter{namea}{0}
|
||||
\setcounter{savednamea}{0}
|
||||
\setcounter{nameb}{0}
|
||||
\setcounter{savednameb}{0}
|
||||
\setcounter{namec}{0}
|
||||
\setcounter{savednamec}{0}
|
||||
\setcounter{translator}{0}
|
||||
\setcounter{savedtranslator}{0}
|
||||
\setcounter{shortauthor}{0}
|
||||
\setcounter{savedshortauthor}{0}
|
||||
\setcounter{shorteditor}{0}
|
||||
\setcounter{savedshorteditor}{0}
|
||||
\setcounter{narrator}{0}
|
||||
\setcounter{savednarrator}{0}
|
||||
\setcounter{execproducer}{0}
|
||||
\setcounter{savedexecproducer}{0}
|
||||
\setcounter{execdirector}{0}
|
||||
\setcounter{savedexecdirector}{0}
|
||||
\setcounter{with}{0}
|
||||
\setcounter{savedwith}{0}
|
||||
\setcounter{labelname}{0}
|
||||
\setcounter{savedlabelname}{0}
|
||||
\setcounter{institution}{0}
|
||||
\setcounter{savedinstitution}{0}
|
||||
\setcounter{lista}{0}
|
||||
\setcounter{savedlista}{0}
|
||||
\setcounter{listb}{0}
|
||||
\setcounter{savedlistb}{0}
|
||||
\setcounter{listc}{0}
|
||||
\setcounter{savedlistc}{0}
|
||||
\setcounter{listd}{0}
|
||||
\setcounter{savedlistd}{0}
|
||||
\setcounter{liste}{0}
|
||||
\setcounter{savedliste}{0}
|
||||
\setcounter{listf}{0}
|
||||
\setcounter{savedlistf}{0}
|
||||
\setcounter{location}{0}
|
||||
\setcounter{savedlocation}{0}
|
||||
\setcounter{organization}{0}
|
||||
\setcounter{savedorganization}{0}
|
||||
\setcounter{origlocation}{0}
|
||||
\setcounter{savedoriglocation}{0}
|
||||
\setcounter{origpublisher}{0}
|
||||
\setcounter{savedorigpublisher}{0}
|
||||
\setcounter{publisher}{0}
|
||||
\setcounter{savedpublisher}{0}
|
||||
\setcounter{language}{0}
|
||||
\setcounter{savedlanguage}{0}
|
||||
\setcounter{origlanguage}{0}
|
||||
\setcounter{savedoriglanguage}{0}
|
||||
\setcounter{citation}{0}
|
||||
\setcounter{savedcitation}{0}
|
||||
\setcounter{pageref}{0}
|
||||
\setcounter{savedpageref}{0}
|
||||
\setcounter{textcitecount}{0}
|
||||
\setcounter{textcitetotal}{0}
|
||||
\setcounter{textcitemaxnames}{0}
|
||||
\setcounter{biburlbigbreakpenalty}{100}
|
||||
\setcounter{biburlbreakpenalty}{200}
|
||||
\setcounter{biburlnumpenalty}{0}
|
||||
\setcounter{biburlucpenalty}{0}
|
||||
\setcounter{biburllcpenalty}{0}
|
||||
\setcounter{smartand}{1}
|
||||
\setcounter{bbx:relatedcount}{0}
|
||||
\setcounter{bbx:relatedtotal}{0}
|
||||
\setcounter{NAT@ctr}{0}
|
||||
\setcounter{AM@survey}{0}
|
||||
\setcounter{section@level}{0}
|
||||
\setcounter{Item}{0}
|
||||
\setcounter{Hfootnote}{0}
|
||||
\setcounter{bookmark@seq@number}{17}
|
||||
\setcounter{bookmark@seq@number}{18}
|
||||
\setcounter{g@acro@QR@int}{0}
|
||||
\setcounter{g@acro@AQR@int}{0}
|
||||
\setcounter{g@acro@NAQR@int}{0}
|
||||
\setcounter{g@acro@GRU@int}{0}
|
||||
\setcounter{g@acro@LSTM@int}{0}
|
||||
\setcounter{g@acro@GAN@int}{0}
|
||||
\setcounter{g@acro@CTSGAN@int}{0}
|
||||
\setcounter{g@acro@VAE@int}{0}
|
||||
\setcounter{g@acro@MLP@int}{0}
|
||||
\setcounter{g@acro@GP@int}{0}
|
||||
\setcounter{g@acro@MSE@int}{0}
|
||||
\setcounter{g@acro@MAE@int}{0}
|
||||
\setcounter{g@acro@CRPS@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{0}
|
||||
\setcounter{g@acro@TSPA@int}{0}
|
||||
\setcounter{g@acro@PLF@int}{0}
|
||||
\setcounter{g@acro@CDF@int}{0}
|
||||
\setcounter{g@acro@QE@int}{0}
|
||||
\setcounter{g@acro@NRV@int}{3}
|
||||
\setcounter{g@acro@PV@int}{0}
|
||||
\setcounter{g@acro@NP@int}{0}
|
||||
\setcounter{g@acro@TSO@int}{3}
|
||||
\setcounter{g@acro@DSO@int}{0}
|
||||
\setcounter{g@acro@BRP@int}{1}
|
||||
\setcounter{g@acro@BSP@int}{1}
|
||||
\setcounter{g@acro@SI@int}{0}
|
||||
\setcounter{g@acro@FCR@int}{1}
|
||||
\setcounter{g@acro@aFRR@int}{1}
|
||||
\setcounter{g@acro@mFRR@int}{1}
|
||||
\setcounter{g@acro@MW@int}{0}
|
||||
\setcounter{g@acro@ACE@int}{0}
|
||||
\setcounter{g@acro@MIP@int}{0}
|
||||
\setcounter{g@acro@MDP@int}{0}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
\section{Policies}
|
||||
\section{Battery Optimization Policies}
|
||||
\label{sec:policies}
|
||||
Organizations that own a battery and are active in the electricity market have to make decisions on when to charge and discharge their battery. These decisions are based on the current state of the battery, the current state of the market, and the future state of the market. The future state of the market can be predicted using generative models like the ones discussed in previous sections. The organizations want to maximize their profit by buying electricity when it is cheap and selling electricity when it is expensive. The policies used decide when to charge and discharge the battery. Another important aspect of these policies is to keep the battery in a healthy state. Charging and discharging a battery too much can reduce its lifetime. The policies have to take this into account.
|
||||
|
||||
In this thesis, a simple policy is used to optimize the profit made by charging and discharging a battery. The policy is based on the Net Regulation Volume (NRV) predictions for the next day. This shows the potential of using NRV predictions to optimize the policy. In the real world, more complex policies can be used to optimize the profit. These policies can be trained using reinforcement learning or other optimization techniques. Multiple baseline policies are defined to compare the performance of the policy based on NRV predictions.
|
||||
|
||||
The simple policy uses two thresholds to decide when to charge and discharge the battery based on the imbalance price. When the imbalance price is below the charging threshold, the battery is fully charged. When the imbalance price is above the discharging threshold, the battery is fully discharged again. This policy is very simple and does not take into account some important aspects.
|
||||
In this thesis, a simple policy is used to optimize the profit made by charging and discharging a battery. The policy is based on imbalance price predictions for the next day. These imbalance prices are reconstructed using the generated full-day NRV samples. This allows showing the potential of using NRV generations to optimize the policy. In the real world, more complex policies can be used to optimize the profit. These policies can be trained using reinforcement learning or other optimization techniques. Multiple baseline policies are defined to compare the performance of the policy based on NRV predictions.
|
||||
|
||||
\subsection{Baselines}
|
||||
% Baseline fixed thresholds
|
||||
The most simple baseline policy is to define two fixed thresholds for charging and discharging the battery. These thresholds can be determined by the historical data of the imbalance price. The thresholds can be found by doing a simple grid search for the best thresholds. The thresholds that maximize the profit on the historical data are used as the fixed thresholds. During the optimization, a penalty parameter can be added to the profit function to penalize when the battery is charged or discharged too much.
|
||||
|
||||
% Baseline thresholds determined on the previous day
|
||||
Another baseline policy is to determine the thresholds for charging and discharging the battery based on the NRV of the previous day. This policy is based on the assumption that the NRV of the next day will be similar to the NRV of the previous day. The NRV of the previous day can be seen as the NRV prediction for the next day. The thresholds can then be determined by doing a simple grid search for the best thresholds over the NRV prediction. The same penalty parameter can be added to the profit function to reduce the charge cycles of the battery.
|
||||
Another baseline policy is to determine the thresholds for charging and discharging the battery based on the NRV of the previous day. This policy is based on the assumption that the NRV of the next day will be similar to the NRV of the previous day. The NRV of the previous day can be seen as the NRV prediction for the next day and is used to reconstruct the imbalance prices. The thresholds can then be determined by doing a simple grid search for the best thresholds over the reconstructed imbalance prices. The same penalty parameter can be added to the profit function to reduce the charge cycles of the battery.
|
||||
|
||||
\subsection{Policies based on NRV generations}
|
||||
% Policy based on NRV generations
|
||||
The simple baseline policy can be used with the NRV predictions for the next day. First, multiple full-day NRV samples are generated using a generative model. Each of these samples will be seen as a prediction for the NRV of the next day. The charge and discharge thresholds are determined for each of these samples using a simple grid search like in the baseline policy. The mean is taken over all the thresholds to determine the final thresholds for the next day. This results in a policy that uses the NRV samples of the generative model. This policy also uses the penalty parameter to reduce the charge cycles of the battery.
|
||||
A simple policy can be defined that uses multiple predictions for the NRV of the next day. First, multiple full-day NRV samples are generated using a generative model. Each of these samples will be seen as a prediction for the NRV of the next day. For each of these predictions, the imbalance prices are reconstructed. The charge and discharge thresholds are determined for each of these reconstructed imbalance prices using a simple grid search like in the baseline policy. The mean is taken over all the optimal thresholds to determine the final thresholds for the next day. This results in a policy that uses the NRV samples of the generative model. This policy also uses the penalty parameter to reduce the charge cycles of the battery.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
\section{Results \& Discussion}
|
||||
As discussed in the background information, the imbalance prices are based on the Net Regulation Volume (NRV). This means that the imbalance prices can be reconstructed from the sampled NRV. Multiple baselines and models will be compared that forecast and model the NRV using different metrics. The data utilized in this thesis is provided by Elia. Elia makes a lot of data public and provides them in quarterly hour or minute intervals. The data used in this thesis is on a quarterly hourly basis. This makes the number of input features and output features way more manageable and makes the training more computationally efficient. A full-day sample of the NRV exists of 96 values. One value for every quarter. Further research could be done using smaller data intervals to see if this improves the models.
|
||||
As discussed in the background information, the imbalance prices are based on the Net Regulation Volume (NRV). This means that the imbalance prices can be reconstructed from the sampled NRV. Multiple baselines and models will be compared that forecast and model the NRV using different metrics. The data utilized in this thesis is provided by Elia. Elia makes a lot of data public and provides them in quarterly hour or minute intervals. The data used in this thesis is on a quarterly hourly basis. This makes the number of input features and output features way more manageable and makes the training more computationally efficient. A full-day sample of the NRV exists of 96 values. One value for every quarter. Further research could be done using smaller data intervals to see if this improves the models and the profits of the policies.
|
||||
|
||||
\subsection{Data}
|
||||
Elia offers a lot of different data on their website (TODO: open data citation). They provide data for the following categories:
|
||||
(TODO: Relevant? or too much information?)
|
||||
Elia offers a variety of data on their website \cite{noauthor_welcome_nodate}. They provide data for the following categories:
|
||||
|
||||
\begin{itemize}
|
||||
\item Balancing
|
||||
\item Transmission
|
||||
@@ -15,30 +15,29 @@ Elia offers a lot of different data on their website (TODO: open data citation).
|
||||
|
||||
The data useful to model the NRV is scattered over multiple categories. The data used in this thesis is the following:
|
||||
|
||||
TODO: ask Jonas: add urls to the correct data? via citation?
|
||||
\begin{itemize}
|
||||
\item \textbf{Imbalance prices per quarter-hour (Historical data) } \\
|
||||
% https://opendata.elia.be/explore/dataset/ods047/information/?sort=datetime
|
||||
This dataset contains the NRV and system imbalance in a quarter-hour interval. The data is available from 01-01-2015 to the present day. The NRV is used as the target variable that needs to be modeled but can also be used as input features. The next day NRV modeling can be conditioned on the real NRV of the previous day.
|
||||
This dataset contains the NRV and system imbalance in a quarter-hour interval. The data is available from 01-01-2015 to the present day. The NRV is used as the target variable that needs to be modeled but can also be used as input features. The next day NRV modeling can be conditioned on the real NRV of the previous day. \cite{noauthor_imbalance_nodate}
|
||||
|
||||
\item \textbf{Measured and forecasted total load on the Belgian grid (Historical data)} \\
|
||||
% https://opendata.elia.be/explore/dataset/ods001/table/?sort=datetime
|
||||
Elia publishes what the total load on the Belgian grid is. This data is also provided in a quarter-hour interval. This data consists of the real load for a certain quarter but also the different forecasted loads. There are day-ahead and week-ahead forecasts available. The total load on the Belgian grid can be used as input features for the NRV modeling. The data is also available from 01-01-2015 to the present day.
|
||||
Elia publishes what the total load on the Belgian grid is. This data is also provided in a quarter-hour interval. This data consists of the real load for a certain quarter but also the different forecasted loads. There are day-ahead and week-ahead forecasts available. The total load on the Belgian grid can be used as input features for the NRV modeling. The data is also available from 01-01-2015 to the present day. \cite{noauthor_measured_nodate}
|
||||
|
||||
\item \textbf{Photovoltaic power production estimation and forecast on Belgian grid (Historical)} \\
|
||||
% https://opendata.elia.be/explore/dataset/ods032/table/?sort=datetime
|
||||
The photovoltanic power production is also available in a quarter-hour interval. The production is also forecasted day-ahead and week-ahead. The data is provided for each of the provinces in Belgium. Forecasts are also available for the 3 Belgian regions (Flanders, Wallonia, Brussels) and the total Belgian production. The photovoltanic data has been provided since 01-04-2018 and is available to the present day.
|
||||
The photovoltaic power production is also available in a quarter-hour interval. The production is also forecasted day-ahead and week-ahead. The data is provided for each of the provinces in Belgium. Forecasts are also available for the 3 Belgian regions (Flanders, Wallonia, Brussels) and the total Belgian production. The photovoltaic data has been provided since 01-04-2018 and is available to the present day. \cite{noauthor_photovoltaic_nodate}
|
||||
|
||||
\item \textbf{Wind power production estimation and forecast on Belgian grid (Historical)} \\
|
||||
% https://opendata.elia.be/explore/dataset/ods031/information/
|
||||
Just as the photovoltanic power production data, wind power production is available in a quarterly-hour interval for each of the provinces and regions in Belgium. This data also includes the real production and the forecasts. An additional column is available that shows if the power is generated offshore or onshore. During this thesis, the offshore and onshore data will be combined. The wind power production data has been provided since 01-01-2015 and is available to the present day.
|
||||
Just as the photovoltaic power production data, wind power production is available in a quarterly-hour interval for each of the provinces and regions in Belgium. This data also includes the real production and the forecasts. An additional column is available that shows if the power is generated offshore or onshore. During this thesis, the offshore and onshore data will be combined. The wind power production data has been provided since 01-01-2015 and is available to the present day. \cite{noauthor_wind_nodate}
|
||||
|
||||
\item \textbf{Day-ahead implicit net position (Belgium's balance)} \\
|
||||
% https://opendata.elia.be/explore/dataset/ods022/information/?sort=datetime
|
||||
The day-ahead implicit net position shows the total amount of electricity that will be imported or exported to neighboring countries. The trades are done on the day-ahead market and are thus known in advance. This data is available in a quarter-hour interval and has been provided since 01-11-2020 and is available to the present day. The data before 01-11-2020 is also available but only in hourly intervals.
|
||||
The day-ahead implicit net position shows the total amount of electricity that will be imported or exported to neighboring countries. The trades are done on the day-ahead market and are thus known in advance. This data is available in a quarter-hour interval and has been provided since 01-11-2020 and is available to the present day. The data before 01-11-2020 is also available but only in hourly intervals. \cite{noauthor_intraday_nodate}
|
||||
\end{itemize}
|
||||
|
||||
A lot of data is available but only the most relevant data needs to be used. Experiments will be done to identify which data and features improve the NRV modeling. The data will be split into a training and test set. The training dataset starts depending on which data features are used but ends on 31-12-2022. The test set starts on 01-01-2023 and ends on (TODO: check the end date). This makes sure enough data is available to train the models and the test set is large enough to evaluate the models. The year 2023 is chosen as the test set because it is the most recent data available when the thesis experiments were conducted. Using data from 2022 in the test set also does not make a lot of sense because the trained models would be used to predict the future. Data from 2022 is not relevant anymore to evaluate the models.
|
||||
A lot of data is available but only the most relevant data needs to be used. Experiments will be done to identify which data and features improve the NRV modeling. The data will be split into a training and test set. The training dataset starts depending on which data features are used but ends on 31-12-2022. The test set starts on 01-01-2023 and ends on 12-12-2023. This makes sure enough data is available to train the models and the test set is large enough to evaluate the models. The year 2023 is chosen as the test set because it is the most recent data available when the thesis experiments were conducted. Using data from 2022 in the test set also does not make a lot of sense because the trained models would be used to predict the future. Data from 2022 is not relevant anymore to evaluate the models. Some data features are missing for certain periods, this is taken into account and those periods are excluded from the training and test set even if the unavailable feature is not used. This makes sure the data is consistent and results can be compared fairly.
|
||||
|
||||
\subsection{Quantile Regression}
|
||||
\input{sections/results/models/linear}
|
||||
@@ -52,8 +51,8 @@ A lot of data is available but only the most relevant data needs to be used. Exp
|
||||
\input{sections/results/models/comparison}
|
||||
|
||||
\newpage
|
||||
\section{Policies for battery optimization}
|
||||
The goal of this thesis is to model the NRV data and use this to optimize the buying and selling of electricity to make a profit. Different models and methods can be used to model the NRV data which can all result in different results. To evaluate the performance of the models, the generated profit on the test set can be used as a metric. First of all, baselines are needed to be able to compare the models to if adding NRV predictions to the policies improves the profit. The baselines are already discussed in the background section. It is very important to compare the baselines and other policies fairly. The profit depends on the number of charge cycles that are used. The more charge cycles a policy uses, the more profit it will be able to make. Using too many charge cycles is bad for the health of the battery. A penalty parameter can be used to penalize the policy when too many charge cycles are used in a day. To fairly compare the policies with different models and baselines, a maximum number of charge cycles is determined for the test period. The test period starts on 01-01-2023 and ends on (TODO: check the end date). Assuming a maximum of 400 charge cycles can be used in a year, only 293 charge cycles can be used during the test period. The penalty parameter is optimized using a simple gradient descent approach to make sure only 293 charge cycles are used during the test period. The profit is then calculated using the optimized penalty parameter.
|
||||
\subsection{Policies for battery optimization}
|
||||
The goal of this thesis is to model the NRV data and use this to optimize the buying and selling of electricity to make a profit. Different models and methods can be used to model the NRV data which can all result in different results. To evaluate the performance of the models, the generated profit on the test set can be used as a metric. First of all, baselines are needed to be able to compare the models to if adding NRV predictions to the policies improves the profit. The baselines are already discussed in the background section. It is very important to compare the baselines and other policies fairly. The profit depends on the number of charge cycles that are used. The more charge cycles a policy uses, the more profit it will be able to make. Using too many charge cycles is bad for the health of the battery. A penalty parameter can be used to penalize the policy when too many charge cycles are used in a day. To fairly compare the policies with different models and baselines, a maximum number of charge cycles is determined for the test period. The test period starts on 01-01-2023 and ends on 12-12-2023. In this period, there are only 258 days that can be used. Some days have missing input feature data. These days are thus excluded from the test set. Assuming a maximum of 400 charge cycles can be used in a year, only 283 charge cycles can be used during the test period. The penalty parameter is optimized using a simple gradient descent approach to make sure only 283 charge cycles are used during the test period. The profit is then calculated using the optimized penalty parameter.
|
||||
|
||||
To evaluate the policies, a battery of 2 MWh is used with a maximum charge and discharge power of 1 MW. The battery is charged and discharged in quarter-hour intervals at the price of that quarter-hour.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
\subsection{Comparison}
|
||||
After training the different models and experimenting with various hyperparameters, the performance differences between the model architectures and methods can be compared using the \ac{MSE}, \ac{MAE}, and \ac{CRPS} metrics. Visual comparisons of some examples are also provided.
|
||||
After training the different models and experimenting with various hyperparameters, the performance differences between the model architectures and methods can be compared using the \ac{MSE}, \ac{MAE}, and \ac{CRPS} metrics This is shown in Table \ref{tab:model_comparison}. Visual comparisons of some examples are also provided.
|
||||
|
||||
% Updated table using acronyms
|
||||
\begin{table}[H]
|
||||
@@ -7,7 +7,7 @@ After training the different models and experimenting with various hyperparamete
|
||||
\begin{adjustbox}{width=\textwidth}
|
||||
\begin{tabular}{@{}clcccccc@{}}
|
||||
\toprule
|
||||
Features & Method & Model & \ac{MSE} & \ac{MAE} & \ac{CRPS} & Parameters \\
|
||||
Features & Method & Model & \acs{MSE} & \acs{MAE} & \acs{CRPS} & Parameters \\
|
||||
\midrule
|
||||
NRV & & & & & \\
|
||||
& \acs{AQR} & Linear & 39222.41 & 152.49 & 91.56 & 1,261 \\
|
||||
@@ -15,6 +15,7 @@ After training the different models and experimenting with various hyperparamete
|
||||
& & & & & \\
|
||||
& \acs{AQR} & Non-Linear & 36346.57 & 144.80 & 84.51 & 422,925 \\
|
||||
& \acs{NAQR} & Non-Linear & 40200.92 & 152.00 & 74.37 & 501,728 \\
|
||||
& Diffusion & Non-Linear & 42984.02 & 157.54 & 77.92 & 3,116,896 \\
|
||||
& & & & & \\
|
||||
& \acs{AQR} & GRU & 37681.71 & 146.62 & 83.08 & 11,829,261 \\
|
||||
& \acs{NAQR} & GRU & 40917.24 & 152.04 & 76.06 & 3,007,200 \\
|
||||
@@ -25,7 +26,7 @@ After training the different models and experimenting with various hyperparamete
|
||||
& & & & & \\
|
||||
& \acs{AQR} & Non-Linear & 32447.41 & 137.24 & 79.22 & 524,013 \\
|
||||
& \acs{NAQR} & Non-Linear & 42588.16 & 157.20 & 73.75 & 673,760 \\
|
||||
& Diffusion & Non-Linear & 47178.91 & 166.89 & 80.30 & 3,116,896 \\
|
||||
& Diffusion & Non-Linear & 47178.91 & 166.89 & 80.30 & 3,782,496 \\
|
||||
& & & & & \\
|
||||
& \acs{AQR} & GRU & 35238.98 & 141.02 & 80.92 & 11,843,565 \\
|
||||
& \acs{NAQR} & GRU & 40613.54 & 151.17 & 75.33 & 6,165,216 \\
|
||||
@@ -36,45 +37,173 @@ After training the different models and experimenting with various hyperparamete
|
||||
\label{tab:model_comparison}
|
||||
\end{table}
|
||||
|
||||
A first recurring conclusion that can be made is that the \ac{NAQR} models have higher \ac{MSE} and \ac{MAE} errors but higher \ac{CRPS}. The reason for this behavior is not immediately clear. One reason for this could be the way the autoregressive quantile regression works. Autoregressive models use the previous predicted value as input to predict the next value. The autoregressive model does not know that it will be used to predict multiple values in the future. In the case of NRV modeling, a value is sampled as input for the next day. The sampling introduces an error which the model is not trained for. Because of this, the NRV distribution outputted by the model will be further away from the expected distribution. This error propagates further in the full-day NRV samples which results in a higher CRPS. The non-autoregressive models do not have this problem because they predict all values at once. The non-autoregressive models, however, have a higher \ac{MSE} and \ac{MAE} error. The model outputs a distribution for each quarter of the day. The full-day NRV sample is then generated by sampling from each of the distributions. The sampled values are independent of each other. This can result in unrealistic samples with large peaks which impact the \ac{MSE} and \ac{MAE} metrics.
|
||||
A first recurring conclusion that can be made is that the \ac{NAQR} models have higher \ac{MSE} and \ac{MAE} errors but lower \ac{CRPS}. The reason for this behavior is not immediately clear. One reason for this could be the way the autoregressive quantile regression works. Autoregressive models use the previous predicted value as input to predict the next value. The autoregressive model does not know that it will be used to predict multiple values in the future. In the case of NRV modeling, a value is sampled as input for the next day. The sampling introduces an error which the model is not trained for. Because of this, the NRV distribution outputted by the model will be further away from the expected distribution. This error propagates further in the full-day NRV samples which results in a higher CRPS. The non-autoregressive models do not have this problem because they predict all values at once. The non-autoregressive models, however, have a higher \ac{MSE} and \ac{MAE} error. The model outputs a distribution for each quarter of the day. The full-day NRV sample is generated by sampling from each of the distributions. The sampled values are independent of each other. This can result in unrealistic samples with large peaks which impact the \ac{MSE} and \ac{MAE} metrics.
|
||||
|
||||
Comparing the Linear model with the GRU model, the GRU model has a better performance when only using the NRV data. The autoregressive linear quantile regression model, however, outperforms the model using all available features. Some examples of the test set are shown in \ref{fig:ar_linear_gru_comparison}. A comparison is made between the autoregressive linear and GRU models. A clear difference in the confidence intervals can be observed. The confidence intervals almost have the same width over the whole day. This is not the case for the GRU model. The confidence intervals are wider in the middle of the day. This gives a more realistic insight into the uncertainty.
|
||||
A comprehensive comparison of the test set examples is shown in Figure \ref{fig:ar_linear_gru_diffusion_comparison} and Figure \ref{fig:naqr_linear_gru_diffusion_comparison}. Figure \ref{fig:ar_linear_gru_diffusion_comparison} shows the best performing autoregressive models and the diffusion model while Figure \ref{fig:naqr_linear_gru_diffusion_comparison} shows the best performing non-autoregressive models and the diffusion model.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_7008.png}
|
||||
\caption{Autoregressive linear model}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_7008.png}
|
||||
\caption{Autoregressive GRU model}
|
||||
\end{subfigure}
|
||||
When comparing the autoregressive models using all input features, the non-linear model performs the best. It has the lowest MSE, MAE and lowest CRPS. The GRU model performs the worst and is even outperformed by the linear model. When looking at the plots shown in Figure \ref{fig:ar_linear_gru_diffusion_comparison}, the GRU model does not seem bad and even seems to perform better than the linear model. Not many conclusions can be made by looking at four examples but it shows that the GRU model is capable of generating realistic samples. The GRU model is the most complex and has the most parameters but performs the worst when looking at the metrics. The examples in the figure show that the confidence intervals generated by the GRU model are wider than the confidence intervals for the linear and non-linear models. In each of the examples, the confidence intervals of the GRU model are wider during the day and narrower during the night. This shows the NRV distribution is more uncertain during the day than during the night. This observation can not easily be made when looking at the linear and non-linear models. For each of the models, a slight trend can be observed during the day. This shows the model is not just generating random or fixed samples.
|
||||
|
||||
\caption{Comparison of the autoregressive linear and GRU model}
|
||||
\label{fig:ar_linear_gru_comparison}
|
||||
\end{figure}
|
||||
Comparing the autoregressive models with the diffusion model using all features, the diffusion model performs the worst in terms of the metrics in the table. All metrics are worse than each autoregressive model. Comparing the samples in Figure \ref{fig:ar_linear_gru_diffusion_comparison}, the diffusion model seems to model the NRV reasonably well but the confidence intervals are very narrow. There is not a lot of variance in the generated samples. This can explain why the metrics perform much worse. A reason for this worse performance is overfitting on the training data.
|
||||
|
||||
% other conclusion:
|
||||
Next, the non-autoregressive models can be compared. Again, the non-linear model performs the best based on the CRPS metric. When looking at the examples shown in Figure \ref{fig:naqr_linear_gru_diffusion_comparison}, the non-linear and GRU model seems to perform very similar. The confidence intervals have almost the same width and for both models, no real trend can be observed. The mean hovers around zero. The examples of the non-autoregressive linear model, on the other hand, look completely different. There, wider confidence intervals can be observed with large peaks. Again, no big trends can be observed. The mean NRV hovers around zero again. Comparing these models against the samples from the diffusion model, the diffusion model seems to perform the best. There, a real trend can be observed but the confidence intervals are very narrow. The generated samples of the diffusion model look more realistic than the samples of the non-autoregressive models. The diffusion model, however, performs the worst based on the metrics. Again, overfitting can be a reason for this worse performance.
|
||||
|
||||
% horizontal page with one big figure
|
||||
\begin{landscape}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
% sample 864
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_non_linear_model_samples/AQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_864.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
% sample 4320
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_non_linear_model_samples/AQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_4320.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
% sample 6336
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_non_linear_model_samples/AQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_6336.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
% sample 7008
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_linear_model_samples/AQR_NRV_Load_Wind_PV_NP_QE-Sample_7008.png}
|
||||
\caption{AQR linear model}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_non_linear_model_samples/AQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_7008.png}
|
||||
\caption{AQR non-linear model}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/aqr_gru_model_examples/AQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_7008.png}
|
||||
\caption{AQR GRU model}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_7008.jpeg}
|
||||
\caption{Diffusion model}
|
||||
\end{subfigure}
|
||||
|
||||
\caption{Comparison of the autoregressive models with the diffusion model}
|
||||
\label{fig:ar_linear_gru_diffusion_comparison}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
% sample 864
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_non_linear_model_samples/NAQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_gru_model_examples/NAQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_864.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_864.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
% sample 4320
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_non_linear_model_samples/NAQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_gru_model_examples/NAQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_4320.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_4320.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
% sample 6336
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_non_linear_model_samples/NAQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_gru_model_examples/NAQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_6336.png}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_6336.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
% sample 7008
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_linear_model_samples/NAQR_NRV_Load_Wind_PV_NP-Sample_7008.png}
|
||||
\caption{NAQR linear model}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_non_linear_model_samples/NAQR_NL_NRV_Load_Wind_PV_NP_QE-Sample_7008.png}
|
||||
\caption{NAQR non-linear model}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/quantile_regression/naqr_gru_model_examples/NAQR_GRU_NRV_Load_Wind_PV_NP_QE-Sample_7008.png}
|
||||
\caption{NAQR GRU model}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.38\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_7008.jpeg}
|
||||
\caption{Diffusion model}
|
||||
\end{subfigure}
|
||||
|
||||
\caption{Comparison of the non-autoregressive models with the diffusion model}
|
||||
\label{fig:naqr_linear_gru_diffusion_comparison}
|
||||
\end{figure}
|
||||
|
||||
\end{landscape}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
\subsection{Diffusion}
|
||||
Another type of model that can be used to generatively model the NRV is the diffusion model. This type of model is very popular for image generation. In the context of images, the diffusion model is trained by iteratively adding noise to a training image until there is only noise left. From this noise, the model tries to reverse the diffusion process to get the original image back. To sample new images using this model, a noise vector is sampled and iteratively denoised by the model. This process results in a new image.
|
||||
Another type of model that can be used to generatively model the NRV is the diffusion model. This type of model is very popular for image generation. In the context of images, the diffusion model is trained by iteratively adding noise to a training image until there is only noise left. From this noise, the model tries to reverse the diffusion process to get the original image back. To sample new images using this model, a noise vector is sampled and iteratively denoised by the model. This process results in a new image.
|
||||
|
||||
This training process can also be used for other data types. An image is just a 2D grid of data points. A time series can be seen as a 1D sequence of data points. The diffusion model can thus be trained on the NRV data to generate new samples for a certain day based on a given input.
|
||||
|
||||
Once the diffusion model is trained, it can be used efficiently to generate new samples. The model can generate samples in parallel, which is not possible with autoregressive models. It combines the parallel sample generation of the non-autoregressive models while the quarter NRV values still depend on each other. A batch of noise vectors can be sampled and passed through the model in one batch to generate the new samples. The generated samples contain the 96 NRV values for the next day without needing to sample every quarter sequentially.
|
||||
|
||||
The model is trained in a completely different way than the quantile regression models. A simple implementation of the Denoising Diffusion Probabilistic Model (DDPM) is used to perform the experiments. More complex implementations with more advanced techniques could be used to improve the results. This is out of the scope of this thesis. The goal is to show that more recent generative models can also be used to model the NRV data. These results can then be compared to the quantile regression models to see if the diffusion model can generate better samples.
|
||||
The model is trained in a completely different way than the quantile regression models. A simple implementation of the Denoising Diffusion Probabilistic Model (DDPM) \cite{ho_denoising_2020} is used to perform the experiments. More complex implementations with more advanced techniques could be used to improve the results. This is out of the scope of this thesis. The goal is to show that more recent generative models can also be used to model the NRV data. These results can then be compared to the quantile regression models to see if the diffusion model can generate better samples.
|
||||
|
||||
% TODO: In background information?
|
||||
First of all, the model architecture needs to be chosen. The model takes multiple inputs which include the noisy NRV time series, the positional encoding of the current denoising step and the conditional input features. The model needs to predict the noise in the current time series. The time series can then be denoised by subtracting the predicted noise in every denoising step. Multiple model architectures can be used as long as the model can predict the noise in the time series. A simple feedforward neural network is used. The neural network exists of multiple linear layers with ReLu activation functions. To predict the noise in a noisy time series, the current denoising step index must also be provided. This integer is then transformed into a vector using sine and cosine functions. The positional encoding is then concatenated with the noisy time series and the conditional input features. This tensor is then passed through the first linear layer and activation function of the neural network. This results in a tensor of the hidden size that was chosen. Before passing this tensor to the next layer, the positional encoding and conditional input features are concatenated again. This process is repeated until the last layer is reached. This provides every layer in the neural network with the necessary information to predict the noise in the time series. The output of the last layer is then the predicted noise in the time series. The model is trained by minimizing the mean squared error between the predicted noise and the real noise in the time series.
|
||||
|
||||
Other hyperparameters that need to be chosen are the number of denoising steps, number of layers and hidden size of the neural network. Experiments are performed to get an insight into the influence these parameters have on the model performance. Results are shown in Table \ref{tab:diffusion_results}.
|
||||
@@ -15,22 +14,20 @@ Other hyperparameters that need to be chosen are the number of denoising steps,
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\begin{tikzpicture}
|
||||
% First row
|
||||
% Node for Image 1
|
||||
\node (img1) {\includegraphics[width=0.45\textwidth]{images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 1_00000000.jpeg}};
|
||||
% Node for Image 2 with an arrow from Image 1
|
||||
\node[right=of img1] (img2) {\includegraphics[width=0.45\textwidth]{images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 2_00000000.jpeg}};
|
||||
\draw[-latex] (img1) -- (img2);
|
||||
|
||||
% Second row
|
||||
% Node for Image 3 below Image 1 with an arrow from Image 2
|
||||
\node[below=of img1] (img3) {\includegraphics[width=0.45\textwidth]{images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 3_00000000.jpeg}};
|
||||
|
||||
% Node for Image 4 with an arrow from Image 3
|
||||
\node[right=of img3] (img4) {\includegraphics[width=0.45\textwidth]{images/diffusion/results/intermediates/Testing Intermediates 864_Sample intermediate 4_00000000.jpeg}};
|
||||
\draw[-latex] (img3) -- (img4);
|
||||
|
||||
% Complex arrow from Image 2 to Image 3
|
||||
% Calculate midpoint for the horizontal segment
|
||||
\coordinate (Middle) at ($(img2.south)!0.5!(img3.north)$);
|
||||
\draw[-latex] (img2.south) |- (Middle) -| (img3.north);
|
||||
\end{tikzpicture}
|
||||
@@ -59,13 +56,13 @@ In Figure \ref{fig:diffusion_intermediates}, multiple intermediate steps of the
|
||||
& 300 & 3 & 4096 & 39943.93 & 151.62 & 77.59 \\
|
||||
& 300 & 4 & 256 & 56939.68 & 185.07 & 81.16 \\
|
||||
& 300 & 4 & 512 & 46225.72 & 164.74 & 79.19 \\
|
||||
& 300 & 4 & 1024 & 42984.02 & 157.54 & 77.92 \\
|
||||
& 300 & 4 & 1024 & 42984.02 & 157.54 & \textbf{77.92} \\
|
||||
& 300 & 4 & 2048 & 41145.32 & 154.14 & 78.18 \\
|
||||
\midrule
|
||||
NRV + Load + Wind + PV + NP & & & & & & & \\
|
||||
& 300 & 2 & 256 & 63337.36 & 196.21 & 84.29 \\
|
||||
& 300 & 2 & 512 & 52745.92 & 177.16 & 81.57 \\
|
||||
& 300 & 2 & 1024 & 47178.91 & 166.89 & 80.30 \\
|
||||
& 300 & 2 & 1024 & 47178.91 & 166.89 & \textbf{80.30} \\
|
||||
& 300 & 3 & 256 & 66148.13 & 200.34 & 85.31 \\
|
||||
& 300 & 3 & 512 & 53159.99 & 178.46 & 81.95 \\
|
||||
& 300 & 3 & 1024 & 47815.13 & 167.22 & 81.16 \\
|
||||
@@ -80,6 +77,56 @@ In Figure \ref{fig:diffusion_intermediates}, multiple intermediate steps of the
|
||||
\label{tab:diffusion_results}
|
||||
\end{table}
|
||||
|
||||
In Table \ref{tab:diffusion_results}, the results of the experiments for the diffusion model can be seen. The diffusion model that was used is a simple implementation of the Denoising Diffusion Probabilistic Model (DDPM). The model itself exists of multiple linear layers with ReLU activation functions. The diffusion steps were set to 300 for the experiments. This number was determined by doing a few experiments with more and fewer steps. The model performance did not improve when more steps were used. This parameter could be further optimized together with the other parameters to find the best-performing model. This would take a lot of time and is not the goal of this thesis.
|
||||
In Table \ref{tab:diffusion_results}, the results of the experiments for the diffusion model can be seen. The diffusion model that was used is a simple implementation of the Denoising Diffusion Probabilistic Model (DDPM) \cite{ho_denoising_2020}. The model itself exists of multiple linear layers with ReLU activation functions. The diffusion steps were set to 300 for the experiments. This number was determined by doing a few experiments with more and fewer steps. The model performance did not improve when more steps were used. This parameter could be further optimized together with the other parameters to find the best-performing model. This would take a lot of time and is not the goal of this thesis.
|
||||
|
||||
The first observation that can be made is the higher error metrics when more input features are used. This is counterintuitive because the model has more information to generate the samples. The reason for this behavior is not immediately clear. One reason could be that the model conditioning is not optimal. Now the input features are passed to every layer of the model together with the time series that needs to be denoised. The model could be improved by using a more advanced conditioning mechanism like classifier guidance and classifier-free guidance.
|
||||
The first observation that can be made is the higher error metrics when more input features are used. This is counterintuitive because the model has more information to generate the samples. The reason for this behavior is not immediately clear. One reason could be that the model conditioning is not optimal. Now the input features are passed to every layer of the model together with the time series that needs to be denoised. The model could be improved by using more advanced conditioning mechanisms like classifier guidance \cite{dhariwal_diffusion_2021} and classifier-free guidance \cite{ho_classifier-free_2022}.
|
||||
\\
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_864.jpeg}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_4320.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_6336.jpeg}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_7008.jpeg}
|
||||
\end{subfigure}
|
||||
\caption{The plots show the generations for the examples from the test set. The diffusion model used to generate the samples consists of 2 layers with a hidden size of 1024. The number of denoising steps is set to 300. The confidence intervals shown in the plots are made using 100 samples. All the available input features are used which includes the \acs{NRV}, Load, Wind, \acs{PV} and \acs{NP} data.}
|
||||
\label{fig:diffusion_test_set_examples}
|
||||
\end{figure}
|
||||
|
||||
The examples of the test dataset are shown in Figure \ref{fig:diffusion_test_set_examples} using the diffusion model. The first observation that can be made from these plots is the narrow confidence intervals. The real NRV values are not always captured in the confidence intervals. Not enough variance is present in the generated samples. This issue originates from the overfitting during the training of the model. The model is, however, capable of capturing the general trend of the NRV data. In some cases, the peaks in the generated samples are very close to the real NRV values. This can be seen in the first example in the figure.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_864_Only_NRV.jpeg}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_864.jpeg}
|
||||
\end{subfigure}
|
||||
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_4320_Only_NRV.jpeg}
|
||||
\caption{Only NRV}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/results/samples/Diffusion_Test_Example_4320.jpeg}
|
||||
\caption{NRV + Load + Wind + PV + NP}
|
||||
\end{subfigure}
|
||||
|
||||
|
||||
\caption{The plots show the generations for the first examples from the test set. Two diffusion models with 2 layers and 1024 hidden units are used. The first one is only conditioned on the NRV of the previous day while the second one uses all available input features.}
|
||||
\label{fig:diffusion_test_set_example_only_nrv_vs_all}
|
||||
\end{figure}
|
||||
|
||||
The plots in Figure \ref{fig:diffusion_test_set_example_only_nrv_vs_all} show the difference in generated samples when only the NRV data is used as input and when all available input features are used. The model that is only conditioned on the NRV data generates samples that do not have much variance. The confidence intervals are quite smooth and do not contain many peaks. The model trained using all available input features, on the other hand, has another behavior. The confidence intervals contain more peaks and the generated samples have more variance. This proves the model does indeed take the other input features into account when generating the samples. When looking at the metrics, the performance of the model that uses all input features is worse than the model that only uses the NRV data. The most obvious reason for this behavior is overfitting. Another reason could be the way the input features are used in the model. The input features are concatenated with the NRV data at every layer of the neural network. This could result in the model not using the input features in the best way possible.
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
\subsubsection{GRU Model}
|
||||
Another popular architecture to model sequential data is a recurrent neural network. There exist two main types of recurrent neural networks, the Long Short-Term Memory (LSTM) and the Gated Recurrent Unit (GRU). The GRU is a simplified version of the LSTM, which has fewer parameters and is computationally less expensive. The GRU model can be trained for quantile regression in the same way as the linear and non-linear models using the pinball loss. There is, however, a difference in how the input data is structured and provided to the model. For linear and non-linear models, the data is provided in the shape of $(batch\_size, num\_features)$. The recurrent neural network, on the other hand, expects the input data to be structured as $(batch\_size, time\_steps, num\_features\_per\_timestep)$. This is also explained in the background section about the recurrent neural network.
|
||||
Another popular architecture to model sequential data is a recurrent neural network. There exist two main types of recurrent neural networks, the Long Short-Term Memory (LSTM) \cite{hochreiter_long_1997} and the Gated Recurrent Unit (GRU) \cite{cho_learning_2014}. The GRU is a simplified version of the LSTM, which has fewer parameters and is computationally less expensive. The GRU model can be trained for quantile regression in the same way as the linear and non-linear models using the pinball loss. There is, however, a difference in how the input data is structured and provided to the model. For linear and non-linear models, the data is provided in the shape of $(batch\_size, num\_features)$. The recurrent neural network, on the other hand, expects the input data to be structured as $(batch\_size, time\_steps, num\_features\_per\_timestep)$. This is also explained in the background section about the recurrent neural network.
|
||||
|
||||
The GRU model architecture to predict the NRV quantiles is shown in Table \ref{tab:gru_model_architecture}. The model starts with an embedding layer that converts the quarter of the day into an embedding. This layer concatenates the other input features with the quarter embedding. The input of the TimeEmbedding is of shape (Batch Size, Time Steps, Input Features Size). The output of this layer is then passed to the GRU layer. The GRU layer outputs the hidden state for every time step. This results in a tensor of shape (Batch Size, Time Steps, Hidden Size). Only the last hidden state is relevant for the prediction of the NRV quantiles for the next quarter. The last hidden state should contain all the necessary information from the previous quarters to make the prediction. The last hidden state is then passed through a linear layer to output the quantiles for the NRV prediction. The input and output of the model depend if the model is trained using an autoregressive or non-autoregressive way. The non-autoregressive variant of the GRU model has two days worth of time steps. This results in $92*2$ time steps. The model then needs to output $(96 * \text{number\_of\_quantiles})$ NRV quantile values.
|
||||
The GRU model architecture to predict the NRV quantiles is shown in Table \ref{tab:gru_model_architecture}. The model starts with an embedding layer that converts the quarter of the day into an embedding. This layer concatenates the other input features with the quarter embedding. The input of the TimeEmbedding is of shape (Batch Size, Time Steps, Input Features Size). The output of this layer is then passed to the GRU layer. The GRU layer outputs the hidden state for every time step. This results in a tensor of shape (Batch Size, Time Steps, Hidden Size). Only the last hidden state is relevant for the prediction of the NRV quantiles for the next quarter. The last hidden state should contain all the necessary information from the previous quarters to make the prediction. The last hidden state is then passed through a linear layer to output the quantiles for the NRV prediction. The input and output of the model depend if the model is trained using an autoregressive or non-autoregressive way.
|
||||
|
||||
TODO: Zielige visualisatie van model nu
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\begin{tabularx}{\textwidth}{Xr} % Set the table width to the text width
|
||||
@@ -57,7 +56,7 @@ NRV + Load + PV\\ + Wind & & & & & & & & & \\
|
||||
NRV + Load + PV\\ + Wind + Net Position \\+ QE (5 dim) & & & & & & & & & \\
|
||||
& 4 & 256 & 39906.53 & 40881.92 & 149.78 & 152.34 & 84.88 & 76.15 \\
|
||||
& 8 & 256 & 37675.15 & 40159.91 & 145.39 & 150.42 & 83.37 & 75.89 \\
|
||||
& 4 & 512 & & 40613.54 & & 151.17 & & 75.33 \\
|
||||
& 4 & 512 & 38564.57 & 40613.54 & 147.23 & 151.17 & 85.48 & 75.33 \\
|
||||
& 8 & 512 & 35238.98 & 39896.57 & 141.02 & 149.96 & 80.92 & 75.92 \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
\subsubsection{Linear Model}
|
||||
% TODO: explainedi nsection reference ?
|
||||
The simplest model to be trained for the NRV modeling is the linear model. The linear model is trained using the pinball loss function explained in the section above. The outputs of the model are values for the chosen quantiles. The linear model can be trained in an autoregressive and non-autoregressive way. Both methods will be compared to each other. The linear model is trained using the Adam optimizer with a learning rate of 1e-4. Early stopping is used with a patience of 5 epochs. The linear model is evaluated using the mean squared error (MSE), mean absolute error (MAE), and continuous ranked probability score (CRPS). The influence of the input features is also evaluated by training the models with different input feature sets.
|
||||
|
||||
There is a big difference in the number of parameters between the autoregressive linear model and the non-autoregressive linear model. The autoregressive model only needs to output the NRV quantiles for one value while the non-autoregressive model needs to output the NRV quantiles for all the quarters of the day. Assuming thirteen quantiles are used, the autoregressive has 13 output parameters while the non-autoregressive model has 13 * 96 = 1248 output parameters. The total number of parameters for the autoregressive model is 13 * (number of input features + 1) while the total number of parameters for the non-autoregressive model is 13 * 96 * (number of input features + 1). Assuming only the NRV history of the previous day is used as input features, the autoregressive model has 1261 trainable parameters while the non-autoregressive model has 121056 parameters. This is a huge difference in the number of parameters and thus the complexity of the model.
|
||||
@@ -30,10 +29,9 @@ Comparing the results of the autoregressive and non-autoregressive linear models
|
||||
|
||||
The MSE and MAE of the non-autoregressive model are higher than the autoregressive model. This can be explained by the fact that the non-autoregressive model does not take into account the previous sampled value. Sampling is done for every quarter of the day independently. This can lead to large differences between the sampled values and thus can increase the MSE and MAE. The autoregressive model does take into account the previous sampled value and can adapt its quantile predictions based on this value so a smoother and more accurate sample can be generated.
|
||||
|
||||
% TODO: Check listing of features -> hoofdletters en shit
|
||||
Another thing to note is the influence of the input features on the non-autoregressive linear model. When increasing the number of input features, the evaluation metrics are a lot worse in comparison with only using the NRV history of the previous day. A reason for this behavior could be that the model is not able to capture the patterns in the data because of the huge amount of input parameters. When using the NRV, Load, Photovoltanic power production, Wind power production, and the Net Position as input features, the non-autoregressive model has an input size of 864. This increases the complexity of the model as well. The total number of trainable parameters becomes 1,079,520. This is a huge number of parameters and the model is not able to learn the patterns in the data anymore.
|
||||
Another thing to note is the influence of the input features on the non-autoregressive linear model. When increasing the number of input features, the evaluation metrics are a lot worse in comparison with only using the NRV history of the previous day. A reason for this behavior could be that the model is not able to capture the patterns in the data because of the huge amount of input parameters. When using the NRV, load, photovoltaic power production, wind power production, and the nominal net position as input features, the non-autoregressive model has an input size of 864. This increases the complexity of the model as well. The total number of trainable parameters becomes 1,079,520. This is a huge number of parameters and the model is not able to learn the patterns in the data anymore.
|
||||
|
||||
The performance of the autoregressive linear model, however, improves with the addition of more input features. When using the NRV, Load, Photovoltanic power production, Wind power production, and the Net Position as input features, the autoregressive model has an input size of 484. This is almost half the size of the non-autoregressive model. The total number of trainable parameters becomes 6,305 which is way less than the non-autoregressive model.
|
||||
The performance of the autoregressive linear model, however, improves with the addition of more input features. When using all available features, the autoregressive model has an input size of 484. This is almost half the size of the non-autoregressive model. The total number of trainable parameters becomes 6,305 which is way less than the non-autoregressive model.
|
||||
|
||||
An important thing to note is that the autoregressive model needs an additional feature to know which quarter of the day it is modeling. The quarter of the day also influences the value of the NRV. This can easily be seen in Figure \ref{fig:nrv_mean_std_over_quarter}. The figure shows the mean and standard deviation of the NRV values over the quarter of the day. These values change over the day which means the quarter is very valuable information for the model. The non-autoregressive on the other hand does not need this information because it models all the quarters of the day at once.
|
||||
|
||||
@@ -50,10 +48,8 @@ Providing the autoregressive model with the quarter of the day can be done in mu
|
||||
\text{sin}(\frac{2\pi}{96} \times \text{quarter}) \quad \text{and} \quad \text{cos}(\frac{2\pi}{96} \times \text{quarter})
|
||||
\end{equation}
|
||||
|
||||
The sine and cosine values are then concatenated with the input features. Another method that can be used is adding an embedding layer to the model. The discrete quarter of the day value can then be mapped to a vector. The embedding layer itself is learned during the training process which allows the model to learn patterns between quarters. The length of the embedding vector can be chosen and experimented with. The quarter-of-the-day information is then concatenated with the input features. Other information (eg. day of the week, month, year) can also easily be added to the model using this method by just increasing the size of the embedding layer. The results of the linear model with the quarter information are shown in Table \ref{tab:autoregressive_linear_model_quarter_embedding_baseline_results}.
|
||||
The sine and cosine values are then concatenated with the input features. Another method that can be used is adding an embedding layer to the model. The discrete quarter of the day value can then be mapped to a vector. The embedding layer itself is learned during the training process which allows the model to learn patterns between quarters. The length of the embedding vector can be chosen and experimented with. The quarter-of-the-day information is then concatenated with the input features. Other information (eg. day of the week, month, year) can also easily be added to the model using this method by just increasing the size of the embedding layer. The results of the linear model with the quarter information are shown in Table \ref{tab:autoregressive_linear_model_quarter_embedding_baseline_results}. QT stands for Quarter Trigonometric and QE stands for Quarter Embedding.
|
||||
|
||||
% TODO: Ask Jonas: Find cleaner way to present this table (remove repitition)
|
||||
% TODO: Add more time information like day of week, month
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\begin{tabular}{@{}lccc@{}}
|
||||
@@ -78,7 +74,7 @@ NRV + Load + PV + Wind + NP + QE \textbf{(5 dim)} & \textbf{34031.71} & \textbf{
|
||||
|
||||
The results show that adding the quarter embedding to the model improves all evaluation metrics for the autoregressive linear model. The quarter embedding is a valuable feature for the model.
|
||||
|
||||
Some examples of the generated full-day NRV samples are shown in Figure \ref{fig:autoregressive_linear_model_samples}. The examples are taken from the test set. The figure shows the confidence intervals of the NRV generations and the mean NRV prediction. The confidence intervals and mean are calculated based on 1000 generated full-day NRV samples. The samples were generated using the input features NRV, Load, Wind, PV, Net Position, and the quarter embedding for the autoregressive model.
|
||||
Some examples of the generated full-day NRV samples are shown in Figure \ref{fig:autoregressive_linear_model_samples}. The examples are taken from the test set. The figure shows the confidence intervals of the NRV generations and the mean NRV prediction. The confidence intervals and mean are calculated based on 1000 generated full-day NRV samples. The samples were generated using the input features NRV, load, wind, photovoltaic power and the nominal net position. For the autoregressive model, the quarter embedding is also used as input.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
|
||||
@@ -49,9 +49,9 @@ While this non-linear model is still quite simple, it offers the flexibility in
|
||||
& 4 & 256 & 37817.78 & 40200.92 & 146.90 & 152.00 & 85.63 & 74.37 \\
|
||||
& 8 & 256 & 36346.57 & 38746.81 & 144.80 & 148.82 & 84.51 & 74.55 \\
|
||||
& 16 & 256 & 38624.83 & 39328.47 & 148.61 & 149.19 & 87.05 & 75.38 \\
|
||||
\midrule
|
||||
NRV + Load + PV\\ + Wind & & & & & & & & \\
|
||||
& 2 & 256 & 42983.21 & 42950.17 & 156.65 & 156.88 & 92.15 & 76.21 \\
|
||||
% \midrule
|
||||
% NRV + Load + PV\\ + Wind & & & & & & & & \\
|
||||
% & 2 & 256 & 42983.21 & 42950.17 & 156.65 & 156.88 & 92.15 & 76.21 \\
|
||||
\midrule
|
||||
NRV + Load + PV\\ + Wind + Net Position\\ + QE (dim 5) & & & & & & & & \\
|
||||
& 2 & 256 & 37785.49 & 42828.61 & 146.99 & 157.03 & 85.22 & 76.36 \\
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
\subsection{Baselines}
|
||||
\subsubsection{Baselines}
|
||||
As discussed earlier, the most simple baseline that can be used is choosing two fixed thresholds. One threshold is used to buy electricity and the other threshold is used to sell electricity. The thresholds can be chosen based on the available historical data. A simple grid search is done over multiple combinations of thresholds. For each combination, the penalty parameter is optimized to make sure only 400 charge cycles are used in a year. The thresholds that achieve the highest profit on the training set are then used to evaluate the policy on the test set. The thresholds found that maximize the profit on the training set are 100€/MWh for buying and 200€/MWh for selling. Evaluating these thresholds on the test set results in a profit of €266,294.15 but using 492.0 charge cycles. This can not be used to fairly compare other policies. The thresholds can also be determined on the test set itself to find what the maximum possible profit is for the fixed thresholds policy. This can not be used in practice because the thresholds are determined on future data. It is, however, useful for the comparison of the other policies. The best thresholds found on the test set are 200€/MWh for buying and 250€/MWh for selling. The profit achieved using these thresholds is €143,004.34 with 287.12 charge cycles.
|
||||
|
||||
Another baseline that can be used is using the real \ac{NRV} data of the previous day to determine the buying and selling thresholds for the next day. The \ac{NRV} data of the previous day can be seen as a prediction for the \ac{NRV} data of the next day. Now, the thresholds are not fixed anymore but are determined based on the \ac{NRV} predictions. The thresholds are determined separately for each day using a simple grid search which allows the policy to adapt to the changing \ac{NRV} data. The penalty parameter is also optimized to make sure only around 283 charge cycles are used. The profit achieved using this policy is €198,807.09 using 283.5 charge cycles.
|
||||
|
||||
@@ -1,8 +1,174 @@
|
||||
\subsection{Policy using generated NRV samples}
|
||||
The generated full-day samples can be used to improve the profit of the policy. For each day, the generated samples can be used to determine the buying and selling thresholds. Assume that there are 100 generated full-day NRV samples for the day for which the profit needs to be optimized. The thresholds are determined for each generated sample separately using a simple grid search. All these thresholds can then be reduced by taking the mean to get one value for the buying threshold and one value for the selling threshold. Again, the penalty parameter is optimized for the test set to make sure around 283 charge cycles are used for fair comparison. The policy is evaluated for the different types of models that were trained and discussed in the previous sections.
|
||||
\subsubsection{Policy using generated NRV samples}
|
||||
The generated full-day samples can be used to improve the profit of the policy. For each day, the generated samples can be used to determine the buying and selling thresholds. Assume that there are 100 generated full-day NRV samples for the day for which the profit needs to be optimized. The thresholds are determined for each generated sample separately using a simple grid search. All these thresholds can then be reduced by taking the mean to get one value for the buying threshold and one value for the selling threshold. Again, the penalty parameter is optimized for the test set to make sure around 283 charge cycles are used for fair comparison.
|
||||
|
||||
% TODO: Explain the results of the different models
|
||||
% TODO: Compare with baselines
|
||||
A low CRPS value does not necessarily mean the policy will generate a high profit. Because of this, the CRPS metric can not be used to evaluate the model during the training phase and use this metric to do early stopping. To fairly evaluate and compare the models, a validation set is split off from the training set. The validation set is used to evaluate the profit of the policy during the training and use this to do early stopping. The last two months of the training set are used as the validation set. This range starts on 01-11-2022 and ends on 31-12-2022. Two months are chosen to make sure enough data is available to have a good estimate of the profit while making sure the validation set is not too large. The policy can be evaluated quite fast on the validation set which is feasible to do during the training after a certain number of epochs.
|
||||
|
||||
% TODO: explain further
|
||||
An observation that can be made is that the metrics used to evaluate the NRV predictions, do not necessarily correlate with the profit that can be made using the predictions. This means the best model in terms of the metrics does not necessarily result in the best profit. During the training, the profit should be used as a metric to evaluate the models but this becomes computationally expensive. Because of this, the policy now will only be evaluated after the training is done. The profit can give a better insight if the model improves the profit compared to the baselines.
|
||||
Early stopping is done because the models are prone to overfitting. When training the models too long, the models will start to overfit the training data which results in a lower profit on the test set. An example of the overfitting can be seen in Figure \ref{fig:early_stopping}. There the CRPS value of the validation set is shown together with the profit on the validation set. The CRPS value keeps improving during the training while the profit on the validation set is already decreasing. If early stopping was done based on the CRPS, the model would have been trained for too long and the profit on the test set would have been lower.
|
||||
|
||||
\begin{figure}[ht]
|
||||
% 2 figures next to each other
|
||||
\centering
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/policies/comparison/crps.png}
|
||||
\caption{CRPS}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/policies/comparison/profit.png}
|
||||
\caption{Profit}
|
||||
\end{subfigure}
|
||||
\caption{CRPS and profit on the validation set during training.}
|
||||
\label{fig:early_stopping}
|
||||
\end{figure}
|
||||
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\begin{adjustbox}{max width=\textwidth}
|
||||
\begin{tabular}{lccccc}
|
||||
\toprule
|
||||
Model (layers - hidden size) & Test CRPS & Test Profit (€) & Test Charge Cycles & Test Penalty \\
|
||||
\midrule
|
||||
\multicolumn{5}{l}{\textbf{Only NRV}} \\
|
||||
\midrule
|
||||
Linear & 79.73 & 190501.34 & 282.93 & 570.11 \\
|
||||
Non-Linear (2 - 256) & 86.67 & 190,521.14 & 282.69 & 694.37 \\
|
||||
Non-Linear (4 - 256) & 84.64 & 191,305.88 & 283.25 & 904.63 \\
|
||||
Non-Linear (4 - 512) & 87.77 & 191,374.56 & 282.88 & 1095.56 \\
|
||||
Non-Linear (8 - 256) & 87.93 & 192,110.72 & 282.56 & 1034.63 \\
|
||||
Non-Linear (2 - 512) & 87.03 & 190,924.44 & 282.94 & 621.38 \\
|
||||
Non-Linear (8 - 512) & 100.52 & 195,388.01 & 282.13 & 4153.81 \\
|
||||
GRU (2 - 256) & 96.66 & \textbf{196,655.36} & 283.81 & 801.44 \\
|
||||
GRU (4 - 256) & 86.62 & 190,208.00 & 282.31 & 633.87 \\
|
||||
GRU (2 - 512) & 99.85 & 195,864.99 & 283.06 & 584.72 \\
|
||||
GRU (4 - 512) & 88.32 & 191,077.33 & 282.19 & 627.13 \\
|
||||
\midrule
|
||||
\multicolumn{5}{l}{\textbf{All Features}} \\
|
||||
\midrule
|
||||
Linear & 81.23 & 188007.07 & 283.44 & 638.01 \\
|
||||
Non-Linear (2 - 256) & 79.33 & 190,466.07 & 282.56 & 689.89 \\
|
||||
Non-Linear (4 - 256) & 80.20 & 192,269.40 & 283.88 & 614.49 \\
|
||||
Non-Linear (8 - 256) & 84.83 & 192,655.81 & 282.69 & 1029.75 \\
|
||||
Non-Linear (4 - 512) & 107.99 & \textbf{196,999.03} & 284.88 & 819.43 \\
|
||||
Non-Linear (8 - 512) & 90.63 & 193,654.29 & 282.69 & 1173.56 \\
|
||||
GRU (2 - 256) & 94.86 & 190,715.84 & 282.56 & 436.41 \\
|
||||
GRU (4 - 256) & 92.52 & 189,946.76 & 283.13 & 420.54 \\
|
||||
GRU (2 - 512) & 87.96 & 191,142.48 & 282.44 & 475.10 \\
|
||||
GRU (4 - 512) & 90.47 & 193,970.81 & 283.31 & 516.62 \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{adjustbox}
|
||||
\caption{Comparison of AQR: Linear, Non-linear and GRU models using different hyperparameters. Early stopping is done based on the profit using the validation set.}
|
||||
\label{tab:aqr_models_comparison}
|
||||
\end{table}
|
||||
|
||||
Table \ref{tab:aqr_models_comparison} presents a comprehensive comparison of autoregressive quantile regression (AQR) models, including Linear, Non-Linear, and GRU architectures, evaluated on various performance metrics such as Test CRPS, Test Profit, Test Charge Cycles, and Test Penalty. The models are tested using only Net Regulation Volume (NRV) and all features as input. The key observations from this comparison indicate that the Non-Linear model with 4 hidden layers and 512 units per layer achieves the highest profit of €196,999.03 when all features are used. This suggests that deeper non-linear models with a larger capacity to learn complex patterns perform better in terms of profitability. Among the models trained with only NRV, the GRU with 2 layers and 256 units per layer achieves the highest profit of €196,655.36, suggesting that GRU models are effective in capturing temporal dependencies when fewer features are considered. It is not easy to make concrete conclusions. There is not a single hyperparameter that influences the model to perform better. The difference between the best-performing models is often very small which makes it difficult to conclude.
|
||||
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\begin{adjustbox}{max width=\textwidth}
|
||||
\begin{tabular}{lccccc}
|
||||
\toprule
|
||||
Model (layers - hidden size) & Steps & Test CRPS & Test Profit (€) & Test Charge Cycles & Test Penalty \\
|
||||
\midrule
|
||||
\multicolumn{6}{l}{\textbf{Only NRV}} \\
|
||||
\midrule
|
||||
(2 - 256) & 5 & 275.03 & 191,221.97 & 282.50 & 315.6875 \\
|
||||
(2 - 256) & 20 & 113.27 & 215,946.13 & 283.13 & 421.8125 \\
|
||||
(2 - 256) & 50 & 139.61 & \textbf{218,170.75} & 283.00 & 449.2750 \\
|
||||
(2 - 512) & 50 & 167.23 & 209,625.07 & 282.25 & 449.1875 \\
|
||||
(2 - 1024) & 50 & 100.72 & 217,560.20 & 283.75 & 455.5625 \\
|
||||
(2 -256) & 80 & 201.15 & 209,761.89 & 283.50 & 457.2500 \\
|
||||
\midrule
|
||||
\multicolumn{6}{l}{\textbf{All Features}} \\
|
||||
\midrule
|
||||
(2 -256) & 20 & 108.84 & \textbf{218,141.31} & 283.94 & 428.6875 \\
|
||||
(2 -256) & 20 & 105.31 & 215,862.35 & 283.06 & 440.2500 \\
|
||||
(2 -512) & 20 & 103.41 & 216,411.79 & 282.56 & 450.3125 \\
|
||||
(2 - 1024) & 20 & 100.36 & 215,686.32 & 282.69 & 463.6875 \\
|
||||
(2 -256) & 50 & 117.81 & 216,632.39 & 282.75 & 421.3125 \\
|
||||
(2 -512) & 50 & 180.83 & 210,769.03 & 282.06 & 446.4375 \\
|
||||
(2 - 1024) & 50 & 179.59 & 212,793.94 & 282.88 & 454.5000 \\
|
||||
(2 -256) & 80 & 242.68 & 205,374.94 & 283.13 & 451.3125 \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{adjustbox}
|
||||
\caption{Comparison of diffusion models using different hyperparameters. Early stopping is done based on the profit using the validation set.}
|
||||
\label{tab:diffusion_policy_comparison}
|
||||
\end{table}
|
||||
|
||||
Table \ref{tab:diffusion_policy_comparison} shows the achieved profit and CRPS for diffusion models with different hyperparameters. Multiple conclusions can be made from this table. First of all, a lower CRPS metric does not correlate with a higher profit. The CRPS metric captures how well the NRV distribution is modeled. The profit metric captures how well the policy can make a profit using the generated samples. A lower CRPS means a better modeling of the NRV but in the table, it can be seen that the lowest CRPS is achieved by the model with layers 1024 - 1024 and 20 steps. This model also uses all features as input. The model achieves a CRPS of 100.36 with a profit of €215,686.32. The highest profit, however, is achieved by the model with layers 256 - 256 and using 50 steps. This model only uses the NRV as input. This model achieves a CRPS of 139.61 with a profit of €218,170.75. The CRPS here is higher which means a worse modeling of the NRV but the profit is higher.
|
||||
|
||||
Some examples of the generated samples from the model with the lowest CRPS and the model with the highest profit are shown in Figure \ref{fig:diffusion_policy_comparison_high_low_crps}. A significant difference in the confidence intervals can be observed. The left model clearly shows a better modeling of the NRV compared to the right model. The right model has confidence intervals that range from the minimum to the maximum value of the NRV. There is a high variance in the generated samples. This shows that the policy does not only benefit from good modeling of the NRV but also from a high variance in the generated samples. The model with the highest profit also only uses the NRV as input. This shows that more features do not necessarily result in a higher profit and that better modeling of the NRV does not necessarily improve the achievable profit of the policy.
|
||||
|
||||
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/policies/comparison/Testing_864_Low_CRPS.jpeg}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/policies/comparison/Testing_864_High_CRPS.jpeg}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/policies/comparison/Testing_7008_Low_CRPS.jpeg}
|
||||
\caption{Lowest CRPS}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[b]{0.49\textwidth}
|
||||
\includegraphics[width=\textwidth]{images/diffusion/policies/comparison/Testing_7008_High_CRPS.jpeg}
|
||||
\caption{Highest profit}
|
||||
\end{subfigure}
|
||||
|
||||
\caption{Comparison of the two samples from the model with the lowest CRPS and the model with the highest profit. }
|
||||
\label{fig:diffusion_policy_comparison_high_low_crps}
|
||||
\end{figure}
|
||||
|
||||
% TODO: Add linear model results
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\begin{adjustbox}{max width=\textwidth}
|
||||
\begin{tabular}{lcccc}
|
||||
\toprule
|
||||
Model (layers - hidden size) & Features & Test Profit (€) & Test Charge Cycles & Yesterday Baseline Improvement \\
|
||||
\midrule
|
||||
\multicolumn{5}{l}{\textbf{Baselines}} \\
|
||||
\midrule
|
||||
Fixed thresholds && 143,004.34 & 287.12 & \\
|
||||
Yesterday NRV && 198,807.09 & 283.5 & \\
|
||||
Perfect NRV && 230,317.84 & 282.5 & \\
|
||||
\midrule
|
||||
\multicolumn{5}{l}{\textbf{Models}} \\
|
||||
\midrule
|
||||
|
||||
NAQR: Linear & All & 191,421.62 & 282.81 & -3.85\% \\
|
||||
NAQR: Non-Linear (2 - 512) & NRV & 189,982.08 & 283.81 & -4.43\% \\
|
||||
&&& \\
|
||||
AQR: Linear & NRV & 190,501.34 & 282.94 & -4.17\% \\
|
||||
AQR: Non-Linear (4 - 512) & All & 196,999.03 & 284.88 & -0.91\% \\
|
||||
AQR: GRU (2 - 256) & NRV & 196,655.36 & 283.81 & -1.08\% \\
|
||||
& & & \\
|
||||
Diffusion (2 - 256, 50 steps) & NRV & 218,170.75 & 283.00 & \textbf{+9.74\%} \\
|
||||
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{adjustbox}
|
||||
\caption{Comparison of the profit achieved by the baselines and the best-performing models. The improvement is calculated compared to the baseline that uses the NRV of yesterday as a prediction.}
|
||||
\label{tab:policy_comparison}
|
||||
\end{table}
|
||||
|
||||
A comparison of the baselines and the best-performing models is shown in Table \ref{tab:policy_comparison}. The most effective model is the diffusion model with two layers of 256 hidden units, utilizing only the NRV values from the previous day as input features and employing 50 steps. This model is unique in that it surpasses the Yesterday NRV baseline, achieving a profit of €218,170.75 with 283.00 charge cycles. This represents a 9.74\% improvement over the baseline that uses the NRV of the previous day for prediction. When the policy is evaluated using the actual NRV data for the evaluated day, the maximum achievable profit with a simple policy is €230,317.84. Thus, the best-performing diffusion model achieves 94.78\% of this maximum potential profit.
|
||||
|
||||
In contrast, all other evaluated models yielded lower profits compared to the Yesterday NRV baseline. Specifically, the NAQR models, both linear and non-linear, failed to outperform the baseline. The NAQR Non-Linear model, with two layers of 512 hidden units, achieved a profit of €189,982.08 with 283.81 charge cycles, resulting in a 4.43\% decrease compared to the Yesterday NRV baseline. Similarly, the NAQR Linear model did not yield competitive results.
|
||||
|
||||
The AQR models also underperformed relative to the baseline. The AQR Linear model, which used NRV features, achieved a profit of €190,501.34 with 282.94 charge cycles, representing a 4.17\% decrease. The AQR Non-Linear model, with four layers of 512 hidden units and using all features, achieved a slightly better profit of €196,999.03 with 284.88 charge cycles but still fell short by 0.91\%. The AQR GRU model, incorporating two layers of 256 hidden units and using NRV features, recorded a profit of €196,655.36 with 283.81 charge cycles, which is 1.08\% lower than the baseline.
|
||||
|
||||
Overall, the diffusion model is the only one that significantly improves upon the Yesterday NRV baseline, demonstrating its superior ability to predict and optimize for higher profits. These results show that using a generative model to generate samples of the NRV that can be used to optimize the buying and selling of electricity can be beneficial. The results are also visualized in Figure \ref{fig:profit_comparison}.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{images/comparison/final_comparison.png}
|
||||
\caption{Comparison of the profit achieved by the baselines and the best-performing models. The improvement is calculated compared to the baseline that uses the NRV of yesterday as a prediction.}
|
||||
\label{fig:profit_comparison}
|
||||
\end{figure}
|
||||
|
||||
33
Reports/Thesis/sections/verslag.log
Normal file
@@ -0,0 +1,33 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.9.17) 21 MAY 2024 12:43
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
file:line:error style messages enabled.
|
||||
%&-line parsing enabled.
|
||||
**"/Users/victormylle/Library/CloudStorage/SeaDrive-VictorMylle(cloud.optimize-it.be)/My Libraries/UGent/Computer_Science/2e jaar/Thesis/Reports/Thesis/sections/verslag"
|
||||
(/Users/victormylle/Library/CloudStorage/SeaDrive-VictorMylle(cloud.optimize-it.be)/My Libraries/UGent/Computer_Science/2e jaar/Thesis/Reports/Thesis/sections/verslag.tex
|
||||
LaTeX2e <2022-11-01> patch level 1
|
||||
L3 programming layer <2023-02-22>
|
||||
|
||||
! LaTeX Error: File `ugent-doc.cls' not found.
|
||||
|
||||
Type X to quit or <RETURN> to proceed,
|
||||
or enter new name. (Default extension: cls)
|
||||
|
||||
Enter file name:
|
||||
/Users/victormylle/Library/CloudStorage/SeaDrive-VictorMylle(cloud.optimize-it.be)/My Libraries/UGent/Computer_Science/2e jaar/Thesis/Reports/Thesis/sections/verslag.tex:2: Emergency stop.
|
||||
<read *>
|
||||
|
||||
l.2 ^^M
|
||||
|
||||
*** (cannot \read from terminal in nonstop modes)
|
||||
|
||||
|
||||
Here is how much of TeX's memory you used:
|
||||
24 strings out of 476025
|
||||
954 string characters out of 5790017
|
||||
1849388 words of memory out of 5000000
|
||||
20574 multiletter control sequences out of 15000+600000
|
||||
512287 words of font info for 32 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
19i,0n,29p,277b,17s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
/Users/victormylle/Library/CloudStorage/SeaDrive-VictorMylle(cloud.optimize-it.be)/My Libraries/UGent/Computer_Science/2e jaar/Thesis/Reports/Thesis/sections/verslag.tex:2: ==> Fatal error occurred, no output PDF file produced!
|
||||
216
Reports/Thesis/sections/verslag.tex
Normal file
@@ -0,0 +1,216 @@
|
||||
\documentclass[12pt,a4paper,faculty=ea,language=en,doctype=article]{ugent-doc}
|
||||
|
||||
% Optional: margins and spacing
|
||||
%-------------------------------
|
||||
% Uncomment and adjust to change the default values set by the template
|
||||
% Note: the defaults are suggested values by Ghent University
|
||||
%\geometry{bottom=2.5cm,top=2.5cm,left=3cm,right=2cm}
|
||||
%\renewcommand{\baselinestretch}{1.15} % line spacing
|
||||
|
||||
% Font
|
||||
%------
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[utf8]{inputenc} % allows non-ascii input characters
|
||||
% Comment or remove the two lines below to use the default Computer Modern font
|
||||
\usepackage{libertine}
|
||||
\usepackage{libertinust1math}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{array}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{mathtools}
|
||||
\usepackage{multirow}
|
||||
\usepackage{float}
|
||||
\usepackage{bbm}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{subcaption}
|
||||
\usepackage{adjustbox}
|
||||
\usepackage{caption}
|
||||
\usepackage{subcaption}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{tikz}
|
||||
\usepackage{acro}
|
||||
\usepackage{pdflscape}
|
||||
\usepackage[square,numbers]{natbib}
|
||||
\usepackage{pdfpages}
|
||||
|
||||
\usetikzlibrary{positioning, calc}
|
||||
|
||||
% Electricity market
|
||||
% Generative Modeling
|
||||
% -> Quantile Regression
|
||||
% -> Autoregressive vs non autoregressive
|
||||
% -> Modellen (linear, non linear, gru)
|
||||
% -> Diffusion (1 grote)
|
||||
% Policies (globaal, hoe winst maken) Wij heel simpele, tonen dat NRV generaties nut hebben. Reinforcement learning voor complexere
|
||||
% -> Baseline Policies
|
||||
% -> Policies based on generations (NRV is nu full day samples)
|
||||
% Waarom nuttig om toekomst te modellen
|
||||
% Results & discussion
|
||||
% -> Per model resultaten
|
||||
% -> Comparison between models
|
||||
|
||||
% Conclusion
|
||||
|
||||
% plot mean and std for averaged NRV over all days
|
||||
% Autoregressive models krijgen enkels voorspelde waardes voor dat kwartier, waarom niet van kwartieren erna ook? Uitleg: voor laatste kwartier van de dag, voorspelling van de dag erna nodig. Anders extra padding.
|
||||
|
||||
% Non autoregressive vs autoregressive. Autoregressive weet niet dat hij T+1 ... T+96 moet voorspellen. Denkt dat hij enkel T+1 voorspelt. Te overconfident in voorspellingen voor input met error.
|
||||
|
||||
\newcolumntype{C}{>{\centering\arraybackslash}X}
|
||||
|
||||
|
||||
% NOTE: because the UGent font Panno is proprietary, it is not possible to use it
|
||||
% in Overleaf. But UGent does not suggest to use Panno for documents (or maybe only for
|
||||
% the titlepage). For the body, the UGent suggestion is to use a good serif font (for
|
||||
% LaTeX this could be libertine or Computer Modern).
|
||||
|
||||
% Proper word splitting
|
||||
%-----------------------
|
||||
\usepackage[english]{babel}
|
||||
|
||||
% Mathematics
|
||||
%-------------
|
||||
\usepackage{amsmath}
|
||||
|
||||
% Figures
|
||||
%---------
|
||||
\usepackage{graphicx} % optional: the package is already loaded by the template
|
||||
\graphicspath{{./figures/}}
|
||||
|
||||
% Bibliography settings
|
||||
%-----------------------
|
||||
% \usepackage[backend=biber, style=apa, sorting=nyt, hyperref=true]{biblatex}
|
||||
% \addbibresource{./references.bib}
|
||||
% \usepackage{csquotes} % Suggested when using babel+biblatex
|
||||
|
||||
% Hyperreferences
|
||||
%-----------------
|
||||
\usepackage[colorlinks=true, allcolors=ugentblue]{hyperref}
|
||||
|
||||
% Whitespace between paragraphs and no indentation
|
||||
%--------------------------------------------------
|
||||
\usepackage[parfill]{parskip}
|
||||
|
||||
% Input for title page
|
||||
%----------------------
|
||||
|
||||
%% Note: a stricter UGent style could be achieved with, e.g.:
|
||||
\usepackage{ulem} % for colored underline
|
||||
\renewcommand{\ULthickness}{2pt} % adjust thickness of underline
|
||||
\thetitle{Generative modeling of electricity imbalance prices for battery optimization}
|
||||
% Note: do not forget to reset the \ULthickness to 1pt after invoking \maketitle
|
||||
% (otherwise all underlines in the rest of your document will be too thick):
|
||||
%\renewcommand{\ULthickness}{1pt}
|
||||
|
||||
% The first (top) infobox at bottom of titlepage
|
||||
\infoboxa{\bfseries\large Master Thesis}
|
||||
|
||||
% The second infobox at bottom of titlepage
|
||||
\infoboxb{Name:
|
||||
\begin{tabular}[t]{l}
|
||||
Victor Mylle
|
||||
\end{tabular}
|
||||
}
|
||||
|
||||
% The third infobox at bottom of titlepage
|
||||
\infoboxc{
|
||||
Promotors:
|
||||
\begin{tabular}[t]{l}
|
||||
prof. dr. ir. Chris Develder \\
|
||||
prof. Bert Claessens
|
||||
\end{tabular}
|
||||
\\\\
|
||||
Supervisor:
|
||||
\begin{tabular}[t]{l}
|
||||
Jonas Van Gompel
|
||||
\end{tabular}
|
||||
}
|
||||
|
||||
% The last (bottom) infobox at bottom of titlepage
|
||||
\infoboxd{Academic year: 2023--2024} % note dash, not hyphen
|
||||
|
||||
% load acronyms file
|
||||
\input{acronyms}
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
% =====================================================================
|
||||
% Cover
|
||||
% =====================================================================
|
||||
|
||||
% ------------ TITLE PAGE ---------
|
||||
\maketitle
|
||||
\renewcommand{\ULthickness}{1pt}
|
||||
|
||||
% =====================================================================
|
||||
% Front matter
|
||||
% =====================================================================
|
||||
|
||||
% ------------ TABLE OF CONTENTS ---------
|
||||
% \begin{titlepage}
|
||||
|
||||
% \centering % Centers everything on the page
|
||||
|
||||
% % Logo or Image (Optional)
|
||||
% % \includegraphics[width=0.5\textwidth]{path_to_logo.jpg}
|
||||
|
||||
% \vspace*{2cm} % Add vertical space
|
||||
|
||||
% {\large Title: Forecasting and generative modeling of the Belgian electricity market\par}
|
||||
|
||||
% \vspace{2cm}
|
||||
% {\Large Victor Mylle\par}
|
||||
|
||||
% \vspace{1cm}
|
||||
% {\large }
|
||||
|
||||
% \vspace{1cm}
|
||||
% {\large Mentor: }
|
||||
|
||||
% \end{titlepage}
|
||||
|
||||
|
||||
% ------------ ABSTRACT ---------
|
||||
|
||||
|
||||
|
||||
|
||||
% ------------ Introduction ---------
|
||||
\include{sections/abstract}
|
||||
|
||||
\includepdf[pages=-]{../Extended_Abstract/extended_abstract.pdf}
|
||||
|
||||
|
||||
{\hypersetup{hidelinks}\tableofcontents} % hide link color in toc
|
||||
\newpage
|
||||
|
||||
\include{sections/introduction}
|
||||
|
||||
|
||||
\include{sections/background}
|
||||
|
||||
\include{sections/policies}
|
||||
|
||||
\include{sections/literature_study}
|
||||
|
||||
\input{sections/results}
|
||||
|
||||
\input{sections/conclusion}
|
||||
|
||||
\newpage
|
||||
\printacronyms[display=all,sort=true]
|
||||
|
||||
\newpage
|
||||
% bibliography
|
||||
% \printbibliography
|
||||
\bibliographystyle{unsrtnat}
|
||||
\bibliography{references}
|
||||
|
||||
% appendix
|
||||
\appendix
|
||||
|
||||
\include{sections/appendix}
|
||||
|
||||
\end{document}
|
||||
@@ -1,7 +1,6 @@
|
||||
\relax
|
||||
\providecommand\babel@aux[2]{}
|
||||
\@nameuse{bbl@beforestart}
|
||||
\abx@aux@refcontext{nyt/global//global/global}
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
|
||||
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
|
||||
@@ -21,44 +20,190 @@
|
||||
\@writefile{lof}{\acswitchoff }
|
||||
\@writefile{lot}{\acswitchoff }
|
||||
\babel@aux{english}{}
|
||||
\@input{sections/abstract.aux}
|
||||
\@input{sections/introduction.aux}
|
||||
\@input{sections/background.aux}
|
||||
\@input{sections/policies.aux}
|
||||
\@input{sections/literature_study.aux}
|
||||
\abx@aux@refcontext{nyt/apasortcite//global/global}
|
||||
\abx@aux@cite{0}{weron_electricity_2014}
|
||||
\abx@aux@segm{0}{0}{weron_electricity_2014}
|
||||
\abx@aux@refcontext{nyt/apasortcite//global/global}
|
||||
\abx@aux@cite{0}{poggi_electricity_2023}
|
||||
\abx@aux@segm{0}{0}{poggi_electricity_2023}
|
||||
\abx@aux@refcontext{nyt/apasortcite//global/global}
|
||||
\abx@aux@cite{0}{lu_scenarios_2022}
|
||||
\abx@aux@segm{0}{0}{lu_scenarios_2022}
|
||||
\abx@aux@refcontext{nyt/apasortcite//global/global}
|
||||
\abx@aux@cite{0}{dumas_deep_2022}
|
||||
\abx@aux@segm{0}{0}{dumas_deep_2022}
|
||||
\abx@aux@refcontext{nyt/apasortcite//global/global}
|
||||
\abx@aux@cite{0}{rasul_autoregressive_2021}
|
||||
\abx@aux@segm{0}{0}{rasul_autoregressive_2021}
|
||||
\abx@aux@page{1}{19}
|
||||
\abx@aux@page{2}{19}
|
||||
\abx@aux@page{3}{19}
|
||||
\abx@aux@page{4}{19}
|
||||
\abx@aux@refcontext{nyt/apasortcite//global/global}
|
||||
\abx@aux@cite{0}{dumas_deep_2022}
|
||||
\abx@aux@segm{0}{0}{dumas_deep_2022}
|
||||
\abx@aux@page{5}{20}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6}Results \& Discussion}{21}{section.6}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Data}{21}{subsection.6.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Quantile Regression}{22}{subsection.6.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {6.2.1}Linear Model}{22}{subsubsection.6.2.1}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces Linear model results\relax }}{23}{table.caption.9}\protected@file@percent }
|
||||
\newlabel{tab:linear_model_baseline_results}{{3}{23}{Linear model results\relax }{table.caption.9}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Mean and standard deviation of the NRV values over the quarter of the day\relax }}{25}{figure.caption.10}\protected@file@percent }
|
||||
\newlabel{fig:nrv_mean_std_over_quarter}{{6}{25}{Mean and standard deviation of the NRV values over the quarter of the day\relax }{figure.caption.10}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces Autoregressive linear model results with time features\relax }}{25}{table.caption.11}\protected@file@percent }
|
||||
\newlabel{tab:autoregressive_linear_model_quarter_embedding_baseline_results}{{4}{25}{Autoregressive linear model results with time features\relax }{table.caption.11}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Comparison of the autoregressive and non-autoregressive linear model samples.\relax }}{26}{figure.caption.12}\protected@file@percent }
|
||||
\newlabel{fig:linear_model_sample_comparison}{{7}{26}{Comparison of the autoregressive and non-autoregressive linear model samples.\relax }{figure.caption.12}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces Samples for two examples from the test set for the autoregressive and non-autoregressive linear model. The real NRV is shown in orange.\relax }}{27}{figure.caption.13}\protected@file@percent }
|
||||
\newlabel{fig:linear_model_samples_comparison}{{8}{27}{Samples for two examples from the test set for the autoregressive and non-autoregressive linear model. The real NRV is shown in orange.\relax }{figur
|
||||
\citation{noauthor_welcome_nodate}
|
||||
\citation{noauthor_imbalance_nodate}
|
||||
\citation{noauthor_measured_nodate}
|
||||
\citation{noauthor_photovoltaic_nodate}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {7}Results \& Discussion}{29}{section.7}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {7.1}Data}{29}{subsection.7.1}\protected@file@percent }
|
||||
\citation{noauthor_wind_nodate}
|
||||
\citation{noauthor_intraday_nodate}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {7.2}Quantile Regression}{30}{subsection.7.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.2.1}Linear Model}{30}{subsubsection.7.2.1}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces Linear model results\relax }}{31}{table.caption.10}\protected@file@percent }
|
||||
\newlabel{tab:linear_model_baseline_results}{{3}{31}{Linear model results\relax }{table.caption.10}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces Mean and standard deviation of the NRV values over the quarter of the day\relax }}{33}{figure.caption.11}\protected@file@percent }
|
||||
\newlabel{fig:nrv_mean_std_over_quarter}{{8}{33}{Mean and standard deviation of the NRV values over the quarter of the day\relax }{figure.caption.11}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces Autoregressive linear model results with time features\relax }}{33}{table.caption.12}\protected@file@percent }
|
||||
\newlabel{tab:autoregressive_linear_model_quarter_embedding_baseline_results}{{4}{33}{Autoregressive linear model results with time features\relax }{table.caption.12}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Comparison of the autoregressive and non-autoregressive linear model samples.\relax }}{34}{figure.caption.13}\protected@file@percent }
|
||||
\newlabel{fig:linear_model_sample_comparison}{{9}{34}{Comparison of the autoregressive and non-autoregressive linear model samples.\relax }{figure.caption.13}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Samples for two examples from the test set for the autoregressive and non-autoregressive linear model. The real NRV is shown in orange.\relax }}{35}{figure.caption.14}\protected@file@percent }
|
||||
\newlabel{fig:linear_model_samples_comparison}{{10}{35}{Samples for two examples from the test set for the autoregressive and non-autoregressive linear model. The real NRV is shown in orange.\relax }{figure.caption.14}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Over/underestimation of the quantiles for the autoregressive and non-autoregressive linear models. Both the quantile performance for the training and test set are shown. The plots are generated using the input features NRV, Load, Wind, PV, Net Position, and the quarter embedding (only for the autoregressive model).\relax }}{36}{figure.caption.15}\protected@file@percent }
|
||||
\newlabel{fig:linear_model_quantile_over_underestimation}{{11}{36}{Over/underestimation of the quantiles for the autoregressive and non-autoregressive linear models. Both the quantile performance for the training and test set are shown. The plots are generated using the input features NRV, Load, Wind, PV, Net Position, and the quarter embedding (only for the autoregressive model).\relax }{figure.caption.15}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.2.2}Non-Linear Model}{37}{subsubsection.7.2.2}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {5}{\ignorespaces Non-linear Quantile Regression Model Architecture\relax }}{37}{table.caption.16}\protected@file@percent }
|
||||
\newlabel{tab:non_linear_model_architecture}{{5}{37}{Non-linear Quantile Regression Model Architecture\relax }{table.caption.16}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {6}{\ignorespaces Non-linear quantile regression model results. All the models used a dropout of 0.2 .\relax }}{38}{table.caption.17}\protected@file@percent }
|
||||
\newlabel{tab:non_linear_model_results}{{6}{38}{Non-linear quantile regression model results. All the models used a dropout of 0.2 .\relax }{table.caption.17}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces Comparison of the autoregressive and non-autoregressive non-linear model examples.\relax }}{39}{figure.caption.18}\protected@file@percent }
|
||||
\newlabel{fig:non_linear_model_examples}{{12}{39}{Comparison of the autoregressive and non-autoregressive non-linear model examples.\relax }{figure.caption.18}{}}
|
||||
\citation{hochreiter_long_1997}
|
||||
\citation{cho_learning_2014}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces Over/underestimation of the quantiles for the autoregressive and non-autoregressive non-linear models. Both the quantile performance for the training and test set are shown. The plots are generated using the input features NRV, Load, Wind, PV, Net Position, and the quarter embedding (only for the autoregressive model).\relax }}{40}{figure.caption.19}\protected@file@percent }
|
||||
\newlabel{fig:non-linear_model_quantile_over_underestimation}{{13}{40}{Over/underestimation of the quantiles for the autoregressive and non-autoregressive non-linear models. Both the quantile performance for the training and test set are shown. The plots are generated using the input features NRV, Load, Wind, PV, Net Position, and the quarter embedding (only for the autoregressive model).\relax }{figure.caption.19}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.2.3}GRU Model}{40}{subsubsection.7.2.3}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {7}{\ignorespaces GRU Model Architecture\relax }}{41}{table.caption.20}\protected@file@percent }
|
||||
\newlabel{tab:gru_model_architecture}{{7}{41}{GRU Model Architecture\relax }{table.caption.20}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {8}{\ignorespaces Autoregressive GRU quantile regression model results. All the models used a dropout of 0.2 .\relax }}{42}{table.caption.21}\protected@file@percent }
|
||||
\newlabel{tab:autoregressive_gru_model_results}{{8}{42}{Autoregressive GRU quantile regression model results. All the models used a dropout of 0.2 .\relax }{table.caption.21}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces Comparison of the autoregressive and non-autoregressive GRU model examples.\relax }}{43}{figure.caption.22}\protected@file@percent }
|
||||
\newlabel{fig:gru_model_sample_comparison}{{14}{43}{Comparison of the autoregressive and non-autoregressive GRU model examples.\relax }{figure.caption.22}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces Over/underestimation of the quantiles for the autoregressive and non-autoregressive GRU models. Both the quantile performance for the training and test set are shown. The plots are generated using the input features NRV, Load, Wind, PV, Net Position, and the quarter embedding (only for the autoregressive model).\relax }}{44}{figure.caption.23}\protected@file@percent }
|
||||
\newlabel{fig:gru_model_quantile_over_underestimation}{{15}{44}{Over/underestimation of the quantiles for the autoregressive and non-autoregressive GRU models. Both the quantile performance for the training and test set are shown. The plots are generated using the input features NRV, Load, Wind, PV, Net Position, and the quarter embedding (only for the autoregressive model).\relax }{figure.caption.23}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3}Diffusion}{44}{subsection.7.3}\protected@file@percent }
|
||||
\citation{ho_denoising_2020}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {16}{\ignorespaces Intermediate steps of the diffusion model for example 864 from the test set. The confidence intervals shown in the plots are made using 100 samples.\relax }}{46}{figure.caption.24}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_intermediates}{{16}{46}{Intermediate steps of the diffusion model for example 864 from the test set. The confidence intervals shown in the plots are made using 100 samples.\relax }{figure.caption.24}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {9}{\ignorespaces Simple diffusion model results.\relax }}{46}{table.caption.25}\protected@file@percent }
|
||||
\newlabel{tab:diffusion_results}{{9}{46}{Simple diffusion model results.\relax }{table.caption.25}{}}
|
||||
\citation{ho_denoising_2020}
|
||||
\citation{dhariwal_diffusion_2021}
|
||||
\citation{ho_classifier-free_2022}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces The plots show the generations for the examples from the test set. The diffusion model used to generate the samples consists of 2 layers with a hidden size of 1024. The number of denoising steps is set to 300. The confidence intervals shown in the plots are made using 100 samples. All the available input features are used which includes the \acs {NRV}, Load, Wind, \acs {PV} and \acs {NP} data.\relax }}{47}{figure.caption.26}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_test_set_examples}{{17}{47}{The plots show the generations for the examples from the test set. The diffusion model used to generate the samples consists of 2 layers with a hidden size of 1024. The number of denoising steps is set to 300. The confidence intervals shown in the plots are made using 100 samples. All the available input features are used which includes the \acs {NRV}, Load, Wind, \acs {PV} and \acs {NP} data.\relax }{figure.caption.26}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces The plots show the generations for the first examples from the test set. Two diffusion models with 2 layers and 1024 hidden units are used. The first one is only conditioned on the NRV of the previous day while the second one uses all available input features.\relax }}{48}{figure.caption.27}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_test_set_example_only_nrv_vs_all}{{18}{48}{The plots show the generations for the first examples from the test set. Two diffusion models with 2 layers and 1024 hidden units are used. The first one is only conditioned on the NRV of the previous day while the second one uses all available input features.\relax }{figure.caption.27}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {7.4}Comparison}{48}{subsection.7.4}\protected@file@percent }
|
||||
\ACRO{recordpage}{MSE}{49}{1}{48}
|
||||
\ACRO{recordpage}{MAE}{49}{1}{48}
|
||||
\ACRO{recordpage}{CRPS}{49}{1}{48}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {10}{\ignorespaces Comparison of the different models using the \ac {MSE}, \ac {MAE} and \ac {CRPS} metrics. The best-performing models for a certain type are selected based on the \ac {CRPS}.\relax }}{49}{table.caption.28}\protected@file@percent }
|
||||
\newlabel{tab:model_comparison}{{10}{49}{Comparison of the different models using the \ac {MSE}, \ac {MAE} and \ac {CRPS} metrics. The best-performing models for a certain type are selected based on the \ac {CRPS}.\relax }{table.caption.28}{}}
|
||||
\ACRO{recordpage}{NAQR}{50}{1}{49}
|
||||
\ACRO{recordpage}{MSE}{50}{1}{49}
|
||||
\ACRO{recordpage}{MAE}{50}{1}{49}
|
||||
\ACRO{recordpage}{CRPS}{50}{1}{49}
|
||||
\ACRO{recordpage}{MSE}{50}{1}{49}
|
||||
\ACRO{recordpage}{MAE}{50}{1}{49}
|
||||
\ACRO{recordpage}{MSE}{50}{1}{49}
|
||||
\ACRO{recordpage}{MAE}{50}{1}{49}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces Comparison of the autoregressive models with the diffusion model\relax }}{51}{figure.caption.29}\protected@file@percent }
|
||||
\newlabel{fig:ar_linear_gru_diffusion_comparison}{{19}{51}{Comparison of the autoregressive models with the diffusion model\relax }{figure.caption.29}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces Comparison of the non-autoregressive models with the diffusion model\relax }}{52}{figure.caption.30}\protected@file@percent }
|
||||
\newlabel{fig:naqr_linear_gru_diffusion_comparison}{{20}{52}{Comparison of the non-autoregressive models with the diffusion model\relax }{figure.caption.30}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {7.5}Policies for battery optimization}{53}{subsection.7.5}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.5.1}Baselines}{53}{subsubsection.7.5.1}\protected@file@percent }
|
||||
\ACRO{recordpage}{NRV}{54}{1}{53}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\ACRO{recordpage}{NRV}{55}{1}{54}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {11}{\ignorespaces Results of the baseline policies on the test set. \relax }}{54}{table.caption.31}\protected@file@percent }
|
||||
\newlabel{tab:fixed_thresholds}{{11}{54}{Results of the baseline policies on the test set. \relax }{table.caption.31}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.5.2}Policy using generated NRV samples}{54}{subsubsection.7.5.2}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces CRPS and profit on the validation set during training.\relax }}{55}{figure.caption.32}\protected@file@percent }
|
||||
\newlabel{fig:early_stopping}{{21}{55}{CRPS and profit on the validation set during training.\relax }{figure.caption.32}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {12}{\ignorespaces Comparison of AQR: Linear, Non-linear and GRU models using different hyperparameters. Early stopping is done based on the profit using the validation set.\relax }}{56}{table.caption.33}\protected@file@percent }
|
||||
\newlabel{tab:aqr_models_comparison}{{12}{56}{Comparison of AQR: Linear, Non-linear and GRU models using different hyperparameters. Early stopping is done based on the profit using the validation set.\relax }{table.caption.33}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {13}{\ignorespaces Comparison of diffusion models using different hyperparameters. Early stopping is done based on the profit using the validation set.\relax }}{57}{table.caption.34}\protected@file@percent }
|
||||
\newlabel{tab:diffusion_policy_comparison}{{13}{57}{Comparison of diffusion models using different hyperparameters. Early stopping is done based on the profit using the validation set.\relax }{table.caption.34}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces Comparison of the two samples from the model with the lowest CRPS and the model with the highest profit. \relax }}{57}{figure.caption.35}\protected@file@percent }
|
||||
\newlabel{fig:diffusion_policy_comparison_high_low_crps}{{22}{57}{Comparison of the two samples from the model with the lowest CRPS and the model with the highest profit. \relax }{figure.caption.35}{}}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {14}{\ignorespaces Comparison of the profit achieved by the baselines and the best-performing models. The improvement is calculated compared to the baseline that uses the NRV of yesterday as a prediction.\relax }}{58}{table.caption.36}\protected@file@percent }
|
||||
\newlabel{tab:policy_comparison}{{14}{58}{Comparison of the profit achieved by the baselines and the best-performing models. The improvement is calculated compared to the baseline that uses the NRV of yesterday as a prediction.\relax }{table.caption.36}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces Comparison of the profit achieved by the baselines and the best-performing models. The improvement is calculated compared to the baseline that uses the NRV of yesterday as a prediction.\relax }}{59}{figure.caption.37}\protected@file@percent }
|
||||
\newlabel{fig:profit_comparison}{{23}{59}{Comparison of the profit achieved by the baselines and the best-performing models. The improvement is calculated compared to the baseline that uses the NRV of yesterday as a prediction.\relax }{figure.caption.37}{}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {8}Conclusion}{59}{section.8}\protected@file@percent }
|
||||
\bibstyle{unsrtnat}
|
||||
\bibdata{references}
|
||||
\bibcite{commission_for_electricity_and_gas_regulation_creg_study_2023}{{1}{}{{Commission for Electricity and Gas Regulation (CREG)}}{{}}}
|
||||
\bibcite{noauthor_geliberaliseerde_nodate}{{2}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_role_nodate}{{3}{}{{noa}}{{}}}
|
||||
\bibcite{elia_tariffs_2022}{{4}{}{{Elia}}{{}}}
|
||||
\bibcite{noauthor_fcr_nodate}{{5}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_afrr_nodate}{{6}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_mfrr_nodate}{{7}{}{{noa}}{{}}}
|
||||
\bibcite{goodfellow_generative_2014}{{8}{}{{Goodfellow et~al.}}{{Goodfellow, Pouget-Abadie, Mirza, Xu, Warde-Farley, Ozair, Courville, and Bengio}}}
|
||||
\bibcite{kingma_auto-encoding_2022}{{9}{}{{Kingma and Welling}}{{}}}
|
||||
\bibcite{rezende_variational_2015}{{10}{}{{Rezende and Mohamed}}{{}}}
|
||||
\bibcite{sohl-dickstein_deep_2015}{{11}{}{{Sohl-Dickstein et~al.}}{{Sohl-Dickstein, Weiss, Maheswaranathan, and Ganguli}}}
|
||||
\bibcite{koenker_regression_1978}{{12}{}{{Koenker and Bassett}}{{}}}
|
||||
\bibcite{team_pinball_nodate}{{13}{}{{team}}{{}}}
|
||||
\bibcite{hochreiter_long_1997}{{14}{}{{Hochreiter and Schmidhuber}}{{}}}
|
||||
\bibcite{cho_learning_2014}{{15}{}{{Cho et~al.}}{{Cho, van Merriënboer, Bahdanau, and Bengio}}}
|
||||
\bibcite{ho_denoising_2020}{{16}{}{{Ho et~al.}}{{Ho, Jain, and Abbeel}}}
|
||||
\bibcite{gneiting_strictly_2007}{{17}{}{{Gneiting and Raftery}}{{}}}
|
||||
\bibcite{weron_electricity_2014}{{18}{}{{Weron}}{{}}}
|
||||
\bibcite{poggi_electricity_2023}{{19}{}{{Poggi et~al.}}{{Poggi, Di~Persio, and Ehrhardt}}}
|
||||
\bibcite{lago_forecasting_2018}{{20}{}{{Lago et~al.}}{{Lago, De~Ridder, and De~Schutter}}}
|
||||
\bibcite{hagfors_modeling_2016}{{21}{}{{Hagfors et~al.}}{{Hagfors, Bunn, Kristoffersen, Staver, and Westgaard}}}
|
||||
\bibcite{lu_scenarios_2022}{{22}{}{{Lu et~al.}}{{Lu, Qiu, Lei, and Zhu}}}
|
||||
\bibcite{dumas_deep_2022}{{23}{}{{Dumas et~al.}}{{Dumas, Wehenkel, Lanaspeze, Cornélusse, and Sutera}}}
|
||||
\bibcite{rasul_autoregressive_2021}{{24}{}{{Rasul et~al.}}{{Rasul, Seward, Schuster, and Vollgraf}}}
|
||||
\bibcite{dumas_probabilistic_2019}{{25}{}{{Dumas et~al.}}{{Dumas, Boukas, de~Villena, Mathieu, and Cornélusse}}}
|
||||
\bibcite{narajewski_probabilistic_2022}{{26}{}{{Narajewski}}{{}}}
|
||||
\bibcite{noauthor_welcome_nodate}{{27}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_imbalance_nodate}{{28}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_measured_nodate}{{29}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_photovoltaic_nodate}{{30}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_wind_nodate}{{31}{}{{noa}}{{}}}
|
||||
\bibcite{noauthor_intraday_nodate}{{32}{}{{noa}}{{}}}
|
||||
\bibcite{dhariwal_diffusion_2021}{{33}{}{{Dhariwal and Nichol}}{{}}}
|
||||
\bibcite{ho_classifier-free_2022}{{34}{}{{Ho and Salimans}}{{}}}
|
||||
\@input{sections/appendix.aux}
|
||||
\ACRO{total-barriers}{1}
|
||||
\ACRO{usage}{QR=={0}}
|
||||
\ACRO{usage}{AQR=={0}}
|
||||
\ACRO{usage}{NAQR=={1}}
|
||||
\ACRO{usage}{GRU=={0}}
|
||||
\ACRO{usage}{LSTM=={0}}
|
||||
\ACRO{usage}{GAN=={0}}
|
||||
\ACRO{usage}{CTSGAN=={0}}
|
||||
\ACRO{usage}{VAE=={0}}
|
||||
\ACRO{usage}{MLP=={0}}
|
||||
\ACRO{usage}{GP=={0}}
|
||||
\ACRO{usage}{MSE=={4}}
|
||||
\ACRO{usage}{MAE=={4}}
|
||||
\ACRO{usage}{CRPS=={2}}
|
||||
\ACRO{usage}{TSPA=={0}}
|
||||
\ACRO{usage}{PLF=={0}}
|
||||
\ACRO{usage}{CDF=={0}}
|
||||
\ACRO{usage}{QE=={0}}
|
||||
\ACRO{usage}{NRV=={12}}
|
||||
\ACRO{usage}{PV=={0}}
|
||||
\ACRO{usage}{NP=={0}}
|
||||
\ACRO{usage}{TSO=={3}}
|
||||
\ACRO{usage}{DSO=={0}}
|
||||
\ACRO{usage}{BRP=={1}}
|
||||
\ACRO{usage}{BSP=={1}}
|
||||
\ACRO{usage}{SI=={0}}
|
||||
\ACRO{usage}{FCR=={1}}
|
||||
\ACRO{usage}{aFRR=={1}}
|
||||
\ACRO{usage}{mFRR=={1}}
|
||||
\ACRO{usage}{MW=={0}}
|
||||
\ACRO{usage}{ACE=={0}}
|
||||
\ACRO{usage}{MIP=={0}}
|
||||
\ACRO{usage}{MDP=={0}}
|
||||
\ACRO{pages}{BRP=={10@1@9}}
|
||||
\ACRO{pages}{TSO=={8@1@7|12@1@11}}
|
||||
\ACRO{pages}{FCR=={12@1@11}}
|
||||
\ACRO{pages}{BSP=={12@1@11}}
|
||||
\ACRO{pages}{aFRR=={12@1@11}}
|
||||
\ACRO{pages}{mFRR=={12@1@11}}
|
||||
\ACRO{pages}{NAQR=={50@1@49}}
|
||||
\ACRO{pages}{CRPS=={49@1@48|50@1@49}}
|
||||
\ACRO{pages}{MSE=={49@1@48|50@1@49}}
|
||||
\ACRO{pages}{MAE=={49@1@48|50@1@49}}
|
||||
\ACRO{pages}{NRV=={9@1@8|54@1@53|55@1@54}}
|
||||
\gdef \@abspage@last{67}
|
||||
|
||||
@@ -1,561 +1,200 @@
|
||||
% $ biblatex auxiliary file $
|
||||
% $ biblatex bbl format version 3.2 $
|
||||
% Do not modify the above lines!
|
||||
%
|
||||
% This is an auxiliary file used by the 'biblatex' package.
|
||||
% This file may safely be deleted. It will be recreated by
|
||||
% biber as required.
|
||||
%
|
||||
\begingroup
|
||||
\makeatletter
|
||||
\@ifundefined{ver@biblatex.sty}
|
||||
{\@latex@error
|
||||
{Missing 'biblatex' package}
|
||||
{The bibliography requires the 'biblatex' package.}
|
||||
\aftergroup\endinput}
|
||||
{}
|
||||
\endgroup
|
||||
\begin{thebibliography}{34}
|
||||
\providecommand{\natexlab}[1]{#1}
|
||||
\providecommand{\url}[1]{\texttt{#1}}
|
||||
\expandafter\ifx\csname urlstyle\endcsname\relax
|
||||
\providecommand{\doi}[1]{doi: #1}\else
|
||||
\providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi
|
||||
|
||||
\bibitem[{Commission for Electricity and Gas Regulation (CREG)}()]{commission_for_electricity_and_gas_regulation_creg_study_2023}
|
||||
{Commission for Electricity and Gas Regulation (CREG)}.
|
||||
\newblock Study on the functioning and price evolution of the belgian wholesale electricity market - monitoring report 2022.
|
||||
\newblock URL \url{https://www.creg.be/sites/default/files/assets/Publications/Studies/F2537EN.pdf}.
|
||||
|
||||
\refsection{0}
|
||||
\datalist[entry]{nyt/apasortcite//global/global}
|
||||
\entry{dumas_deep_2022}{article}{}
|
||||
\name{author}{5}{}{%
|
||||
{{un=0,uniquepart=base,hash=bc1b38697de64bfe3f5e7876e531bd45}{%
|
||||
family={Dumas},
|
||||
familyi={D\bibinitperiod},
|
||||
given={Jonathan},
|
||||
giveni={J\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=8de9ff5d0722fc618c35312130499a63}{%
|
||||
family={Wehenkel},
|
||||
familyi={W\bibinitperiod},
|
||||
given={Antoine},
|
||||
giveni={A\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=26d23470f883355413d99765a97d26f9}{%
|
||||
family={Lanaspeze},
|
||||
familyi={L\bibinitperiod},
|
||||
given={Damien},
|
||||
giveni={D\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=62ac593786e28c2e56fab28d272346bf}{%
|
||||
family={Cornélusse},
|
||||
familyi={C\bibinitperiod},
|
||||
given={Bertrand},
|
||||
giveni={B\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=2b5aabf60e51678797e395af8c441fd7}{%
|
||||
family={Sutera},
|
||||
familyi={S\bibinitperiod},
|
||||
given={Antonio},
|
||||
giveni={A\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{cac0f5a33afb491da6830cd9b00071a2}
|
||||
\strng{fullhash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\strng{bibnamehash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\strng{authorbibnamehash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\strng{authornamehash}{cac0f5a33afb491da6830cd9b00071a2}
|
||||
\strng{authorfullhash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\field{sortinit}{D}
|
||||
\field{sortinithash}{6f385f66841fb5e82009dc833c761848}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{Greater direct electrification of end-use sectors with a higher share of renewables is one of the pillars to power a carbon-neutral society by 2050. However, in contrast to conventional power plants, renewable energy is subject to uncertainty raising challenges for their interaction with power systems. Scenario-based probabilistic forecasting models have become a vital tool to equip decision-makers. This paper presents to the power systems forecasting practitioners a recent deep learning technique, the normalizing flows, to produce accurate scenario-based probabilistic forecasts that are crucial to face the new challenges in power systems applications. The strength of this technique is to directly learn the stochastic multivariate distribution of the underlying process by maximizing the likelihood. Through comprehensive empirical evaluations using the open data of the Global Energy Forecasting Competition 2014, we demonstrate that this methodology is competitive with other state-of-the-art deep learning generative models: generative adversarial networks and variational autoencoders. The models producing weather-based wind, solar power, and load scenarios are properly compared in terms of forecast value by considering the case study of an energy retailer and quality using several complementary metrics. The numerical experiments are simple and easily reproducible. Thus, we hope it will encourage other forecasting practitioners to test and use normalizing flows in power system applications such as bidding on electricity markets, scheduling power systems with high renewable energy sources penetration, energy management of virtual power plan or microgrids, and unit commitment.}
|
||||
\field{issn}{03062619}
|
||||
\field{journaltitle}{Applied Energy}
|
||||
\field{langid}{english}
|
||||
\field{month}{1}
|
||||
\field{shortjournal}{Applied Energy}
|
||||
\field{shorttitle}{A deep generative model for probabilistic energy forecasting in power systems}
|
||||
\field{title}{A deep generative model for probabilistic energy forecasting in power systems: normalizing flows}
|
||||
\field{urlday}{11}
|
||||
\field{urlmonth}{10}
|
||||
\field{urlyear}{2023}
|
||||
\field{volume}{305}
|
||||
\field{year}{2022}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{117871}
|
||||
\range{pages}{1}
|
||||
\verb{doi}
|
||||
\verb 10.1016/j.apenergy.2021.117871
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb Dumas et al. - 2022 - A deep generative model for probabilistic energy f.pdf:/Users/victormylle/Zotero/storage/3CW249QI/Dumas et al. - 2022 - A deep generative model for probabilistic energy f.pdf:application/pdf
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://linkinghub.elsevier.com/retrieve/pii/S0306261921011909
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://linkinghub.elsevier.com/retrieve/pii/S0306261921011909
|
||||
\endverb
|
||||
\endentry
|
||||
\entry{lu_scenarios_2022}{article}{}
|
||||
\name{author}{4}{}{%
|
||||
{{un=0,uniquepart=base,hash=e20b6fceb410a42e1abe17804a826487}{%
|
||||
family={Lu},
|
||||
familyi={L\bibinitperiod},
|
||||
given={Xin},
|
||||
giveni={X\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=b8739ebbf3f871d471b6720a02ed541f}{%
|
||||
family={Qiu},
|
||||
familyi={Q\bibinitperiod},
|
||||
given={Jing},
|
||||
giveni={J\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=0747ee8b32f11d5702821c50e1913c80}{%
|
||||
family={Lei},
|
||||
familyi={L\bibinitperiod},
|
||||
given={Gang},
|
||||
giveni={G\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=182338f1495a183751feca529c98f0b8}{%
|
||||
family={Zhu},
|
||||
familyi={Z\bibinitperiod},
|
||||
given={Jianguo},
|
||||
giveni={J\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{81685244731524c537a08650b8b97caa}
|
||||
\strng{fullhash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\strng{bibnamehash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\strng{authorbibnamehash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\strng{authornamehash}{81685244731524c537a08650b8b97caa}
|
||||
\strng{authorfullhash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\field{sortinit}{L}
|
||||
\field{sortinithash}{7c47d417cecb1f4bd38d1825c427a61a}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{Electricity prices in spot markets are volatile and can be affected by various factors, such as generation and demand, system contingencies, local weather patterns, bidding strategies of market participants, and uncertain renewable energy outputs. Because of these factors, electricity price forecasting is challenging. This paper proposes a scenario modeling approach to improve forecasting accuracy, conditioning time series generative adversarial networks on external factors. After data pre-processing and condition selection, a conditional {TSGAN} or {CTSGAN} is designed to forecast electricity prices. Wasserstein Distance, weights limitation, and {RMSProp} optimizer are used to ensure that the {CTGAN} training process is stable. By changing the dimensionality of random noise input, the point forecasting model can be transformed into a probabilistic forecasting model. For electricity price point forecasting, the proposed {CTSGAN} model has better accuracy and has better generalization ability than the {TSGAN} and other deep learning methods. For probabilistic forecasting, the proposed {CTSGAN} model can significantly improve the continuously ranked probability score and Winkler score. The effectiveness and superiority of the proposed {CTSGAN} forecasting model are verified by case studies.}
|
||||
\field{day}{15}
|
||||
\field{issn}{0306-2619}
|
||||
\field{journaltitle}{Applied Energy}
|
||||
\field{month}{2}
|
||||
\field{shortjournal}{Applied Energy}
|
||||
\field{shorttitle}{Scenarios modelling for forecasting day-ahead electricity prices}
|
||||
\field{title}{Scenarios modelling for forecasting day-ahead electricity prices: Case studies in Australia}
|
||||
\field{urlday}{13}
|
||||
\field{urlmonth}{10}
|
||||
\field{urlyear}{2023}
|
||||
\field{volume}{308}
|
||||
\field{year}{2022}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{118296}
|
||||
\range{pages}{1}
|
||||
\verb{doi}
|
||||
\verb 10.1016/j.apenergy.2021.118296
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb Lu et al. - 2022 - Scenarios modelling for forecasting day-ahead elec.pdf:/Users/victormylle/Zotero/storage/3XL3T253/Lu et al. - 2022 - Scenarios modelling for forecasting day-ahead elec.pdf:application/pdf;ScienceDirect Snapshot:/Users/victormylle/Zotero/storage/9K2RFGGU/S0306261921015555.html:text/html
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0306261921015555
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0306261921015555
|
||||
\endverb
|
||||
\keyw{Generative adversarial networks,Conditions,Electricity Price,Point forecasting,Probabilistic forecasting}
|
||||
\endentry
|
||||
\entry{poggi_electricity_2023}{article}{}
|
||||
\name{author}{3}{}{%
|
||||
{{un=0,uniquepart=base,hash=d5449fc584ab2f2182b0b791e9e2524e}{%
|
||||
family={Poggi},
|
||||
familyi={P\bibinitperiod},
|
||||
given={Aurora},
|
||||
giveni={A\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=2263c4fd4598d3f295a8f0f20909866b}{%
|
||||
family={Di\bibnamedelima Persio},
|
||||
familyi={D\bibinitperiod\bibinitdelim P\bibinitperiod},
|
||||
given={Luca},
|
||||
giveni={L\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=06162f840633e2adae140efa3535ba7a}{%
|
||||
family={Ehrhardt},
|
||||
familyi={E\bibinitperiod},
|
||||
given={Matthias},
|
||||
giveni={M\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{29cf9f4a8a7a7514cf77120f6bd399d1}
|
||||
\strng{fullhash}{7f87567729d3046538f23b0d733313fe}
|
||||
\strng{bibnamehash}{7f87567729d3046538f23b0d733313fe}
|
||||
\strng{authorbibnamehash}{7f87567729d3046538f23b0d733313fe}
|
||||
\strng{authornamehash}{29cf9f4a8a7a7514cf77120f6bd399d1}
|
||||
\strng{authorfullhash}{7f87567729d3046538f23b0d733313fe}
|
||||
\field{sortinit}{P}
|
||||
\field{sortinithash}{ff3bcf24f47321b42cb156c2cc8a8422}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{Our research involves analyzing the latest models used for electricity price forecasting, which include both traditional inferential statistical methods and newer deep learning techniques. Through our analysis of historical data and the use of multiple weekday dummies, we have proposed an innovative solution for forecasting electricity spot prices. This solution involves breaking down the spot price series into two components: a seasonal trend component and a stochastic component. By utilizing this approach, we are able to provide highly accurate predictions for all considered time frames.}
|
||||
\field{issn}{2673-9909}
|
||||
\field{journaltitle}{{AppliedMath}}
|
||||
\field{langid}{english}
|
||||
\field{month}{6}
|
||||
\field{note}{Number: 2 Publisher: Multidisciplinary Digital Publishing Institute}
|
||||
\field{number}{2}
|
||||
\field{shorttitle}{Electricity Price Forecasting via Statistical and Deep Learning Approaches}
|
||||
\field{title}{Electricity Price Forecasting via Statistical and Deep Learning Approaches: The German Case}
|
||||
\field{urlday}{2}
|
||||
\field{urlmonth}{5}
|
||||
\field{urlyear}{2024}
|
||||
\field{volume}{3}
|
||||
\field{year}{2023}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{316\bibrangedash 342}
|
||||
\range{pages}{27}
|
||||
\verb{doi}
|
||||
\verb 10.3390/appliedmath3020018
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb Full Text PDF:/Users/victormylle/Zotero/storage/3IR29RU3/Poggi et al. - 2023 - Electricity Price Forecasting via Statistical and .pdf:application/pdf
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://www.mdpi.com/2673-9909/3/2/18
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://www.mdpi.com/2673-9909/3/2/18
|
||||
\endverb
|
||||
\keyw{autoregressive,deep learning,electricity price forecasting,machine learning,neural network,statistical method,univariate model}
|
||||
\endentry
|
||||
\entry{weron_electricity_2014}{article}{}
|
||||
\name{author}{1}{}{%
|
||||
{{un=0,uniquepart=base,hash=e1f0ef6630db56bf45bb6ba2fbf8f108}{%
|
||||
family={Weron},
|
||||
familyi={W\bibinitperiod},
|
||||
given={Rafał},
|
||||
giveni={R\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{fullhash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{bibnamehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{authorbibnamehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{authornamehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{authorfullhash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\field{sortinit}{W}
|
||||
\field{sortinithash}{4315d78024d0cea9b57a0c6f0e35ed0d}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{A variety of methods and ideas have been tried for electricity price forecasting ({EPF}) over the last 15 years, with varying degrees of success. This review article aims to explain the complexity of available solutions, their strengths and weaknesses, and the opportunities and threats that the forecasting tools offer or that may be encountered. The paper also looks ahead and speculates on the directions {EPF} will or should take in the next decade or so. In particular, it postulates the need for objective comparative {EPF} studies involving (i) the same datasets, (ii) the same robust error evaluation procedures, and (iii) statistical testing of the significance of one model’s outperformance of another.}
|
||||
\field{day}{1}
|
||||
\field{issn}{0169-2070}
|
||||
\field{journaltitle}{International Journal of Forecasting}
|
||||
\field{month}{10}
|
||||
\field{number}{4}
|
||||
\field{shortjournal}{International Journal of Forecasting}
|
||||
\field{shorttitle}{Electricity price forecasting}
|
||||
\field{title}{Electricity price forecasting: A review of the state-of-the-art with a look into the future}
|
||||
\field{urlday}{2}
|
||||
\field{urlmonth}{5}
|
||||
\field{urlyear}{2024}
|
||||
\field{volume}{30}
|
||||
\field{year}{2014}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{1030\bibrangedash 1081}
|
||||
\range{pages}{52}
|
||||
\verb{doi}
|
||||
\verb 10.1016/j.ijforecast.2014.08.008
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb ScienceDirect Snapshot:/Users/victormylle/Zotero/storage/DDGF263F/S0169207014001083.html:text/html
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0169207014001083
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0169207014001083
|
||||
\endverb
|
||||
\keyw{Autoregression,Day-ahead market,Electricity price forecasting,Factor model,Forecast combination,Neural network,Probabilistic forecast,Seasonality}
|
||||
\endentry
|
||||
\enddatalist
|
||||
\datalist[entry]{nyt/global//global/global}
|
||||
\entry{dumas_deep_2022}{article}{}
|
||||
\name{author}{5}{}{%
|
||||
{{un=0,uniquepart=base,hash=bc1b38697de64bfe3f5e7876e531bd45}{%
|
||||
family={Dumas},
|
||||
familyi={D\bibinitperiod},
|
||||
given={Jonathan},
|
||||
giveni={J\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=8de9ff5d0722fc618c35312130499a63}{%
|
||||
family={Wehenkel},
|
||||
familyi={W\bibinitperiod},
|
||||
given={Antoine},
|
||||
giveni={A\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=26d23470f883355413d99765a97d26f9}{%
|
||||
family={Lanaspeze},
|
||||
familyi={L\bibinitperiod},
|
||||
given={Damien},
|
||||
giveni={D\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=62ac593786e28c2e56fab28d272346bf}{%
|
||||
family={Cornélusse},
|
||||
familyi={C\bibinitperiod},
|
||||
given={Bertrand},
|
||||
giveni={B\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=2b5aabf60e51678797e395af8c441fd7}{%
|
||||
family={Sutera},
|
||||
familyi={S\bibinitperiod},
|
||||
given={Antonio},
|
||||
giveni={A\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{cac0f5a33afb491da6830cd9b00071a2}
|
||||
\strng{fullhash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\strng{bibnamehash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\strng{authorbibnamehash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\strng{authornamehash}{cac0f5a33afb491da6830cd9b00071a2}
|
||||
\strng{authorfullhash}{176facf650dcf7220eec24af7e81dc53}
|
||||
\field{sortinit}{D}
|
||||
\field{sortinithash}{6f385f66841fb5e82009dc833c761848}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{Greater direct electrification of end-use sectors with a higher share of renewables is one of the pillars to power a carbon-neutral society by 2050. However, in contrast to conventional power plants, renewable energy is subject to uncertainty raising challenges for their interaction with power systems. Scenario-based probabilistic forecasting models have become a vital tool to equip decision-makers. This paper presents to the power systems forecasting practitioners a recent deep learning technique, the normalizing flows, to produce accurate scenario-based probabilistic forecasts that are crucial to face the new challenges in power systems applications. The strength of this technique is to directly learn the stochastic multivariate distribution of the underlying process by maximizing the likelihood. Through comprehensive empirical evaluations using the open data of the Global Energy Forecasting Competition 2014, we demonstrate that this methodology is competitive with other state-of-the-art deep learning generative models: generative adversarial networks and variational autoencoders. The models producing weather-based wind, solar power, and load scenarios are properly compared in terms of forecast value by considering the case study of an energy retailer and quality using several complementary metrics. The numerical experiments are simple and easily reproducible. Thus, we hope it will encourage other forecasting practitioners to test and use normalizing flows in power system applications such as bidding on electricity markets, scheduling power systems with high renewable energy sources penetration, energy management of virtual power plan or microgrids, and unit commitment.}
|
||||
\field{issn}{03062619}
|
||||
\field{journaltitle}{Applied Energy}
|
||||
\field{langid}{english}
|
||||
\field{month}{1}
|
||||
\field{shortjournal}{Applied Energy}
|
||||
\field{shorttitle}{A deep generative model for probabilistic energy forecasting in power systems}
|
||||
\field{title}{A deep generative model for probabilistic energy forecasting in power systems: normalizing flows}
|
||||
\field{urlday}{11}
|
||||
\field{urlmonth}{10}
|
||||
\field{urlyear}{2023}
|
||||
\field{volume}{305}
|
||||
\field{year}{2022}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{117871}
|
||||
\range{pages}{1}
|
||||
\verb{doi}
|
||||
\verb 10.1016/j.apenergy.2021.117871
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb Dumas et al. - 2022 - A deep generative model for probabilistic energy f.pdf:/Users/victormylle/Zotero/storage/3CW249QI/Dumas et al. - 2022 - A deep generative model for probabilistic energy f.pdf:application/pdf
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://linkinghub.elsevier.com/retrieve/pii/S0306261921011909
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://linkinghub.elsevier.com/retrieve/pii/S0306261921011909
|
||||
\endverb
|
||||
\endentry
|
||||
\entry{lu_scenarios_2022}{article}{}
|
||||
\name{author}{4}{}{%
|
||||
{{un=0,uniquepart=base,hash=e20b6fceb410a42e1abe17804a826487}{%
|
||||
family={Lu},
|
||||
familyi={L\bibinitperiod},
|
||||
given={Xin},
|
||||
giveni={X\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=b8739ebbf3f871d471b6720a02ed541f}{%
|
||||
family={Qiu},
|
||||
familyi={Q\bibinitperiod},
|
||||
given={Jing},
|
||||
giveni={J\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=0747ee8b32f11d5702821c50e1913c80}{%
|
||||
family={Lei},
|
||||
familyi={L\bibinitperiod},
|
||||
given={Gang},
|
||||
giveni={G\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=182338f1495a183751feca529c98f0b8}{%
|
||||
family={Zhu},
|
||||
familyi={Z\bibinitperiod},
|
||||
given={Jianguo},
|
||||
giveni={J\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{81685244731524c537a08650b8b97caa}
|
||||
\strng{fullhash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\strng{bibnamehash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\strng{authorbibnamehash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\strng{authornamehash}{81685244731524c537a08650b8b97caa}
|
||||
\strng{authorfullhash}{eb24983b890cffceb6c682e309bc533b}
|
||||
\field{sortinit}{L}
|
||||
\field{sortinithash}{7c47d417cecb1f4bd38d1825c427a61a}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{Electricity prices in spot markets are volatile and can be affected by various factors, such as generation and demand, system contingencies, local weather patterns, bidding strategies of market participants, and uncertain renewable energy outputs. Because of these factors, electricity price forecasting is challenging. This paper proposes a scenario modeling approach to improve forecasting accuracy, conditioning time series generative adversarial networks on external factors. After data pre-processing and condition selection, a conditional {TSGAN} or {CTSGAN} is designed to forecast electricity prices. Wasserstein Distance, weights limitation, and {RMSProp} optimizer are used to ensure that the {CTGAN} training process is stable. By changing the dimensionality of random noise input, the point forecasting model can be transformed into a probabilistic forecasting model. For electricity price point forecasting, the proposed {CTSGAN} model has better accuracy and has better generalization ability than the {TSGAN} and other deep learning methods. For probabilistic forecasting, the proposed {CTSGAN} model can significantly improve the continuously ranked probability score and Winkler score. The effectiveness and superiority of the proposed {CTSGAN} forecasting model are verified by case studies.}
|
||||
\field{day}{15}
|
||||
\field{issn}{0306-2619}
|
||||
\field{journaltitle}{Applied Energy}
|
||||
\field{month}{2}
|
||||
\field{shortjournal}{Applied Energy}
|
||||
\field{shorttitle}{Scenarios modelling for forecasting day-ahead electricity prices}
|
||||
\field{title}{Scenarios modelling for forecasting day-ahead electricity prices: Case studies in Australia}
|
||||
\field{urlday}{13}
|
||||
\field{urlmonth}{10}
|
||||
\field{urlyear}{2023}
|
||||
\field{volume}{308}
|
||||
\field{year}{2022}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{118296}
|
||||
\range{pages}{1}
|
||||
\verb{doi}
|
||||
\verb 10.1016/j.apenergy.2021.118296
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb Lu et al. - 2022 - Scenarios modelling for forecasting day-ahead elec.pdf:/Users/victormylle/Zotero/storage/3XL3T253/Lu et al. - 2022 - Scenarios modelling for forecasting day-ahead elec.pdf:application/pdf;ScienceDirect Snapshot:/Users/victormylle/Zotero/storage/9K2RFGGU/S0306261921015555.html:text/html
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0306261921015555
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0306261921015555
|
||||
\endverb
|
||||
\keyw{Generative adversarial networks,Conditions,Electricity Price,Point forecasting,Probabilistic forecasting}
|
||||
\endentry
|
||||
\entry{poggi_electricity_2023}{article}{}
|
||||
\name{author}{3}{}{%
|
||||
{{un=0,uniquepart=base,hash=d5449fc584ab2f2182b0b791e9e2524e}{%
|
||||
family={Poggi},
|
||||
familyi={P\bibinitperiod},
|
||||
given={Aurora},
|
||||
giveni={A\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=2263c4fd4598d3f295a8f0f20909866b}{%
|
||||
family={Di\bibnamedelima Persio},
|
||||
familyi={D\bibinitperiod\bibinitdelim P\bibinitperiod},
|
||||
given={Luca},
|
||||
giveni={L\bibinitperiod},
|
||||
givenun=0}}%
|
||||
{{un=0,uniquepart=base,hash=06162f840633e2adae140efa3535ba7a}{%
|
||||
family={Ehrhardt},
|
||||
familyi={E\bibinitperiod},
|
||||
given={Matthias},
|
||||
giveni={M\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{29cf9f4a8a7a7514cf77120f6bd399d1}
|
||||
\strng{fullhash}{7f87567729d3046538f23b0d733313fe}
|
||||
\strng{bibnamehash}{7f87567729d3046538f23b0d733313fe}
|
||||
\strng{authorbibnamehash}{7f87567729d3046538f23b0d733313fe}
|
||||
\strng{authornamehash}{29cf9f4a8a7a7514cf77120f6bd399d1}
|
||||
\strng{authorfullhash}{7f87567729d3046538f23b0d733313fe}
|
||||
\field{sortinit}{P}
|
||||
\field{sortinithash}{ff3bcf24f47321b42cb156c2cc8a8422}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{Our research involves analyzing the latest models used for electricity price forecasting, which include both traditional inferential statistical methods and newer deep learning techniques. Through our analysis of historical data and the use of multiple weekday dummies, we have proposed an innovative solution for forecasting electricity spot prices. This solution involves breaking down the spot price series into two components: a seasonal trend component and a stochastic component. By utilizing this approach, we are able to provide highly accurate predictions for all considered time frames.}
|
||||
\field{issn}{2673-9909}
|
||||
\field{journaltitle}{{AppliedMath}}
|
||||
\field{langid}{english}
|
||||
\field{month}{6}
|
||||
\field{note}{Number: 2 Publisher: Multidisciplinary Digital Publishing Institute}
|
||||
\field{number}{2}
|
||||
\field{shorttitle}{Electricity Price Forecasting via Statistical and Deep Learning Approaches}
|
||||
\field{title}{Electricity Price Forecasting via Statistical and Deep Learning Approaches: The German Case}
|
||||
\field{urlday}{2}
|
||||
\field{urlmonth}{5}
|
||||
\field{urlyear}{2024}
|
||||
\field{volume}{3}
|
||||
\field{year}{2023}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{316\bibrangedash 342}
|
||||
\range{pages}{27}
|
||||
\verb{doi}
|
||||
\verb 10.3390/appliedmath3020018
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb Full Text PDF:/Users/victormylle/Zotero/storage/3IR29RU3/Poggi et al. - 2023 - Electricity Price Forecasting via Statistical and .pdf:application/pdf
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://www.mdpi.com/2673-9909/3/2/18
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://www.mdpi.com/2673-9909/3/2/18
|
||||
\endverb
|
||||
\keyw{autoregressive,deep learning,electricity price forecasting,machine learning,neural network,statistical method,univariate model}
|
||||
\endentry
|
||||
\entry{weron_electricity_2014}{article}{}
|
||||
\name{author}{1}{}{%
|
||||
{{un=0,uniquepart=base,hash=e1f0ef6630db56bf45bb6ba2fbf8f108}{%
|
||||
family={Weron},
|
||||
familyi={W\bibinitperiod},
|
||||
given={Rafał},
|
||||
giveni={R\bibinitperiod},
|
||||
givenun=0}}%
|
||||
}
|
||||
\strng{namehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{fullhash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{bibnamehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{authorbibnamehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{authornamehash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\strng{authorfullhash}{e1f0ef6630db56bf45bb6ba2fbf8f108}
|
||||
\field{sortinit}{W}
|
||||
\field{sortinithash}{4315d78024d0cea9b57a0c6f0e35ed0d}
|
||||
\field{extradatescope}{labelyear}
|
||||
\field{labeldatesource}{}
|
||||
\true{uniqueprimaryauthor}
|
||||
\field{labelnamesource}{author}
|
||||
\field{labeltitlesource}{shorttitle}
|
||||
\field{abstract}{A variety of methods and ideas have been tried for electricity price forecasting ({EPF}) over the last 15 years, with varying degrees of success. This review article aims to explain the complexity of available solutions, their strengths and weaknesses, and the opportunities and threats that the forecasting tools offer or that may be encountered. The paper also looks ahead and speculates on the directions {EPF} will or should take in the next decade or so. In particular, it postulates the need for objective comparative {EPF} studies involving (i) the same datasets, (ii) the same robust error evaluation procedures, and (iii) statistical testing of the significance of one model’s outperformance of another.}
|
||||
\field{day}{1}
|
||||
\field{issn}{0169-2070}
|
||||
\field{journaltitle}{International Journal of Forecasting}
|
||||
\field{month}{10}
|
||||
\field{number}{4}
|
||||
\field{shortjournal}{International Journal of Forecasting}
|
||||
\field{shorttitle}{Electricity price forecasting}
|
||||
\field{title}{Electricity price forecasting: A review of the state-of-the-art with a look into the future}
|
||||
\field{urlday}{2}
|
||||
\field{urlmonth}{5}
|
||||
\field{urlyear}{2024}
|
||||
\field{volume}{30}
|
||||
\field{year}{2014}
|
||||
\field{dateera}{ce}
|
||||
\field{urldateera}{ce}
|
||||
\field{pages}{1030\bibrangedash 1081}
|
||||
\range{pages}{52}
|
||||
\verb{doi}
|
||||
\verb 10.1016/j.ijforecast.2014.08.008
|
||||
\endverb
|
||||
\verb{file}
|
||||
\verb ScienceDirect Snapshot:/Users/victormylle/Zotero/storage/DDGF263F/S0169207014001083.html:text/html
|
||||
\endverb
|
||||
\verb{urlraw}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0169207014001083
|
||||
\endverb
|
||||
\verb{url}
|
||||
\verb https://www.sciencedirect.com/science/article/pii/S0169207014001083
|
||||
\endverb
|
||||
\keyw{Autoregression,Day-ahead market,Electricity price forecasting,Factor model,Forecast combination,Neural network,Probabilistic forecast,Seasonality}
|
||||
\endentry
|
||||
\enddatalist
|
||||
\endrefsection
|
||||
\endinput
|
||||
\bibitem[noa({\natexlab{a}})]{noauthor_geliberaliseerde_nodate}
|
||||
De geliberaliseerde elektriciteitsmarkt omvat vele partijen die allen samen moeten werken en tegelijkertijd proberen winst te maken. hieronder volgt een..., {\natexlab{a}}.
|
||||
\newblock URL \url{https://www.next-kraftwerke.be/nl/weten/spelers-energiemarkt}.
|
||||
|
||||
\bibitem[noa({\natexlab{b}})]{noauthor_role_nodate}
|
||||
Role of {BRP}, {\natexlab{b}}.
|
||||
\newblock URL \url{https://www.elia.be/en/electricity-market-and-system/role-of-brp}.
|
||||
|
||||
\bibitem[{Elia}()]{elia_tariffs_2022}
|
||||
{Elia}.
|
||||
\newblock Tariffs for maintaining and restoring the residual balance of individual access responsible parties.
|
||||
\newblock URL \url{https://www.elia.be/-/media/project/elia/elia-site/customers/tarrifs-and-invoicing/tariffs-and-invoicing/en/grille-tarifaire-desequilibre-2022-en-v20220214s.pdf}.
|
||||
|
||||
\bibitem[noa({\natexlab{c}})]{noauthor_fcr_nodate}
|
||||
{FCR}, {\natexlab{c}}.
|
||||
\newblock URL \url{https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/fcr}.
|
||||
|
||||
\bibitem[noa({\natexlab{d}})]{noauthor_afrr_nodate}
|
||||
{aFRR}, {\natexlab{d}}.
|
||||
\newblock URL \url{https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/afrr}.
|
||||
|
||||
\bibitem[noa({\natexlab{e}})]{noauthor_mfrr_nodate}
|
||||
{mFRR}, {\natexlab{e}}.
|
||||
\newblock URL \url{https://www.elia.be/en/electricity-market-and-system/system-services/keeping-the-balance/mfrr}.
|
||||
|
||||
\bibitem[Goodfellow et~al.()Goodfellow, Pouget-Abadie, Mirza, Xu, Warde-Farley, Ozair, Courville, and Bengio]{goodfellow_generative_2014}
|
||||
Ian~J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, and Yoshua Bengio.
|
||||
\newblock Generative adversarial networks.
|
||||
\newblock URL \url{http://arxiv.org/abs/1406.2661}.
|
||||
|
||||
\bibitem[Kingma and Welling()]{kingma_auto-encoding_2022}
|
||||
Diederik~P. Kingma and Max Welling.
|
||||
\newblock Auto-encoding variational bayes.
|
||||
\newblock URL \url{http://arxiv.org/abs/1312.6114}.
|
||||
|
||||
\bibitem[Rezende and Mohamed()]{rezende_variational_2015}
|
||||
Danilo Rezende and Shakir Mohamed.
|
||||
\newblock Variational inference with normalizing flows.
|
||||
\newblock In Francis Bach and David Blei, editors, \emph{Proceedings of the 32nd International Conference on Machine Learning}, volume~37 of \emph{Proceedings of Machine Learning Research}, pages 1530--1538. {PMLR}.
|
||||
\newblock URL \url{https://proceedings.mlr.press/v37/rezende15.html}.
|
||||
|
||||
\bibitem[Sohl-Dickstein et~al.()Sohl-Dickstein, Weiss, Maheswaranathan, and Ganguli]{sohl-dickstein_deep_2015}
|
||||
Jascha Sohl-Dickstein, Eric~A. Weiss, Niru Maheswaranathan, and Surya Ganguli.
|
||||
\newblock Deep unsupervised learning using nonequilibrium thermodynamics.
|
||||
\newblock URL \url{http://arxiv.org/abs/1503.03585}.
|
||||
|
||||
\bibitem[Koenker and Bassett()]{koenker_regression_1978}
|
||||
Roger Koenker and Gilbert Bassett.
|
||||
\newblock Regression quantiles.
|
||||
\newblock 46\penalty0 (1):\penalty0 33--50.
|
||||
\newblock ISSN 0012-9682.
|
||||
\newblock \doi{10.2307/1913643}.
|
||||
\newblock URL \url{https://www.jstor.org/stable/1913643}.
|
||||
\newblock Publisher: [Wiley, Econometric Society].
|
||||
|
||||
\bibitem[team()]{team_pinball_nodate}
|
||||
Lokad team.
|
||||
\newblock Pinball loss function definition.
|
||||
\newblock URL \url{https://www.lokad.com/pinball-loss-function-definition/}.
|
||||
|
||||
\bibitem[Hochreiter and Schmidhuber()]{hochreiter_long_1997}
|
||||
Sepp Hochreiter and Jürgen Schmidhuber.
|
||||
\newblock Long short-term memory.
|
||||
\newblock 9\penalty0 (8):\penalty0 1735--1780.
|
||||
\newblock \doi{10.1162/neco.1997.9.8.1735}.
|
||||
\newblock Publisher: {MIT} Press.
|
||||
|
||||
\bibitem[Cho et~al.()Cho, van Merriënboer, Bahdanau, and Bengio]{cho_learning_2014}
|
||||
Kyunghyun Cho, Bart van Merriënboer, Dzmitry Bahdanau, and Yoshua Bengio.
|
||||
\newblock Learning phrase representations using {RNN} encoder-decoder for statistical machine translation.
|
||||
\newblock In \emph{Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing ({EMNLP})}, pages 1724--1734. Association for Computational Linguistics.
|
||||
\newblock \doi{10.3115/v1/D14-1179}.
|
||||
|
||||
\bibitem[Ho et~al.()Ho, Jain, and Abbeel]{ho_denoising_2020}
|
||||
Jonathan Ho, Ajay Jain, and Pieter Abbeel.
|
||||
\newblock Denoising diffusion probabilistic models.
|
||||
\newblock URL \url{http://arxiv.org/abs/2006.11239}.
|
||||
|
||||
\bibitem[Gneiting and Raftery()]{gneiting_strictly_2007}
|
||||
Tilmann Gneiting and Adrian~E Raftery.
|
||||
\newblock Strictly proper scoring rules, prediction, and estimation.
|
||||
\newblock 102\penalty0 (477):\penalty0 359--378.
|
||||
\newblock ISSN 0162-1459, 1537-274X.
|
||||
\newblock \doi{10.1198/016214506000001437}.
|
||||
\newblock URL \url{http://www.tandfonline.com/doi/abs/10.1198/016214506000001437}.
|
||||
|
||||
\bibitem[Weron()]{weron_electricity_2014}
|
||||
Rafał Weron.
|
||||
\newblock Electricity price forecasting: A review of the state-of-the-art with a look into the future.
|
||||
\newblock 30\penalty0 (4):\penalty0 1030--1081.
|
||||
\newblock ISSN 0169-2070.
|
||||
\newblock \doi{10.1016/j.ijforecast.2014.08.008}.
|
||||
\newblock URL \url{https://www.sciencedirect.com/science/article/pii/S0169207014001083}.
|
||||
|
||||
\bibitem[Poggi et~al.()Poggi, Di~Persio, and Ehrhardt]{poggi_electricity_2023}
|
||||
Aurora Poggi, Luca Di~Persio, and Matthias Ehrhardt.
|
||||
\newblock Electricity price forecasting via statistical and deep learning approaches: The german case.
|
||||
\newblock 3\penalty0 (2):\penalty0 316--342.
|
||||
\newblock ISSN 2673-9909.
|
||||
\newblock \doi{10.3390/appliedmath3020018}.
|
||||
\newblock URL \url{https://www.mdpi.com/2673-9909/3/2/18}.
|
||||
\newblock Number: 2 Publisher: Multidisciplinary Digital Publishing Institute.
|
||||
|
||||
\bibitem[Lago et~al.()Lago, De~Ridder, and De~Schutter]{lago_forecasting_2018}
|
||||
Jesus Lago, Fjo De~Ridder, and Bart De~Schutter.
|
||||
\newblock Forecasting spot electricity prices: Deep learning approaches and empirical comparison of traditional algorithms.
|
||||
\newblock 221:\penalty0 386--405.
|
||||
\newblock ISSN 0306-2619.
|
||||
\newblock \doi{10.1016/j.apenergy.2018.02.069}.
|
||||
\newblock URL \url{https://www.sciencedirect.com/science/article/pii/S030626191830196X}.
|
||||
|
||||
\bibitem[Hagfors et~al.()Hagfors, Bunn, Kristoffersen, Staver, and Westgaard]{hagfors_modeling_2016}
|
||||
Lars~Ivar Hagfors, Derek Bunn, Eline Kristoffersen, Tiril~Toftdahl Staver, and Sjur Westgaard.
|
||||
\newblock Modeling the {UK} electricity price distributions using quantile regression.
|
||||
\newblock 102:\penalty0 231--243.
|
||||
\newblock ISSN 0360-5442.
|
||||
\newblock \doi{10.1016/j.energy.2016.02.025}.
|
||||
\newblock URL \url{https://www.sciencedirect.com/science/article/pii/S0360544216300688}.
|
||||
|
||||
\bibitem[Lu et~al.()Lu, Qiu, Lei, and Zhu]{lu_scenarios_2022}
|
||||
Xin Lu, Jing Qiu, Gang Lei, and Jianguo Zhu.
|
||||
\newblock Scenarios modelling for forecasting day-ahead electricity prices: Case studies in australia.
|
||||
\newblock 308:\penalty0 118296.
|
||||
\newblock ISSN 0306-2619.
|
||||
\newblock \doi{10.1016/j.apenergy.2021.118296}.
|
||||
\newblock URL \url{https://www.sciencedirect.com/science/article/pii/S0306261921015555}.
|
||||
|
||||
\bibitem[Dumas et~al.({\natexlab{a}})Dumas, Wehenkel, Lanaspeze, Cornélusse, and Sutera]{dumas_deep_2022}
|
||||
Jonathan Dumas, Antoine Wehenkel, Damien Lanaspeze, Bertrand Cornélusse, and Antonio Sutera.
|
||||
\newblock A deep generative model for probabilistic energy forecasting in power systems: normalizing flows.
|
||||
\newblock 305:\penalty0 117871, {\natexlab{a}}.
|
||||
\newblock ISSN 03062619.
|
||||
\newblock \doi{10.1016/j.apenergy.2021.117871}.
|
||||
\newblock URL \url{https://linkinghub.elsevier.com/retrieve/pii/S0306261921011909}.
|
||||
|
||||
\bibitem[Rasul et~al.()Rasul, Seward, Schuster, and Vollgraf]{rasul_autoregressive_2021}
|
||||
Kashif Rasul, Calvin Seward, Ingmar Schuster, and Roland Vollgraf.
|
||||
\newblock Autoregressive denoising diffusion models for multivariate probabilistic time series forecasting.
|
||||
\newblock URL \url{http://arxiv.org/abs/2101.12072}.
|
||||
|
||||
\bibitem[Dumas et~al.({\natexlab{b}})Dumas, Boukas, de~Villena, Mathieu, and Cornélusse]{dumas_probabilistic_2019}
|
||||
Jonathan Dumas, Ioannis Boukas, Miguel~Manuel de~Villena, Sébastien Mathieu, and Bertrand Cornélusse.
|
||||
\newblock Probabilistic forecasting of imbalance prices in the belgian context.
|
||||
\newblock In \emph{2019 16th International Conference on the European Energy Market ({EEM})}, pages 1--7, {\natexlab{b}}.
|
||||
\newblock \doi{10.1109/EEM.2019.8916375}.
|
||||
\newblock URL \url{http://arxiv.org/abs/2106.07361}.
|
||||
|
||||
\bibitem[Narajewski()]{narajewski_probabilistic_2022}
|
||||
Michał Narajewski.
|
||||
\newblock Probabilistic forecasting of german electricity imbalance prices.
|
||||
\newblock URL \url{http://arxiv.org/abs/2205.11439}.
|
||||
|
||||
\bibitem[noa({\natexlab{f}})]{noauthor_welcome_nodate}
|
||||
Welcome — elia open data portal, {\natexlab{f}}.
|
||||
\newblock URL \url{https://opendata.elia.be/pages/home/}.
|
||||
|
||||
\bibitem[noa({\natexlab{g}})]{noauthor_imbalance_nodate}
|
||||
Imbalance prices per quarter-hour (historical data), {\natexlab{g}}.
|
||||
\newblock URL \url{https://opendata.elia.be/explore/dataset/ods047/information/?sort=datetime}.
|
||||
|
||||
\bibitem[noa({\natexlab{h}})]{noauthor_measured_nodate}
|
||||
Measured and forecasted total load on the belgian grid (historical data), {\natexlab{h}}.
|
||||
\newblock URL \url{https://opendata.elia.be/explore/dataset/ods001/table/?sort=datetime}.
|
||||
|
||||
\bibitem[noa({\natexlab{i}})]{noauthor_photovoltaic_nodate}
|
||||
Photovoltaic power production estimation and forecast on belgian grid (historical), {\natexlab{i}}.
|
||||
\newblock URL \url{https://opendata.elia.be/explore/dataset/ods032/table/?sort=datetime}.
|
||||
|
||||
\bibitem[noa({\natexlab{j}})]{noauthor_wind_nodate}
|
||||
Wind power production estimation and forecast on belgian grid (historical), {\natexlab{j}}.
|
||||
\newblock URL \url{https://opendata.elia.be/explore/dataset/ods031/information/}.
|
||||
|
||||
\bibitem[noa({\natexlab{k}})]{noauthor_intraday_nodate}
|
||||
Intraday implicit net position (belgium's balance), {\natexlab{k}}.
|
||||
\newblock URL \url{https://opendata.elia.be/explore/dataset/ods022/information/?sort=datetime}.
|
||||
|
||||
\bibitem[Dhariwal and Nichol()]{dhariwal_diffusion_2021}
|
||||
Prafulla Dhariwal and Alex Nichol.
|
||||
\newblock Diffusion models beat {GANs} on image synthesis.
|
||||
\newblock URL \url{http://arxiv.org/abs/2105.05233}.
|
||||
\newblock version: 4.
|
||||
|
||||
\bibitem[Ho and Salimans()]{ho_classifier-free_2022}
|
||||
Jonathan Ho and Tim Salimans.
|
||||
\newblock Classifier-free diffusion guidance.
|
||||
\newblock URL \url{http://arxiv.org/abs/2207.12598}.
|
||||
|
||||
\end{thebibliography}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
\BOOKMARK [1][-]{section.1}{\376\377\000A\000b\000s\000t\000r\000a\000c\000t}{}% 1
|
||||
\BOOKMARK [1][-]{section.2}{\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n}{}% 2
|
||||
\BOOKMARK [1][-]{section.3}{\376\377\000E\000l\000e\000c\000t\000r\000i\000c\000i\000t\000y\000\040\000m\000a\000r\000k\000e\000t}{}% 3
|
||||
\BOOKMARK [1][-]{section.4}{\376\377\000G\000e\000n\000e\000r\000a\000t\000i\000v\000e\000\040\000m\000o\000d\000e\000l\000i\000n\000g}{}% 4
|
||||
\BOOKMARK [2][-]{subsection.4.1}{\376\377\000Q\000u\000a\000n\000t\000i\000l\000e\000\040\000R\000e\000g\000r\000e\000s\000s\000i\000o\000n}{section.4}% 5
|
||||
\BOOKMARK [2][-]{subsection.4.2}{\376\377\000A\000u\000t\000o\000r\000e\000g\000r\000e\000s\000s\000i\000v\000e\000\040\000v\000s\000\040\000N\000o\000n\000-\000A\000u\000t\000o\000r\000e\000g\000r\000e\000s\000s\000i\000v\000e\000\040\000m\000o\000d\000e\000l\000s}{section.4}% 6
|
||||
\BOOKMARK [2][-]{subsection.4.3}{\376\377\000M\000o\000d\000e\000l\000\040\000T\000y\000p\000e\000s}{section.4}% 7
|
||||
\BOOKMARK [3][-]{subsubsection.4.3.1}{\376\377\000L\000i\000n\000e\000a\000r\000\040\000M\000o\000d\000e\000l}{subsection.4.3}% 8
|
||||
\BOOKMARK [3][-]{subsubsection.4.3.2}{\376\377\000N\000o\000n\000-\000L\000i\000n\000e\000a\000r\000\040\000M\000o\000d\000e\000l}{subsection.4.3}% 9
|
||||
\BOOKMARK [3][-]{subsubsection.4.3.3}{\376\377\000R\000e\000c\000u\000r\000r\000e\000n\000t\000\040\000N\000e\000u\000r\000a\000l\000\040\000N\000e\000t\000w\000o\000r\000k\000\040\000\050\000R\000N\000N\000\051}{subsection.4.3}% 10
|
||||
\BOOKMARK [2][-]{subsection.4.4}{\376\377\000D\000i\000f\000f\000u\000s\000i\000o\000n\000\040\000m\000o\000d\000e\000l\000s}{section.4}% 11
|
||||
\BOOKMARK [3][-]{subsubsection.4.4.1}{\376\377\000O\000v\000e\000r\000v\000i\000e\000w}{subsection.4.4}% 12
|
||||
\BOOKMARK [3][-]{subsubsection.4.4.2}{\376\377\000A\000p\000p\000l\000i\000c\000a\000t\000i\000o\000n\000s}{subsection.4.4}% 13
|
||||
\BOOKMARK [3][-]{subsubsection.4.4.3}{\376\377\000G\000e\000n\000e\000r\000a\000t\000i\000o\000n\000\040\000p\000r\000o\000c\000e\000s\000s}{subsection.4.4}% 14
|
||||
\BOOKMARK [2][-]{subsection.4.5}{\376\377\000E\000v\000a\000l\000u\000a\000t\000i\000o\000n}{section.4}% 15
|
||||
\BOOKMARK [1][-]{section.5}{\376\377\000B\000a\000t\000t\000e\000r\000y\000\040\000O\000p\000t\000i\000m\000i\000z\000a\000t\000i\000o\000n\000\040\000P\000o\000l\000i\000c\000i\000e\000s}{}% 16
|
||||
\BOOKMARK [2][-]{subsection.5.1}{\376\377\000B\000a\000s\000e\000l\000i\000n\000e\000s}{section.5}% 17
|
||||
\BOOKMARK [2][-]{subsection.5.2}{\376\377\000P\000o\000l\000i\000c\000i\000e\000s\000\040\000b\000a\000s\000e\000d\000\040\000o\000n\000\040\000N\000R\000V\000\040\000g\000e\000n\000e\000r\000a\000t\000i\000o\000n\000s}{section.5}% 18
|
||||
\BOOKMARK [1][-]{section.6}{\376\377\000L\000i\000t\000e\000r\000a\000t\000u\000r\000e\000\040\000S\000t\000u\000d\000y}{}% 19
|
||||
\BOOKMARK [2][-]{subsection.6.1}{\376\377\000D\000a\000y\000-\000A\000h\000e\000a\000d\000\040\000E\000l\000e\000c\000t\000r\000i\000c\000i\000t\000y\000\040\000P\000r\000i\000c\000e\000\040\000F\000o\000r\000e\000c\000a\000s\000t\000i\000n\000g}{section.6}% 20
|
||||
\BOOKMARK [2][-]{subsection.6.2}{\376\377\000I\000m\000b\000a\000l\000a\000n\000c\000e\000\040\000P\000r\000i\000c\000e\000\040\000F\000o\000r\000e\000c\000a\000s\000t\000i\000n\000g}{section.6}% 21
|
||||
\BOOKMARK [2][-]{subsection.6.3}{\376\377\000P\000o\000l\000i\000c\000i\000e\000s\000\040\000f\000o\000r\000\040\000B\000a\000t\000t\000e\000r\000y\000\040\000O\000p\000t\000i\000m\000i\000z\000a\000t\000i\000o\000n}{section.6}% 22
|
||||
\BOOKMARK [1][-]{section.7}{\376\377\000R\000e\000s\000u\000l\000t\000s\000\040\000\046\000\040\000D\000i\000s\000c\000u\000s\000s\000i\000o\000n}{}% 23
|
||||
\BOOKMARK [2][-]{subsection.7.1}{\376\377\000D\000a\000t\000a}{section.7}% 24
|
||||
\BOOKMARK [2][-]{subsection.7.2}{\376\377\000Q\000u\000a\000n\000t\000i\000l\000e\000\040\000R\000e\000g\000r\000e\000s\000s\000i\000o\000n}{section.7}% 25
|
||||
\BOOKMARK [3][-]{subsubsection.7.2.1}{\376\377\000L\000i\000n\000e\000a\000r\000\040\000M\000o\000d\000e\000l}{subsection.7.2}% 26
|
||||
\BOOKMARK [3][-]{subsubsection.7.2.2}{\376\377\000N\000o\000n\000-\000L\000i\000n\000e\000a\000r\000\040\000M\000o\000d\000e\000l}{subsection.7.2}% 27
|
||||
\BOOKMARK [3][-]{subsubsection.7.2.3}{\376\377\000G\000R\000U\000\040\000M\000o\000d\000e\000l}{subsection.7.2}% 28
|
||||
\BOOKMARK [2][-]{subsection.7.3}{\376\377\000D\000i\000f\000f\000u\000s\000i\000o\000n}{section.7}% 29
|
||||
\BOOKMARK [2][-]{subsection.7.4}{\376\377\000C\000o\000m\000p\000a\000r\000i\000s\000o\000n}{section.7}% 30
|
||||
\BOOKMARK [2][-]{subsection.7.5}{\376\377\000P\000o\000l\000i\000c\000i\000e\000s\000\040\000f\000o\000r\000\040\000b\000a\000t\000t\000e\000r\000y\000\040\000o\000p\000t\000i\000m\000i\000z\000a\000t\000i\000o\000n}{section.7}% 31
|
||||
\BOOKMARK [3][-]{subsubsection.7.5.1}{\376\377\000B\000a\000s\000e\000l\000i\000n\000e\000s}{subsection.7.5}% 32
|
||||
\BOOKMARK [3][-]{subsubsection.7.5.2}{\376\377\000P\000o\000l\000i\000c\000y\000\040\000u\000s\000i\000n\000g\000\040\000g\000e\000n\000e\000r\000a\000t\000e\000d\000\040\000N\000R\000V\000\040\000s\000a\000m\000p\000l\000e\000s}{subsection.7.5}% 33
|
||||
\BOOKMARK [1][-]{section.8}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 34
|
||||
|
||||
@@ -51,17 +51,13 @@
|
||||
</requires>
|
||||
<requires type="static">
|
||||
<file>blx-dm.def</file>
|
||||
<file>apa.dbx</file>
|
||||
<file>blx-compat.def</file>
|
||||
<file>biblatex.def</file>
|
||||
<file>standard.bbx</file>
|
||||
<file>apa.bbx</file>
|
||||
<file>apa.cbx</file>
|
||||
<file>numeric.bbx</file>
|
||||
<file>numeric.cbx</file>
|
||||
<file>biblatex.cfg</file>
|
||||
<file>english.lbx</file>
|
||||
<file>american.lbx</file>
|
||||
<file>american-apa.lbx</file>
|
||||
<file>english-apa.lbx</file>
|
||||
</requires>
|
||||
</internal>
|
||||
<external package="biblatex" priority="5" active="1">
|
||||
@@ -82,8 +78,5 @@
|
||||
<requires type="dynamic">
|
||||
<file>verslag.bcf</file>
|
||||
</requires>
|
||||
<requires type="editable">
|
||||
<file>./references.bib</file>
|
||||
</requires>
|
||||
</external>
|
||||
</requests>
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
\usepackage{booktabs}
|
||||
\usepackage{tikz}
|
||||
\usepackage{acro}
|
||||
\usepackage{pdflscape}
|
||||
\usepackage[square,numbers]{natbib}
|
||||
\usepackage{pdfpages}
|
||||
|
||||
\usetikzlibrary{positioning, calc}
|
||||
|
||||
% Electricity market
|
||||
@@ -76,9 +80,9 @@
|
||||
|
||||
% Bibliography settings
|
||||
%-----------------------
|
||||
\usepackage[backend=biber, style=apa, sorting=nyt, hyperref=true]{biblatex}
|
||||
\addbibresource{./references.bib}
|
||||
\usepackage{csquotes} % Suggested when using babel+biblatex
|
||||
% \usepackage[backend=biber, style=apa, sorting=nyt, hyperref=true]{biblatex}
|
||||
% \addbibresource{./references.bib}
|
||||
% \usepackage{csquotes} % Suggested when using babel+biblatex
|
||||
|
||||
% Hyperreferences
|
||||
%-----------------
|
||||
@@ -131,6 +135,7 @@
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
% =====================================================================
|
||||
% Cover
|
||||
% =====================================================================
|
||||
@@ -144,8 +149,6 @@
|
||||
% =====================================================================
|
||||
|
||||
% ------------ TABLE OF CONTENTS ---------
|
||||
{\hypersetup{hidelinks}\tableofcontents} % hide link color in toc
|
||||
\newpage
|
||||
% \begin{titlepage}
|
||||
|
||||
% \centering % Centers everything on the page
|
||||
@@ -175,6 +178,14 @@
|
||||
|
||||
|
||||
% ------------ Introduction ---------
|
||||
\include{sections/abstract}
|
||||
|
||||
\includepdf[pages=-]{../Extended_Abstract/extended_abstract.pdf}
|
||||
|
||||
|
||||
{\hypersetup{hidelinks}\tableofcontents} % hide link color in toc
|
||||
\newpage
|
||||
|
||||
\include{sections/introduction}
|
||||
|
||||
|
||||
@@ -186,11 +197,20 @@
|
||||
|
||||
\input{sections/results}
|
||||
|
||||
\input{sections/conclusion}
|
||||
|
||||
\newpage
|
||||
\printacronyms
|
||||
\printacronyms[display=all,sort=true]
|
||||
|
||||
\newpage
|
||||
% bibliography
|
||||
\printbibliography
|
||||
% \printbibliography
|
||||
\bibliographystyle{unsrtnat}
|
||||
\bibliography{references}
|
||||
|
||||
% appendix
|
||||
\appendix
|
||||
|
||||
\include{sections/appendix}
|
||||
|
||||
\end{document}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
\acswitchoff
|
||||
\babel@toc {english}{}\relax
|
||||
\contentsline {section}{\numberline {1}Abstract}{1}{section.1}%
|
||||
\contentsline {section}{\numberline {2}Introduction}{7}{section.2}%
|
||||
\contentsline {section}{\numberline {3}Electricity market}{9}{section.3}%
|
||||
\contentsline {section}{\numberline {4}Generative modeling}{13}{section.4}%
|
||||
\contentsline {subsection}{\numberline {4.1}Quantile Regression}{14}{subsection.4.1}%
|
||||
\contentsline {subsection}{\numberline {4.2}Autoregressive vs Non-Autoregressive models}{17}{subsection.4.2}%
|
||||
\contentsline {subsection}{\numberline {4.3}Model Types}{18}{subsection.4.3}%
|
||||
\contentsline {subsubsection}{\numberline {4.3.1}Linear Model}{18}{subsubsection.4.3.1}%
|
||||
\contentsline {subsubsection}{\numberline {4.3.2}Non-Linear Model}{19}{subsubsection.4.3.2}%
|
||||
\contentsline {subsubsection}{\numberline {4.3.3}Recurrent Neural Network (RNN)}{19}{subsubsection.4.3.3}%
|
||||
\contentsline {subsection}{\numberline {4.4}Diffusion models}{20}{subsection.4.4}%
|
||||
\contentsline {subsubsection}{\numberline {4.4.1}Overview}{20}{subsubsection.4.4.1}%
|
||||
\contentsline {subsubsection}{\numberline {4.4.2}Applications}{21}{subsubsection.4.4.2}%
|
||||
\contentsline {subsubsection}{\numberline {4.4.3}Generation process}{21}{subsubsection.4.4.3}%
|
||||
\contentsline {subsection}{\numberline {4.5}Evaluation}{23}{subsection.4.5}%
|
||||
\contentsline {section}{\numberline {5}Battery Optimization Policies}{25}{section.5}%
|
||||
\contentsline {subsection}{\numberline {5.1}Baselines}{25}{subsection.5.1}%
|
||||
\contentsline {subsection}{\numberline {5.2}Policies based on NRV generations}{25}{subsection.5.2}%
|
||||
\contentsline {section}{\numberline {6}Literature Study}{27}{section.6}%
|
||||
\contentsline {subsection}{\numberline {6.1}Day-Ahead Electricity Price Forecasting}{27}{subsection.6.1}%
|
||||
\contentsline {subsection}{\numberline {6.2}Imbalance Price Forecasting}{28}{subsection.6.2}%
|
||||
\contentsline {subsection}{\numberline {6.3}Policies for Battery Optimization}{28}{subsection.6.3}%
|
||||
\contentsline {section}{\numberline {7}Results \& Discussion}{29}{section.7}%
|
||||
\contentsline {subsection}{\numberline {7.1}Data}{29}{subsection.7.1}%
|
||||
\contentsline {subsection}{\numberline {7.2}Quantile Regression}{30}{subsection.7.2}%
|
||||
\contentsline {subsubsection}{\numberline {7.2.1}Linear Model}{30}{subsubsection.7.2.1}%
|
||||
\contentsline {subsubsection}{\numberline {7.2.2}Non-Linear Model}{37}{subsubsection.7.2.2}%
|
||||
\contentsline {subsubsection}{\numberline {7.2.3}GRU Model}{40}{subsubsection.7.2.3}%
|
||||
\contentsline {subsection}{\numberline {7.3}Diffusion}{44}{subsection.7.3}%
|
||||
\contentsline {subsection}{\numberline {7.4}Comparison}{48}{subsection.7.4}%
|
||||
\contentsline {subsection}{\numberline {7.5}Policies for battery optimization}{53}{subsection.7.5}%
|
||||
\contentsline {subsubsection}{\numberline {7.5.1}Baselines}{53}{subsubsection.7.5.1}%
|
||||
\contentsline {subsubsection}{\numberline {7.5.2}Policy using generated NRV samples}{54}{subsubsection.7.5.2}%
|
||||
\contentsline {section}{\numberline {8}Conclusion}{59}{section.8}%
|
||||
|
||||
@@ -173,7 +173,11 @@ class NrvDataset(Dataset):
|
||||
|
||||
if self.forecast_features.numel() > 0:
|
||||
history_forecast_features = self.forecast_features[
|
||||
actual_idx + 1 : actual_idx + self.sequence_length + 1, :
|
||||
actual_idx
|
||||
+ 1 : actual_idx
|
||||
+ self.sequence_length
|
||||
+ self.predict_sequence_length,
|
||||
:,
|
||||
]
|
||||
all_features_list.append(history_forecast_features)
|
||||
|
||||
|
||||
@@ -49,6 +49,10 @@ class DataProcessor:
|
||||
-np.inf,
|
||||
datetime(year=2022, month=11, day=30, tzinfo=pytz.UTC),
|
||||
)
|
||||
self.val_range = (
|
||||
datetime(year=2022, month=11, day=1, tzinfo=pytz.UTC),
|
||||
datetime(year=2022, month=12, day=30, tzinfo=pytz.UTC),
|
||||
)
|
||||
self.test_range = (datetime(year=2023, month=1, day=1, tzinfo=pytz.UTC), np.inf)
|
||||
|
||||
self.update_range_str()
|
||||
@@ -227,14 +231,23 @@ class DataProcessor:
|
||||
transform: bool = True,
|
||||
predict_sequence_length: int = 96,
|
||||
shuffle: bool = True,
|
||||
with_validation: bool = False,
|
||||
):
|
||||
train_df = self.all_features.copy()
|
||||
|
||||
train_range = self.train_range
|
||||
|
||||
if with_validation:
|
||||
train_range = (
|
||||
self.train_range[0],
|
||||
self.val_range[0] - pd.Timedelta(days=1),
|
||||
)
|
||||
|
||||
if self.train_range[0] != -np.inf:
|
||||
train_df = train_df[(train_df["datetime"] >= self.train_range[0])]
|
||||
train_df = train_df[(train_df["datetime"] >= train_range[0])]
|
||||
|
||||
if self.train_range[1] != np.inf:
|
||||
train_df = train_df[(train_df["datetime"] <= self.train_range[1])]
|
||||
train_df = train_df[(train_df["datetime"] <= train_range[1])]
|
||||
|
||||
if transform:
|
||||
train_df["nrv"] = self.nrv_scaler.fit_transform(
|
||||
@@ -276,6 +289,58 @@ class DataProcessor:
|
||||
)
|
||||
return self.get_dataloader(train_dataset, shuffle=shuffle)
|
||||
|
||||
def get_val_dataloader(
|
||||
self,
|
||||
transform: bool = True,
|
||||
predict_sequence_length: int = 96,
|
||||
full_day_skip: bool = False,
|
||||
):
|
||||
val_df = self.all_features.copy()
|
||||
|
||||
if self.val_range[0] != -np.inf:
|
||||
val_df = val_df[(val_df["datetime"] >= self.val_range[0])]
|
||||
|
||||
if self.val_range[1] != np.inf:
|
||||
val_df = val_df[(val_df["datetime"] <= self.val_range[1])]
|
||||
|
||||
if transform:
|
||||
val_df["nrv"] = self.nrv_scaler.transform(
|
||||
val_df["nrv"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
val_df["load_forecast"] = self.load_forecast_scaler.transform(
|
||||
val_df["load_forecast"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
val_df["total_load"] = self.load_forecast_scaler.transform(
|
||||
val_df["total_load"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
|
||||
val_df["pv_forecast"] = self.pv_forecast_scaler.transform(
|
||||
val_df["pv_forecast"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
|
||||
val_df["pv_history"] = self.pv_forecast_scaler.transform(
|
||||
val_df["pv_history"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
|
||||
val_df["wind_forecast"] = self.wind_forecast_scaler.transform(
|
||||
val_df["wind_forecast"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
val_df["wind_history"] = self.wind_forecast_scaler.transform(
|
||||
val_df["wind_history"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
val_df["nominal_net_position"] = self.nominal_net_position_scaler.transform(
|
||||
val_df["nominal_net_position"].values.reshape(-1, 1)
|
||||
).reshape(-1)
|
||||
|
||||
val_dataset = NrvDataset(
|
||||
val_df,
|
||||
data_config=self.data_config,
|
||||
full_day_skip=self.full_day_skip or full_day_skip,
|
||||
predict_sequence_length=predict_sequence_length,
|
||||
lstm=self.lstm,
|
||||
)
|
||||
return self.get_dataloader(val_dataset, shuffle=False)
|
||||
|
||||
def get_test_dataloader(
|
||||
self,
|
||||
transform: bool = True,
|
||||
@@ -335,14 +400,35 @@ class DataProcessor:
|
||||
transform: bool = True,
|
||||
predict_sequence_length: int = 96,
|
||||
full_day_skip: bool = False,
|
||||
validation: bool = False,
|
||||
):
|
||||
return self.get_train_dataloader(
|
||||
transform=transform, predict_sequence_length=predict_sequence_length
|
||||
), self.get_test_dataloader(
|
||||
transform=transform,
|
||||
predict_sequence_length=predict_sequence_length,
|
||||
full_day_skip=full_day_skip,
|
||||
)
|
||||
|
||||
if not validation:
|
||||
return self.get_train_dataloader(
|
||||
transform=transform, predict_sequence_length=predict_sequence_length
|
||||
), self.get_test_dataloader(
|
||||
transform=transform,
|
||||
predict_sequence_length=predict_sequence_length,
|
||||
full_day_skip=full_day_skip,
|
||||
)
|
||||
else:
|
||||
return (
|
||||
self.get_train_dataloader(
|
||||
transform=transform,
|
||||
predict_sequence_length=predict_sequence_length,
|
||||
with_validation=True,
|
||||
),
|
||||
self.get_val_dataloader(
|
||||
transform=transform,
|
||||
predict_sequence_length=predict_sequence_length,
|
||||
full_day_skip=full_day_skip,
|
||||
),
|
||||
self.get_test_dataloader(
|
||||
transform=transform,
|
||||
predict_sequence_length=predict_sequence_length,
|
||||
full_day_skip=full_day_skip,
|
||||
),
|
||||
)
|
||||
|
||||
def inverse_transform(self, input_data):
|
||||
try:
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
|
||||
|
||||
class DiffusionModel(nn.Module):
|
||||
def __init__(self, time_dim: int = 64):
|
||||
super(DiffusionModel, self).__init__()
|
||||
@@ -16,7 +17,6 @@ class DiffusionModel(nn.Module):
|
||||
pos_enc = torch.cat((pos_enc_a, pos_enc_b), dim=-1)
|
||||
return pos_enc
|
||||
|
||||
|
||||
def forward(self, x, t, inputs):
|
||||
t = t.unsqueeze(-1).type(torch.float)
|
||||
t = self.pos_encoding(t, self.time_dim)
|
||||
@@ -31,33 +31,58 @@ class DiffusionModel(nn.Module):
|
||||
x = self.layers[-1](x)
|
||||
return x
|
||||
|
||||
|
||||
class SimpleDiffusionModel(DiffusionModel):
|
||||
def __init__(self, input_size: int, hidden_sizes: list, other_inputs_dim: int, time_dim: int = 64):
|
||||
def __init__(
|
||||
self,
|
||||
input_size: int,
|
||||
hidden_sizes: list,
|
||||
other_inputs_dim: int,
|
||||
time_dim: int = 64,
|
||||
):
|
||||
super(SimpleDiffusionModel, self).__init__(time_dim)
|
||||
|
||||
self.other_inputs_dim = other_inputs_dim
|
||||
|
||||
self.layers.append(nn.Linear(input_size + time_dim + other_inputs_dim, hidden_sizes[0]))
|
||||
self.layers.append(
|
||||
nn.Linear(input_size + time_dim + other_inputs_dim, hidden_sizes[0])
|
||||
)
|
||||
self.layers.append(nn.ReLU())
|
||||
|
||||
for i in range(1, len(hidden_sizes)):
|
||||
self.layers.append(nn.Linear(hidden_sizes[i - 1] + time_dim + other_inputs_dim, hidden_sizes[i]))
|
||||
self.layers.append(
|
||||
nn.Linear(
|
||||
hidden_sizes[i - 1] + time_dim + other_inputs_dim, hidden_sizes[i]
|
||||
)
|
||||
)
|
||||
self.layers.append(nn.ReLU())
|
||||
|
||||
self.layers.append(nn.Linear(hidden_sizes[-1] + time_dim + other_inputs_dim, input_size))
|
||||
self.layers.append(
|
||||
nn.Linear(hidden_sizes[-1] + time_dim + other_inputs_dim, input_size)
|
||||
)
|
||||
|
||||
|
||||
class GRUDiffusionModel(DiffusionModel):
|
||||
def __init__(self, input_size: int, hidden_sizes: list, other_inputs_dim: int, gru_hidden_size: int, time_dim: int = 64):
|
||||
def __init__(
|
||||
self,
|
||||
input_size: int,
|
||||
hidden_sizes: list,
|
||||
other_inputs_dim: int,
|
||||
gru_hidden_size: int,
|
||||
time_dim: int = 64,
|
||||
):
|
||||
super(GRUDiffusionModel, self).__init__(time_dim)
|
||||
|
||||
|
||||
self.other_inputs_dim = other_inputs_dim
|
||||
self.gru_hidden_size = gru_hidden_size
|
||||
|
||||
# GRU layer
|
||||
self.gru = nn.GRU(input_size=input_size + time_dim + other_inputs_dim,
|
||||
hidden_size=gru_hidden_size,
|
||||
num_layers=3,
|
||||
batch_first=True)
|
||||
self.gru = nn.GRU(
|
||||
input_size=input_size + time_dim + other_inputs_dim,
|
||||
hidden_size=gru_hidden_size,
|
||||
num_layers=1,
|
||||
batch_first=True,
|
||||
)
|
||||
|
||||
# Fully connected layers after GRU
|
||||
self.fc_layers = nn.ModuleList()
|
||||
@@ -76,16 +101,20 @@ class GRUDiffusionModel(DiffusionModel):
|
||||
|
||||
# Positional encoding for each time step
|
||||
t = t.unsqueeze(-1).type(torch.float)
|
||||
t = self.pos_encoding(t, self.time_dim) # Shape: [batch_size, seq_len, time_dim]
|
||||
t = self.pos_encoding(
|
||||
t, self.time_dim
|
||||
) # Shape: [batch_size, seq_len, time_dim]
|
||||
|
||||
# repeat time encoding for each time step t is shape [batch_size, time_dim], i want [batch_size, seq_len, time_dim]
|
||||
t = t.unsqueeze(1).repeat(1, seq_len, 1)
|
||||
|
||||
# Concatenate x, t, and inputs along the feature dimension
|
||||
x = torch.cat((x, t, inputs), dim=-1) # Shape: [batch_size, seq_len, input_size + time_dim + other_inputs_dim]
|
||||
x = torch.cat(
|
||||
(x, t, inputs), dim=-1
|
||||
) # Shape: [batch_size, seq_len, input_size + time_dim + other_inputs_dim]
|
||||
|
||||
# Pass through GRU
|
||||
output, hidden = self.gru(x) # Hidden Shape: [batch_size, seq_len, 1]
|
||||
output, hidden = self.gru(x) # Hidden Shape: [batch_size, seq_len, 1]
|
||||
|
||||
# Get last hidden state
|
||||
x = hidden[-1]
|
||||
@@ -94,4 +123,4 @@ class GRUDiffusionModel(DiffusionModel):
|
||||
for layer in self.fc_layers:
|
||||
x = layer(x)
|
||||
|
||||
return x
|
||||
return x
|
||||
|
||||
@@ -15,7 +15,17 @@ class PolicyEvaluator:
|
||||
self.baseline_policy = baseline_policy
|
||||
|
||||
self.ipc = ImbalancePriceCalculator(data_path="")
|
||||
|
||||
self.dates = baseline_policy.test_data["DateTime"].dt.date.unique()
|
||||
|
||||
# also add dates from last 2 months of 2023
|
||||
self.dates = np.append(
|
||||
self.dates,
|
||||
pd.date_range(
|
||||
start="2022-11-01", end="2022-12-31", freq="D"
|
||||
).to_pydatetime(),
|
||||
)
|
||||
|
||||
self.dates = pd.to_datetime(self.dates)
|
||||
|
||||
### Load Imbalance Prices ###
|
||||
@@ -44,8 +54,8 @@ class PolicyEvaluator:
|
||||
date,
|
||||
idx_samples,
|
||||
test_loader,
|
||||
charge_thresholds=np.arange(-1000, 1000, 5),
|
||||
discharge_thresholds=np.arange(-1000, 1000, 5),
|
||||
charge_thresholds=np.arange(-1000, 1000, 100),
|
||||
discharge_thresholds=np.arange(-1000, 1000, 100),
|
||||
penalty: int = 0,
|
||||
state_of_charge: float = 0.0,
|
||||
):
|
||||
@@ -116,6 +126,10 @@ class PolicyEvaluator:
|
||||
# Calculate the gradient (difference) between the simulated and target charge cycles
|
||||
gradient = simulated_charge_cycles - target_charge_cycles
|
||||
|
||||
if abs(gradient) < tolerance:
|
||||
print(f"Optimal penalty found after {iteration+1} iterations")
|
||||
break
|
||||
|
||||
# Optionally, adjust learning rate based on the change of gradient direction to avoid oscillation
|
||||
if previous_gradient is not None and gradient * previous_gradient < 0:
|
||||
learning_rate *= learning_rate_decay
|
||||
@@ -129,9 +143,7 @@ class PolicyEvaluator:
|
||||
previous_gradient = gradient
|
||||
|
||||
# Check if the charge cycles are close enough to the target
|
||||
if abs(gradient) < tolerance:
|
||||
print(f"Optimal penalty found after {iteration+1} iterations")
|
||||
break
|
||||
|
||||
|
||||
else:
|
||||
print(
|
||||
@@ -218,7 +230,7 @@ class PolicyEvaluator:
|
||||
raise KeyboardInterrupt
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
# print(e)
|
||||
pass
|
||||
|
||||
self.profits = pd.DataFrame(
|
||||
@@ -243,6 +255,8 @@ class PolicyEvaluator:
|
||||
|
||||
loggings = []
|
||||
|
||||
total_dates = 0
|
||||
|
||||
for date in tqdm(self.dates):
|
||||
try:
|
||||
(
|
||||
@@ -272,15 +286,18 @@ class PolicyEvaluator:
|
||||
}
|
||||
|
||||
loggings.append(new_info)
|
||||
total_dates += 1
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("Interrupted")
|
||||
raise KeyboardInterrupt
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
# print(e)
|
||||
pass
|
||||
|
||||
print(f"Total Evaluated Dates: {total_dates}")
|
||||
|
||||
if log_metrics:
|
||||
log_df = pd.DataFrame(loggings)
|
||||
|
||||
|
||||
@@ -59,11 +59,8 @@ def sample_diffusion(
|
||||
|
||||
# evenly spaces 4 intermediate samples to append between 1 and noise_steps
|
||||
if intermediate_samples:
|
||||
first_quarter_end = (noise_steps - 1) // 4
|
||||
spacing = (first_quarter_end - 1) // 4
|
||||
|
||||
# save 1, 1 + spacing, 1 + 2*spacing, 1 + 3*spacing
|
||||
if i % spacing == 1 and i <= first_quarter_end:
|
||||
spacing = (noise_steps - 1) // 4
|
||||
if i % spacing == 0:
|
||||
intermediate_samples_list.append(x)
|
||||
|
||||
x = torch.clamp(x, -1.0, 1.0)
|
||||
@@ -80,11 +77,12 @@ class DiffusionTrainer:
|
||||
data_processor: DataProcessor,
|
||||
device: torch.device,
|
||||
policy_evaluator: PolicyEvaluator = None,
|
||||
noise_steps: int = 300,
|
||||
):
|
||||
self.model = model
|
||||
self.device = device
|
||||
|
||||
self.noise_steps = 300
|
||||
self.noise_steps = noise_steps
|
||||
self.beta_start = 0.0001
|
||||
self.beta_end = 0.02
|
||||
self.ts_length = 96
|
||||
@@ -100,7 +98,7 @@ class DiffusionTrainer:
|
||||
self.best_score = None
|
||||
self.policy_evaluator = policy_evaluator
|
||||
|
||||
self.prev_optimal_penalty = 0
|
||||
self.prev_optimal_penalty = 600
|
||||
|
||||
def noise_time_series(self, x: torch.tensor, t: int):
|
||||
"""Add noise to time series
|
||||
@@ -200,14 +198,22 @@ class DiffusionTrainer:
|
||||
|
||||
early_stopping = 0
|
||||
best_crps = None
|
||||
best_profit = None
|
||||
best_charge_cycles = None
|
||||
|
||||
if task:
|
||||
self.init_clearml_task(task)
|
||||
|
||||
train_loader, test_loader = self.data_processor.get_dataloaders(
|
||||
predict_sequence_length=self.ts_length
|
||||
train_loader, val_loader, test_loader = self.data_processor.get_dataloaders(
|
||||
predict_sequence_length=self.ts_length, validation=True
|
||||
)
|
||||
|
||||
# val loader total samples
|
||||
val_loader_total_samples = len(val_loader.dataset)
|
||||
print("Train Loader Total Samples: ", len(train_loader.dataset))
|
||||
print(f"Val Loader Total Samples: {val_loader_total_samples}")
|
||||
print(f"Test Loader Total Samples: {len(test_loader.dataset)}")
|
||||
|
||||
train_sample_indices = self.random_samples(train=True, num_samples=5)
|
||||
test_sample_indices = self.random_samples(train=False, num_samples=5)
|
||||
|
||||
@@ -231,16 +237,16 @@ class DiffusionTrainer:
|
||||
|
||||
running_loss /= len(train_loader.dataset)
|
||||
|
||||
if epoch % 75 == 0 and epoch != 0:
|
||||
crps, _ = self.test(test_loader, epoch, task)
|
||||
if epoch % 30 == 0 and epoch != 0:
|
||||
crps, profit, charge_cycles, _ = self.test(val_loader, epoch, task)
|
||||
|
||||
if best_crps is None or crps < best_crps:
|
||||
best_crps = crps
|
||||
if best_profit is None or profit > best_profit:
|
||||
best_profit = profit
|
||||
early_stopping = 0
|
||||
else:
|
||||
early_stopping += 1
|
||||
|
||||
if early_stopping > 5:
|
||||
if early_stopping > 20:
|
||||
break
|
||||
|
||||
if task:
|
||||
@@ -251,7 +257,7 @@ class DiffusionTrainer:
|
||||
value=loss.item(),
|
||||
)
|
||||
|
||||
if epoch % 150 == 0 and epoch != 0:
|
||||
if epoch % 300 == 0 and epoch != 0:
|
||||
self.debug_plots(
|
||||
task, True, train_loader, train_sample_indices, epoch
|
||||
)
|
||||
@@ -582,28 +588,27 @@ class DiffusionTrainer:
|
||||
name="test_MSELoss", value=mean_inversed_mse
|
||||
)
|
||||
|
||||
if self.best_score is None or mean_crps < self.best_score:
|
||||
self.save_checkpoint(mean_crps, task, epoch)
|
||||
|
||||
if task:
|
||||
task.get_logger().report_scalar(
|
||||
title="CRPS", series="test", value=mean_crps, iteration=epoch
|
||||
title="CRPS", series="val", value=mean_crps, iteration=epoch
|
||||
)
|
||||
|
||||
if self.policy_evaluator:
|
||||
_, test_loader = self.data_processor.get_dataloaders(
|
||||
predict_sequence_length=self.ts_length, full_day_skip=True
|
||||
if self.policy_evaluator and epoch != -1:
|
||||
_, val_loader, _ = self.data_processor.get_dataloaders(
|
||||
predict_sequence_length=self.ts_length,
|
||||
full_day_skip=True,
|
||||
validation=True,
|
||||
)
|
||||
|
||||
optimal_penalty, profit, charge_cycles = (
|
||||
self.policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
idx_samples=generated_samples,
|
||||
test_loader=test_loader,
|
||||
test_loader=val_loader,
|
||||
initial_penalty=self.prev_optimal_penalty,
|
||||
target_charge_cycles=283,
|
||||
initial_learning_rate=1,
|
||||
target_charge_cycles=58*400/356,
|
||||
initial_learning_rate=20,
|
||||
max_iterations=50,
|
||||
tolerance=1,
|
||||
tolerance=0.3,
|
||||
iteration=epoch,
|
||||
)
|
||||
)
|
||||
@@ -612,22 +617,28 @@ class DiffusionTrainer:
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Penalty",
|
||||
series="test",
|
||||
series="val",
|
||||
value=optimal_penalty,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Profit", series="test", value=profit, iteration=epoch
|
||||
title="Optimal Profit", series="val", value=profit, iteration=epoch
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Charge Cycles",
|
||||
series="test",
|
||||
series="val",
|
||||
value=charge_cycles,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
if self.best_score is None or profit > self.best_score:
|
||||
self.save_checkpoint(profit, task, epoch)
|
||||
|
||||
|
||||
return mean_crps, profit, charge_cycles, generated_samples
|
||||
|
||||
return mean_crps, generated_samples
|
||||
|
||||
def save_checkpoint(self, val_loss, task, iteration: int):
|
||||
|
||||
@@ -176,22 +176,22 @@ class AutoRegressiveQuantileTrainer(AutoRegressiveTrainer):
|
||||
|
||||
crps_from_samples_metric.append(crps[0].mean().item())
|
||||
|
||||
if epoch is not None:
|
||||
if epoch is not None and task is not None:
|
||||
task.get_logger().report_scalar(
|
||||
title="CRPS_from_samples",
|
||||
series="test",
|
||||
series="val",
|
||||
value=np.mean(crps_from_samples_metric),
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
# using the policy evaluator, evaluate the policy with the generated samples
|
||||
if self.policy_evaluator is not None:
|
||||
if self.policy_evaluator is not None and epoch != -1:
|
||||
optimal_penalty, profit, charge_cycles = (
|
||||
self.policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
idx_samples=generated_samples,
|
||||
test_loader=dataloader,
|
||||
initial_penalty=900,
|
||||
target_charge_cycles=283,
|
||||
target_charge_cycles=58 * 400 / 356,
|
||||
initial_learning_rate=5,
|
||||
max_iterations=100,
|
||||
tolerance=1,
|
||||
@@ -205,22 +205,30 @@ class AutoRegressiveQuantileTrainer(AutoRegressiveTrainer):
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Penalty",
|
||||
series="test",
|
||||
series="val",
|
||||
value=optimal_penalty,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Profit", series="test", value=profit, iteration=epoch
|
||||
title="Optimal Profit", series="val", value=profit, iteration=epoch
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Charge Cycles",
|
||||
series="test",
|
||||
series="val",
|
||||
value=charge_cycles,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
return (
|
||||
np.mean(crps_from_samples_metric),
|
||||
profit,
|
||||
charge_cycles,
|
||||
optimal_penalty,
|
||||
generated_samples,
|
||||
)
|
||||
|
||||
return np.mean(crps_from_samples_metric), generated_samples
|
||||
|
||||
def log_final_metrics(self, task, dataloader, train: bool = True):
|
||||
@@ -629,6 +637,15 @@ class NonAutoRegressiveQuantileRegression(Trainer):
|
||||
task.get_logger().report_single_value(
|
||||
name=metric_name, value=metric_value
|
||||
)
|
||||
|
||||
if train == False:
|
||||
crps_from_samples_metric, self.test_set_samples = (
|
||||
self.calculate_crps_from_samples(None, dataloader, None)
|
||||
)
|
||||
task.get_logger().report_single_value(
|
||||
name="test_CRPS_from_samples_transformed",
|
||||
value=np.mean(crps_from_samples_metric),
|
||||
)
|
||||
|
||||
def debug_plots(self, task, train: bool, data_loader, sample_indices, epoch):
|
||||
for actual_idx, idx in sample_indices.items():
|
||||
@@ -833,9 +850,12 @@ class NonAutoRegressiveQuantileRegression(Trainer):
|
||||
self.data_processor.inverse_transform(samples),
|
||||
)
|
||||
|
||||
samples = samples.unsqueeze(0)
|
||||
samples = self.data_processor.inverse_transform(samples).unsqueeze(0)
|
||||
|
||||
targets = targets.squeeze(-1)
|
||||
targets = targets[0].unsqueeze(0)
|
||||
targets = self.data_processor.inverse_transform(targets)
|
||||
targets = targets.to(self.device)
|
||||
|
||||
samples = samples.to(self.device)
|
||||
|
||||
@@ -843,48 +863,61 @@ class NonAutoRegressiveQuantileRegression(Trainer):
|
||||
|
||||
crps_from_samples_metric.append(crps[0].mean().item())
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="CRPS_from_samples",
|
||||
series="test",
|
||||
value=np.mean(crps_from_samples_metric),
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
# using the policy evaluator, evaluate the policy with the generated samples
|
||||
if self.policy_evaluator is not None:
|
||||
optimal_penalty, profit, charge_cycles = (
|
||||
self.policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
idx_samples=generated_samples,
|
||||
test_loader=dataloader,
|
||||
initial_penalty=500,
|
||||
target_charge_cycles=283,
|
||||
initial_learning_rate=2,
|
||||
max_iterations=100,
|
||||
tolerance=1,
|
||||
if epoch is not None and task is not None:
|
||||
task.get_logger().report_scalar(
|
||||
title="CRPS_from_samples",
|
||||
series="val",
|
||||
value=np.mean(crps_from_samples_metric),
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
# using the policy evaluator, evaluate the policy with the generated samples
|
||||
if self.policy_evaluator is not None and epoch != -1:
|
||||
optimal_penalty, profit, charge_cycles = (
|
||||
self.policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
idx_samples=generated_samples,
|
||||
test_loader=dataloader,
|
||||
initial_penalty=900,
|
||||
target_charge_cycles=58 * 400 / 356,
|
||||
initial_learning_rate=5,
|
||||
max_iterations=30,
|
||||
tolerance=2,
|
||||
iteration=epoch,
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
print(
|
||||
f"Optimal Penalty: {optimal_penalty}, Profit: {profit}, Charge Cycles: {charge_cycles}"
|
||||
)
|
||||
print(
|
||||
f"Optimal Penalty: {optimal_penalty}, Profit: {profit}, Charge Cycles: {charge_cycles}"
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Penalty",
|
||||
series="test",
|
||||
value=optimal_penalty,
|
||||
iteration=epoch,
|
||||
)
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Penalty",
|
||||
series="val",
|
||||
value=optimal_penalty,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Profit", series="test", value=profit, iteration=epoch
|
||||
)
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Profit", series="val", value=profit, iteration=epoch
|
||||
)
|
||||
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Charge Cycles",
|
||||
series="test",
|
||||
value=charge_cycles,
|
||||
iteration=epoch,
|
||||
)
|
||||
task.get_logger().report_scalar(
|
||||
title="Optimal Charge Cycles",
|
||||
series="val",
|
||||
value=charge_cycles,
|
||||
iteration=epoch,
|
||||
)
|
||||
|
||||
return (
|
||||
np.mean(crps_from_samples_metric),
|
||||
profit,
|
||||
charge_cycles,
|
||||
optimal_penalty,
|
||||
generated_samples,
|
||||
)
|
||||
|
||||
return np.mean(crps_from_samples_metric), generated_samples
|
||||
|
||||
def plot_quantile_percentages(
|
||||
self,
|
||||
|
||||
@@ -114,8 +114,8 @@ class Trainer:
|
||||
predict_sequence_length=self.model.output_size, full_day_skip=True
|
||||
)
|
||||
|
||||
train_loader, test_loader = self.data_processor.get_dataloaders(
|
||||
predict_sequence_length=self.model.output_size
|
||||
train_loader, val_loader, test_loader = self.data_processor.get_dataloaders(
|
||||
predict_sequence_length=self.model.output_size, validation=True
|
||||
)
|
||||
|
||||
train_samples = self.random_samples(train=True, num_samples=5)
|
||||
@@ -146,20 +146,7 @@ class Trainer:
|
||||
running_loss += loss.item()
|
||||
|
||||
running_loss /= len(train_loader.dataset)
|
||||
test_loss = self.test(test_loader)
|
||||
|
||||
if self.patience is not None:
|
||||
if (
|
||||
self.best_score is None
|
||||
or test_loss < self.best_score + self.delta
|
||||
):
|
||||
self.save_checkpoint(test_loss, task, epoch)
|
||||
counter = 0
|
||||
else:
|
||||
counter += 1
|
||||
if counter >= self.patience:
|
||||
print("Early stopping triggered")
|
||||
break
|
||||
test_loss = self.test(val_loader)
|
||||
|
||||
if task:
|
||||
task.get_logger().report_scalar(
|
||||
@@ -170,7 +157,7 @@ class Trainer:
|
||||
)
|
||||
task.get_logger().report_scalar(
|
||||
title=self.criterion.__class__.__name__,
|
||||
series="test",
|
||||
series="val",
|
||||
value=test_loss,
|
||||
iteration=epoch,
|
||||
)
|
||||
@@ -194,7 +181,20 @@ class Trainer:
|
||||
# )
|
||||
|
||||
if hasattr(self, "calculate_crps_from_samples"):
|
||||
self.calculate_crps_from_samples(task, test_loader, epoch)
|
||||
_, profit, charge_cycles, penalty, _ = self.calculate_crps_from_samples(task, val_loader, epoch)
|
||||
|
||||
if self.patience is not None:
|
||||
if (
|
||||
self.best_score is None
|
||||
or profit > self.best_score
|
||||
):
|
||||
self.save_checkpoint(profit, task, epoch)
|
||||
counter = 0
|
||||
else:
|
||||
counter += 1
|
||||
if counter >= self.patience:
|
||||
print("Early stopping triggered")
|
||||
break
|
||||
|
||||
if task:
|
||||
self.finish_training(task=task)
|
||||
|
||||
@@ -2,7 +2,7 @@ from src.utils.clearml import ClearMLHelper
|
||||
|
||||
#### ClearML ####
|
||||
clearml_helper = ClearMLHelper(project_name="Thesis/NrvForecast")
|
||||
task = clearml_helper.get_task(task_name="AQR: Non Linear + Load + Wind + PV + QE + NP")
|
||||
task = clearml_helper.get_task(task_name="AQR: Linear + All")
|
||||
task.execute_remotely(queue_name="default", exit_process=True)
|
||||
|
||||
from src.policies.PolicyEvaluator import PolicyEvaluator
|
||||
@@ -52,7 +52,7 @@ data_processor.set_full_day_skip(False)
|
||||
#### Hyperparameters ####
|
||||
data_processor.set_output_size(1)
|
||||
inputDim = data_processor.get_input_size()
|
||||
epochs = 16
|
||||
epochs = 300
|
||||
|
||||
# add parameters to clearml
|
||||
quantiles = task.get_parameter("general/quantiles", cast=True)
|
||||
@@ -68,7 +68,7 @@ else:
|
||||
model_parameters = {
|
||||
"learning_rate": 0.0001,
|
||||
"hidden_size": 256,
|
||||
"num_layers": 8,
|
||||
"num_layers": 2,
|
||||
"dropout": 0.2,
|
||||
"time_feature_embedding": 5,
|
||||
}
|
||||
@@ -89,17 +89,17 @@ time_embedding = TimeEmbedding(
|
||||
# dropout=model_parameters["dropout"],
|
||||
# )
|
||||
|
||||
non_linear_model = NonLinearRegression(
|
||||
time_embedding.output_dim(inputDim),
|
||||
len(quantiles),
|
||||
hiddenSize=model_parameters["hidden_size"],
|
||||
numLayers=model_parameters["num_layers"],
|
||||
dropout=model_parameters["dropout"],
|
||||
)
|
||||
# non_linear_model = NonLinearRegression(
|
||||
# time_embedding.output_dim(inputDim),
|
||||
# len(quantiles),
|
||||
# hiddenSize=model_parameters["hidden_size"],
|
||||
# numLayers=model_parameters["num_layers"],
|
||||
# dropout=model_parameters["dropout"],
|
||||
# )
|
||||
|
||||
# linear_model = LinearRegression(time_embedding.output_dim(inputDim), len(quantiles))
|
||||
linear_model = LinearRegression(time_embedding.output_dim(inputDim), len(quantiles))
|
||||
|
||||
model = nn.Sequential(time_embedding, non_linear_model)
|
||||
model = nn.Sequential(time_embedding, linear_model)
|
||||
|
||||
model.output_size = 1
|
||||
optimizer = torch.optim.Adam(model.parameters(), lr=model_parameters["learning_rate"])
|
||||
@@ -117,15 +117,15 @@ trainer = AutoRegressiveQuantileTrainer(
|
||||
data_processor,
|
||||
quantiles,
|
||||
"cuda",
|
||||
policy_evaluator=None,
|
||||
policy_evaluator=policy_evaluator,
|
||||
debug=False,
|
||||
)
|
||||
|
||||
trainer.add_metrics_to_track(
|
||||
[PinballLoss(quantiles), MSELoss(), L1Loss(), CRPSLoss(quantiles)]
|
||||
)
|
||||
trainer.early_stopping(patience=25)
|
||||
trainer.plot_every(15)
|
||||
trainer.early_stopping(patience=6)
|
||||
trainer.plot_every(4)
|
||||
trainer.train(task=task, epochs=epochs, remotely=True)
|
||||
|
||||
### Policy Evaluation ###
|
||||
@@ -142,9 +142,9 @@ optimal_penalty, profit, charge_cycles = (
|
||||
policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
idx_samples=idx_samples,
|
||||
test_loader=test_loader,
|
||||
initial_penalty=1000,
|
||||
initial_penalty=20000,
|
||||
target_charge_cycles=283,
|
||||
initial_learning_rate=3,
|
||||
initial_learning_rate=13,
|
||||
max_iterations=150,
|
||||
tolerance=1,
|
||||
)
|
||||
|
||||
@@ -2,7 +2,7 @@ from src.utils.clearml import ClearMLHelper
|
||||
|
||||
clearml_helper = ClearMLHelper(project_name="Thesis/NrvForecast")
|
||||
task = clearml_helper.get_task(
|
||||
task_name="Diffusion Training: hidden_sizes=[2048, 2048, 2048] (300 steps), lr=0.0001, time_dim=8"
|
||||
task_name="Diffusion Training: hidden_sizes=[1024, 1024] (300 steps), all features",
|
||||
)
|
||||
task.execute_remotely(queue_name="default", exit_process=True)
|
||||
|
||||
@@ -19,16 +19,16 @@ from src.policies.PolicyEvaluator import PolicyEvaluator
|
||||
data_config = DataConfig()
|
||||
data_config.NRV_HISTORY = True
|
||||
|
||||
data_config.LOAD_HISTORY = False
|
||||
data_config.LOAD_FORECAST = False
|
||||
data_config.LOAD_HISTORY = True
|
||||
data_config.LOAD_FORECAST = True
|
||||
|
||||
data_config.PV_FORECAST = False
|
||||
data_config.PV_HISTORY = False
|
||||
data_config.PV_FORECAST = True
|
||||
data_config.PV_HISTORY = True
|
||||
|
||||
data_config.WIND_FORECAST = False
|
||||
data_config.WIND_HISTORY = False
|
||||
data_config.WIND_FORECAST = True
|
||||
data_config.WIND_HISTORY = True
|
||||
|
||||
data_config.NOMINAL_NET_POSITION = False
|
||||
data_config.NOMINAL_NET_POSITION = True
|
||||
|
||||
data_config = task.connect(data_config, name="data_features")
|
||||
|
||||
@@ -42,7 +42,7 @@ print("Input dim: ", inputDim)
|
||||
model_parameters = {
|
||||
"epochs": 15000,
|
||||
"learning_rate": 0.0001,
|
||||
"hidden_sizes": [2048, 2048, 2048],
|
||||
"hidden_sizes": [1024, 1024],
|
||||
"time_dim": 8,
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ model = SimpleDiffusionModel(
|
||||
# model_parameters["hidden_sizes"],
|
||||
# other_inputs_dim=inputDim[2],
|
||||
# time_dim=model_parameters["time_dim"],
|
||||
# gru_hidden_size=128,
|
||||
# gru_hidden_size=1024,
|
||||
# )
|
||||
|
||||
### Policy Evaluator ###
|
||||
@@ -70,5 +70,7 @@ baseline_policy = BaselinePolicy(battery, data_path="")
|
||||
policy_evaluator = PolicyEvaluator(baseline_policy, task)
|
||||
|
||||
#### Trainer ####
|
||||
trainer = DiffusionTrainer(model, data_processor, "cuda", policy_evaluator=None)
|
||||
trainer = DiffusionTrainer(
|
||||
model, data_processor, "cuda", policy_evaluator=policy_evaluator, noise_steps=300
|
||||
)
|
||||
trainer.train(model_parameters["epochs"], model_parameters["learning_rate"], task)
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
from src.utils.clearml import ClearMLHelper
|
||||
|
||||
#### ClearML ####
|
||||
clearml_helper = ClearMLHelper(project_name="Thesis/NAQR: GRU")
|
||||
task = clearml_helper.get_task(task_name="NAQR: GRU (8 - 512) + Load + PV + Wind + NP")
|
||||
clearml_helper = ClearMLHelper(
|
||||
project_name="Thesis/NrvForecast"
|
||||
)
|
||||
task = clearml_helper.get_task(
|
||||
task_name="NAQR: Linear"
|
||||
)
|
||||
task.execute_remotely(queue_name="default", exit_process=True)
|
||||
|
||||
from src.policies.PolicyEvaluator import PolicyEvaluator
|
||||
@@ -27,21 +31,21 @@ from src.models.time_embedding_layer import TimeEmbedding
|
||||
data_config = DataConfig()
|
||||
|
||||
data_config.NRV_HISTORY = True
|
||||
data_config.LOAD_HISTORY = True
|
||||
data_config.LOAD_FORECAST = True
|
||||
data_config.LOAD_HISTORY = False
|
||||
data_config.LOAD_FORECAST = False
|
||||
|
||||
data_config.WIND_FORECAST = True
|
||||
data_config.WIND_HISTORY = True
|
||||
data_config.WIND_FORECAST = False
|
||||
data_config.WIND_HISTORY = False
|
||||
|
||||
data_config.PV_FORECAST = True
|
||||
data_config.PV_HISTORY = True
|
||||
data_config.PV_FORECAST = False
|
||||
data_config.PV_HISTORY = False
|
||||
|
||||
data_config.NOMINAL_NET_POSITION = True
|
||||
data_config.NOMINAL_NET_POSITION = False
|
||||
|
||||
|
||||
data_config = task.connect(data_config, name="data_features")
|
||||
|
||||
data_processor = DataProcessor(data_config, path="", lstm=True)
|
||||
data_processor = DataProcessor(data_config, path="", lstm=False)
|
||||
data_processor.set_batch_size(64)
|
||||
data_processor.set_full_day_skip(True)
|
||||
|
||||
@@ -64,14 +68,14 @@ else:
|
||||
|
||||
model_parameters = {
|
||||
"learning_rate": 0.0001,
|
||||
"hidden_size": 512,
|
||||
"num_layers": 8,
|
||||
"hidden_size": 256,
|
||||
"num_layers": 2,
|
||||
"dropout": 0.2,
|
||||
}
|
||||
|
||||
model_parameters = task.connect(model_parameters, name="model_parameters")
|
||||
|
||||
# linear_model = LinearRegression(inputDim, len(quantiles) * 96)
|
||||
linear_model = LinearRegression(inputDim, len(quantiles) * 96)
|
||||
|
||||
# non_linear_model = NonLinearRegression(
|
||||
# inputDim,
|
||||
@@ -81,16 +85,7 @@ model_parameters = task.connect(model_parameters, name="model_parameters")
|
||||
# dropout=model_parameters["dropout"],
|
||||
# )
|
||||
|
||||
lstm_model = GRUModel(
|
||||
inputDim,
|
||||
len(quantiles) * 96,
|
||||
hidden_size=model_parameters["hidden_size"],
|
||||
num_layers=model_parameters["num_layers"],
|
||||
dropout=model_parameters["dropout"],
|
||||
)
|
||||
|
||||
|
||||
model = lstm_model
|
||||
model = linear_model
|
||||
model.output_size = 96
|
||||
optimizer = torch.optim.Adam(model.parameters(), lr=model_parameters["learning_rate"])
|
||||
|
||||
@@ -107,44 +102,44 @@ trainer = NonAutoRegressiveQuantileRegression(
|
||||
data_processor,
|
||||
quantiles,
|
||||
"cuda",
|
||||
policy_evaluator=None,
|
||||
policy_evaluator=policy_evaluator,
|
||||
debug=False,
|
||||
)
|
||||
|
||||
trainer.add_metrics_to_track(
|
||||
[PinballLoss(quantiles), MSELoss(), L1Loss(), CRPSLoss(quantiles)]
|
||||
)
|
||||
trainer.early_stopping(patience=5)
|
||||
trainer.plot_every(20)
|
||||
trainer.early_stopping(patience=8)
|
||||
trainer.plot_every(4)
|
||||
trainer.train(task=task, epochs=epochs, remotely=True)
|
||||
|
||||
### Policy Evaluation ###
|
||||
# idx_samples = trainer.test_set_samples
|
||||
# _, test_loader = trainer.data_processor.get_dataloaders(
|
||||
# predict_sequence_length=trainer.model.output_size, full_day_skip=False
|
||||
# )
|
||||
idx_samples = trainer.test_set_samples
|
||||
_, test_loader = trainer.data_processor.get_dataloaders(
|
||||
predict_sequence_length=trainer.model.output_size, full_day_skip=False
|
||||
)
|
||||
|
||||
# policy_evaluator.evaluate_test_set(idx_samples, test_loader)
|
||||
# policy_evaluator.plot_profits_table()
|
||||
# policy_evaluator.plot_thresholds_per_day()
|
||||
policy_evaluator.evaluate_test_set(idx_samples, test_loader)
|
||||
policy_evaluator.plot_profits_table()
|
||||
policy_evaluator.plot_thresholds_per_day()
|
||||
|
||||
# optimal_penalty, profit, charge_cycles = (
|
||||
# policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
# idx_samples=idx_samples,
|
||||
# test_loader=test_loader,
|
||||
# initial_penalty=1000,
|
||||
# target_charge_cycles=283,
|
||||
# learning_rate=15,
|
||||
# max_iterations=150,
|
||||
# tolerance=1,
|
||||
# )
|
||||
# )
|
||||
optimal_penalty, profit, charge_cycles = (
|
||||
policy_evaluator.optimize_penalty_for_target_charge_cycles(
|
||||
idx_samples=idx_samples,
|
||||
test_loader=test_loader,
|
||||
initial_penalty=1000,
|
||||
target_charge_cycles=283,
|
||||
initial_learning_rate=15,
|
||||
max_iterations=150,
|
||||
tolerance=1,
|
||||
)
|
||||
)
|
||||
|
||||
# print(
|
||||
# f"Optimal Penalty: {optimal_penalty}, Profit: {profit}, Charge Cycles: {charge_cycles}"
|
||||
# )
|
||||
# task.get_logger().report_single_value(name="Optimal Penalty", value=optimal_penalty)
|
||||
# task.get_logger().report_single_value(name="Optimal Profit", value=profit)
|
||||
# task.get_logger().report_single_value(name="Optimal Charge Cycles", value=charge_cycles)
|
||||
print(
|
||||
f"Optimal Penalty: {optimal_penalty}, Profit: {profit}, Charge Cycles: {charge_cycles}"
|
||||
)
|
||||
task.get_logger().report_single_value(name="Optimal Penalty", value=optimal_penalty)
|
||||
task.get_logger().report_single_value(name="Optimal Profit", value=profit)
|
||||
task.get_logger().report_single_value(name="Optimal Charge Cycles", value=charge_cycles)
|
||||
|
||||
task.close()
|
||||
|
||||
@@ -2,151 +2,18 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>DateTime</th>\n",
|
||||
" <th>Quality status</th>\n",
|
||||
" <th>Resolution code</th>\n",
|
||||
" <th>Net regulation volume</th>\n",
|
||||
" <th>System imbalance</th>\n",
|
||||
" <th>Alpha</th>\n",
|
||||
" <th>Marginal incremental price</th>\n",
|
||||
" <th>Marginal decremental price</th>\n",
|
||||
" <th>Strategic reserve price</th>\n",
|
||||
" <th>Positive imbalance price</th>\n",
|
||||
" <th>Negative imbalance price</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>2023-12-12 06:45:00+00:00</td>\n",
|
||||
" <td>Not Validated</td>\n",
|
||||
" <td>PT15M</td>\n",
|
||||
" <td>64.621</td>\n",
|
||||
" <td>-92.402</td>\n",
|
||||
" <td>0.00</td>\n",
|
||||
" <td>153.12</td>\n",
|
||||
" <td>-248.86</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>153.12</td>\n",
|
||||
" <td>153.12</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>2023-12-12 06:30:00+00:00</td>\n",
|
||||
" <td>Not Validated</td>\n",
|
||||
" <td>PT15M</td>\n",
|
||||
" <td>39.672</td>\n",
|
||||
" <td>-73.985</td>\n",
|
||||
" <td>0.00</td>\n",
|
||||
" <td>153.29</td>\n",
|
||||
" <td>-147.29</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>153.29</td>\n",
|
||||
" <td>153.29</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>2023-12-12 06:15:00+00:00</td>\n",
|
||||
" <td>Not Validated</td>\n",
|
||||
" <td>PT15M</td>\n",
|
||||
" <td>80.030</td>\n",
|
||||
" <td>-103.795</td>\n",
|
||||
" <td>0.00</td>\n",
|
||||
" <td>152.00</td>\n",
|
||||
" <td>-90.69</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>152.00</td>\n",
|
||||
" <td>152.00</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>2023-12-12 06:00:00+00:00</td>\n",
|
||||
" <td>Not Validated</td>\n",
|
||||
" <td>PT15M</td>\n",
|
||||
" <td>9.882</td>\n",
|
||||
" <td>10.054</td>\n",
|
||||
" <td>0.00</td>\n",
|
||||
" <td>234.00</td>\n",
|
||||
" <td>-516.96</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>-516.96</td>\n",
|
||||
" <td>-516.96</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>2023-12-12 05:45:00+00:00</td>\n",
|
||||
" <td>Not Validated</td>\n",
|
||||
" <td>PT15M</td>\n",
|
||||
" <td>198.887</td>\n",
|
||||
" <td>-250.889</td>\n",
|
||||
" <td>5.06</td>\n",
|
||||
" <td>234.00</td>\n",
|
||||
" <td>-390.57</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>239.06</td>\n",
|
||||
" <td>239.06</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" DateTime Quality status Resolution code \\\n",
|
||||
"0 2023-12-12 06:45:00+00:00 Not Validated PT15M \n",
|
||||
"1 2023-12-12 06:30:00+00:00 Not Validated PT15M \n",
|
||||
"2 2023-12-12 06:15:00+00:00 Not Validated PT15M \n",
|
||||
"3 2023-12-12 06:00:00+00:00 Not Validated PT15M \n",
|
||||
"4 2023-12-12 05:45:00+00:00 Not Validated PT15M \n",
|
||||
"\n",
|
||||
" Net regulation volume System imbalance Alpha Marginal incremental price \\\n",
|
||||
"0 64.621 -92.402 0.00 153.12 \n",
|
||||
"1 39.672 -73.985 0.00 153.29 \n",
|
||||
"2 80.030 -103.795 0.00 152.00 \n",
|
||||
"3 9.882 10.054 0.00 234.00 \n",
|
||||
"4 198.887 -250.889 5.06 234.00 \n",
|
||||
"\n",
|
||||
" Marginal decremental price Strategic reserve price \\\n",
|
||||
"0 -248.86 NaN \n",
|
||||
"1 -147.29 NaN \n",
|
||||
"2 -90.69 NaN \n",
|
||||
"3 -516.96 NaN \n",
|
||||
"4 -390.57 NaN \n",
|
||||
"\n",
|
||||
" Positive imbalance price Negative imbalance price \n",
|
||||
"0 153.12 153.12 \n",
|
||||
"1 153.29 153.29 \n",
|
||||
"2 152.00 152.00 \n",
|
||||
"3 -516.96 -516.96 \n",
|
||||
"4 239.06 239.06 "
|
||||
]
|
||||
},
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
"ename": "",
|
||||
"evalue": "",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[1;31mRunning cells with 'Python 3.12.3' requires the ipykernel package.\n",
|
||||
"\u001b[1;31mRun the following command to install 'ipykernel' into the Python environment. \n",
|
||||
"\u001b[1;31mCommand: '/opt/homebrew/bin/python3 -m pip install ipykernel -U --user --force-reinstall'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
@@ -160,7 +27,7 @@
|
||||
"# read imbalance prices\n",
|
||||
"imbalance_prices = pd.read_csv('../../data/imbalance_prices.csv', sep=';')\n",
|
||||
"imbalance_prices[\"DateTime\"] = pd.to_datetime(imbalance_prices['DateTime'], utc=True)\n",
|
||||
"imbalance_prices.head()"
|
||||
"imbalance_prices.head()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -170,7 +37,7 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ipc_1 = ImbalancePriceCalculator(method=1)\n",
|
||||
"ipc_2 = ImbalancePriceCalculator(method=2)"
|
||||
"ipc_2 = ImbalancePriceCalculator(method=2)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -320,7 +187,7 @@
|
||||
" \n",
|
||||
"\n",
|
||||
"print(\"Total error for method 1: \", error_1)\n",
|
||||
"print(\"Total error for method 2: \", error_2)"
|
||||
"print(\"Total error for method 2: \", error_2)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -508,7 +375,7 @@
|
||||
" plt.legend()\n",
|
||||
" # save plt\n",
|
||||
" # plt.savefig(f'../../Result-Reports/imbalance_prices_images/method_1/imbalance_price_reconstruction_{dt.strftime(\"%d-%m-%Y\")}.png', dpi=300)\n",
|
||||
" plt.show()"
|
||||
" plt.show()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -591,7 +458,7 @@
|
||||
"print(\"MAE NRV | Today Bid Ladder:: \", error_2)\n",
|
||||
"\n",
|
||||
"print(\"MAE SI | Yesterday Bid Ladder: \", error_3)\n",
|
||||
"print(\"MAE NRV | Yesterday Bid Ladder: \", error_4)"
|
||||
"print(\"MAE NRV | Yesterday Bid Ladder: \", error_4)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -776,7 +643,7 @@
|
||||
" plt.legend()\n",
|
||||
" # save plt\n",
|
||||
" # plt.savefig(f'../../Result-Reports/imbalance_prices_images/method_1/imbalance_price_reconstruction_{dt.strftime(\"%d-%m-%Y\")}.png', dpi=300)\n",
|
||||
" plt.show()"
|
||||
" plt.show()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -803,7 +670,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.11"
|
||||
"version": "3.undefined.undefined"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
@@ -85,7 +85,9 @@ class ImbalancePriceCalculator:
|
||||
|
||||
|
||||
def plot(self, datetime):
|
||||
print(self.bid_ladder.index)
|
||||
row = self.bid_ladder.loc[self.bid_ladder.index == datetime]
|
||||
print(row)
|
||||
dec_bids = row["bid_ladder_dec"].values[0]
|
||||
inc_bids = row["bid_ladder_inc"].values[0]
|
||||
|
||||
@@ -109,6 +111,15 @@ class ImbalancePriceCalculator:
|
||||
hovermode='x unified'
|
||||
)
|
||||
|
||||
# figure size figsize=(10, 6)
|
||||
|
||||
fig.update_layout(
|
||||
autosize=False,
|
||||
width=800,
|
||||
height=600,
|
||||
)
|
||||
|
||||
|
||||
fig.show()
|
||||
|
||||
def get_imbalance_prices_2023_for_date_vectorized(self, date, NRV_predictions_matrix):
|
||||
@@ -178,4 +189,4 @@ def calculate_imbalance_price(SI_PREV, SI, MIP, MDP):
|
||||
imbalance_price[SI > 0] = neg_imbalance_price[SI > 0]
|
||||
imbalance_price[SI == 0] = (pos_imbalance_price[SI == 0] + neg_imbalance_price[SI == 0]) / 2
|
||||
|
||||
return alpha, imbalance_price
|
||||
return alpha, imbalance_price
|
||||
|
||||