Sructure
This commit is contained in:
parent
117ed25119
commit
bf396a9c27
8 changed files with 1038 additions and 0 deletions
292
ensps.sty
Normal file
292
ensps.sty
Normal file
|
@ -0,0 +1,292 @@
|
|||
% !TEX encoding = UTF-8 Unicode
|
||||
% -*- coding: UTF-8; -*-
|
||||
% vim: set fenc=utf-8
|
||||
%----- Informations générales
|
||||
\NeedsTeXFormat{LaTeX2e}[1999/01/01]
|
||||
\ProvidesPackage{ensps}[2019/04/23 v1.0 ensps: standard scientific documents layout for ENS-PS - Copyright (C) Bastien Laville and Leopold Clement, 2020 ]
|
||||
|
||||
%------------------------------------------ CHARGEMENT DES EXTENSIONS ------------------------------------------%
|
||||
|
||||
% ------------- Langue et encodage utilisés -------------
|
||||
\RequirePackage[T1]{fontenc}
|
||||
\RequirePackage[utf8]{inputenc} % Reconnaissance des lettres du clavier
|
||||
\RequirePackage{babel}
|
||||
|
||||
% ------------- Mise en page -------------
|
||||
\RequirePackage[a4paper]{geometry} % Mise en page acceptable
|
||||
\RequirePackage[final]{microtype} % Pour améliorer la qualité de la lecture avec la microtypotypographie (protrusion et kerning)
|
||||
\RequirePackage[pdfencoding=auto,psdextra]{hyperref} % Importer hypertexte avec possibilités de mettre des caractères utf8 dans les métadonnées
|
||||
\hypersetup{pdftoolbar=true, % show Acrobat’s toolbar?
|
||||
pdfmenubar=true, % show Acrobat’s menu?
|
||||
pdffitwindow=false, % window fit to page when opened
|
||||
pdfstartview={FitH}, % fits the width of the page to the window
|
||||
pdfnewwindow=true, % links in new PDF window
|
||||
pdfcreator={Paquet LaTeX ENS PS (B. Laville, L.Clement) - 2020}}
|
||||
\newcommand{\reff}[1]{\textbf{\textcolor{ENSBlue}{\textsc{\ref{#1}}}}} % Pour réaliser des citations potables
|
||||
|
||||
% ------------- Mise en page 2 -------------
|
||||
\RequirePackage{graphicx} % Pour importer des images
|
||||
\RequirePackage{booktabs} % Pour introduire des tableaux
|
||||
\RequirePackage[toc,page]{appendix} % Pour créer des appendices
|
||||
%\RequirePackage[Bjornstrup]{fncychap} % Si on fait un report ou book
|
||||
\RequirePackage{lmodern}
|
||||
\RequirePackage{fancyhdr} % Des titres fouqués
|
||||
\RequirePackage{lipsum} % Mettre du texte lipsum, pour faire une maquette de rapport
|
||||
\RequirePackage{framed} % Des cadres pougnés
|
||||
\RequirePackage{bm} % Du texte en gras bien fait
|
||||
\RequirePackage{nomencl} % Faire une nomenclature
|
||||
\RequirePackage[footnote]{acronym} % Des acronymes accessibles et définissables
|
||||
|
||||
% ------------- En-têtes -------------
|
||||
% On définit ici des en-têtes de page avec titre de la section courante et numéro de page
|
||||
\renewcommand{\baselinestretch}{1.05}
|
||||
\setlength{\headheight}{27.06pt}
|
||||
\usepackage{fancyhdr}
|
||||
\pagestyle{fancy}
|
||||
\fancyhf{}
|
||||
\rhead{\nouppercase{\thepage}}
|
||||
\lhead{\nouppercase{\rightmark}}
|
||||
|
||||
% ------------- Images, figures et tables -------------
|
||||
\RequirePackage{epstopdf} % Utiliser le format .eps
|
||||
\RequirePackage[pages=some]{background} % Pour mettre un fond, pages=some permet de choisir les pages concernées
|
||||
\RequirePackage{epsfig} % Convertisseur eps à pdf
|
||||
\RequirePackage{float} % Pour avoir des tableaux qui restent dans leurs sections
|
||||
\RequirePackage{graphicx} % Importer image
|
||||
\RequirePackage{array} % Importer tableau
|
||||
\RequirePackage{colortbl} % Couleurs dans un tableau
|
||||
\RequirePackage{array} % Pour des tableaux bien formatés
|
||||
\RequirePackage{multirow} % Fusion des lignes dans les tableaux
|
||||
|
||||
% ------------- Des sections et des sous-titres -------------
|
||||
\RequirePackage{titlesec} % Macros pour changer le style des titres de section
|
||||
\RequirePackage{sectsty} % Changer le style des sections
|
||||
\RequirePackage{caption} % Macros pour changer le style des titres de figure
|
||||
\RequirePackage{subcaption} % Macros pour changer le style des sous-titres de figure
|
||||
|
||||
%% Draft %%
|
||||
\RequirePackage{draftwatermark}
|
||||
\SetWatermarkScale{3}
|
||||
|
||||
% ------------- Du dessin et des couleurs -------------
|
||||
\RequirePackage{xcolor} % Changer la couleur
|
||||
\RequirePackage[most]{tcolorbox}
|
||||
\RequirePackage{tikz} % Pour dessiner
|
||||
\RequirePackage{schemabloc} % Dessiner des schémas-blocs avec tikz
|
||||
\RequirePackage[siunitx, american, smartlabels, cute inductors, oldvoltagedirection]{circuitikz} % Pour dessiner des circuits électroniques
|
||||
\usetikzlibrary{babel} % Pour éviter des conflits entre les paquets tikz et babel
|
||||
|
||||
|
||||
% ------------- Des maths et de l'info -------------
|
||||
\RequirePackage{listings} % Importer du code informatique et le travailler
|
||||
\RequirePackage{amsmath, amssymb, amsfonts, amsthm, mathtools} % mathtools for: Aboxed (put box on last equation in align envirenment)
|
||||
\RequirePackage{mathpazo} % La police d'écriture utilisée dans tout le document
|
||||
\RequirePackage{mathrsfs} % Pour des lettres (capitales) calligraphiées
|
||||
\RequirePackage{siunitx} % Des unités bien écrites, par exemple pour les valeurs numériques
|
||||
\sisetup{locale = FR} % Pour avoir les bonnes conventions typographiques des unités
|
||||
|
||||
% ------------- Une biliographie -------------
|
||||
\bibliographystyle{plain-fr} % Biblio en français
|
||||
|
||||
|
||||
% ------------- Les options du paquet -------------
|
||||
\DeclareOption{...}{...}
|
||||
\DeclareOption*{\PackageWarning{examplepackage}{Unknown ‘\CurrentOption’}} % Créer un warning pour signaler que l'option n'existe pas
|
||||
\ProcessOptions
|
||||
|
||||
|
||||
%------------------------------------------DÉFINITIONS DES COULEURS------------------------------------------%
|
||||
|
||||
\definecolor{ENSBlue}{RGB}{0, 119, 139}
|
||||
\definecolor{ENSJaunePorte}{RGB}{255, 180, 50}
|
||||
\definecolor{ENSBleuCheminee}{RGB}{70, 35, 0}
|
||||
\definecolor{ENSBrunBois}{RGB}{210, 160, 90}
|
||||
\definecolor{ENSNoir}{RGB}{0, 0, 0}
|
||||
\definecolor{ENSVertFenetre}{RGB}{130, 190, 50}
|
||||
\definecolor{ENSGrisBeton}{RGB}{190, 190, 190}
|
||||
\definecolor{ENSRougeBrique}{RGB}{240, 130, 90}
|
||||
\definecolor{matlabGreen}{RGB}{28, 172, 0} % Pour le listing des codes
|
||||
\definecolor{matlabLilas}{RGB}{170, 55, 241}
|
||||
|
||||
|
||||
%------------------------------------------SECTIONS, FIGURES ET TABLEAUX------------------------------------------%
|
||||
|
||||
\chapterfont{\color{ENSBlue}} % Choisir la couleur des chapitres
|
||||
\sectionfont{\color{ENSBlue}\sffamily} % Choisir la couleur des sections
|
||||
\subsectionfont{\color{ENSRougeBrique}\sffamily\itshape} % Choisir la couleur des sous-sections
|
||||
\subsubsectionfont{\color{ENSRougeBrique}\sffamily\itshape} % Choisir la couleur des sous-sections
|
||||
\DeclareCaptionFont{CaptionENS}{\color{ENSRougeBrique}}
|
||||
\captionsetup[table]{labelfont={CaptionENS,bf}}
|
||||
\captionsetup[figure]{labelfont={CaptionENS,bf}}
|
||||
\captionsetup[subfigure]{labelfont=bf,textfont=sf}
|
||||
|
||||
|
||||
%------------------------------------------DES CADRES POUR METTRE DE L'EMPHASE------------------------------------------%
|
||||
|
||||
|
||||
\newenvironment{cadregris}{
|
||||
\def\FrameCommand{{\color{ENSBlue}\vrule width 3pt}\colorbox{ENSGrisBeton}}%
|
||||
\MakeFramed {\advance\hsize-\width \FrameRestore}}%
|
||||
{\endMakeFramed}
|
||||
|
||||
|
||||
%------------------------------------------RACCOURCIS MATHEMATIQUES------------------------------------------%
|
||||
|
||||
%------- Dérivation et opérateurs
|
||||
|
||||
\newcommand{\grs}[1] {\mathrm{#1}}
|
||||
\newcommand{\ud}{\ensuremath{\, \mathrm{d}}}
|
||||
\newcommand{\eqdef}{\stackrel{\mathrm{def}}{=}}
|
||||
|
||||
\newcommand{\subt}[1] {\ensuremath{_{\text{#1}}}}
|
||||
\newcommand{\supt}[1] {\ensuremath{^{\text{#1}}}}
|
||||
\newcommand{\citea}[1] {$^{\text{\cite{#1}}}$}
|
||||
\newcommand{\grad}[1] {\vec{\grs{grad}}\left( #1 \right)}
|
||||
\newcommand{\rot}[1] {\vec{\grs{rot}}\left( \vec{#1} \right)}
|
||||
\newcommand{\rota}[1] {\vec{\grs{rot}}\left( #1 \right)}
|
||||
\renewcommand{\div}[1] {\grs{div}\left( \vec{#1} \right)}
|
||||
\newcommand{\diva}[1] {\grs{div}\left( #1 \right)}
|
||||
\newcommand{\oper}[3] {\langle #1 \arrowvert #2 \arrowvert #3 \rangle}
|
||||
\newcommand{\derp}[2] {\dfrac{\partial\, #1}{\partial\, #2}}
|
||||
\newcommand{\derd}[2] {\dfrac{\grs{d}\, #1}{\grs{d}\, #2}}
|
||||
\newcommand{\derD}[2] {\dfrac{\grs{D}\, #1}{\grs{D}\, #2}}
|
||||
\newcommand{\derda}[2] {\dfrac{\grs{d}^2\, #1}{\grs{d} #2^2}}
|
||||
\newcommand{\derdb}[2] {\dfrac{\grs{d}^2\, #1}{\grs{d} #2 ^2}}
|
||||
\newcommand{\derpb}[2] {\dfrac{\partial^2\, #1}{\partial #2 ^2}}
|
||||
\newcommand{\bra}[1] {\langle #1 |}
|
||||
\newcommand{\ket}[1] {| #1 \rangle}
|
||||
\newcommand{\bracket}[1] {\langle #1 \rangle}
|
||||
\newcommand{\bracketb}[2] {\langle #1 \arrowvert #2 \rangle}
|
||||
\newcommand{\bracketc}[1] {\langle #1 \arrowvert #1 \rangle}
|
||||
|
||||
%------- Lettres grecques disponibles dans le texte
|
||||
|
||||
\newcommand{\ttt} {\ensuremath{\forall}}
|
||||
\newcommand{\alphat} {\ensuremath{\alpha}}
|
||||
\newcommand{\betat} {\ensuremath{\beta}}
|
||||
\newcommand{\taut} {\ensuremath{\tau}}
|
||||
\newcommand{\nut} {\ensuremath{\nu}}
|
||||
\newcommand{\varepsilont} {\ensuremath{\varepsilon}}
|
||||
\newcommand{\epsilont} {\ensuremath{\varepsilon}}
|
||||
\newcommand{\omegat} {\ensuremath{\omega}}
|
||||
\newcommand{\phit} {\ensuremath{\varphi}}
|
||||
\newcommand{\deltat} {\ensuremath{\delta}}
|
||||
\newcommand{\Deltat} {\ensuremath{\Delta}}
|
||||
\newcommand{\thetat} {\ensuremath{\theta}}
|
||||
\newcommand{\sigmat} {\ensuremath{\sigma}}
|
||||
\newcommand{\pit} {\ensuremath{\pi} }
|
||||
\newcommand{\chit} {\ensuremath{\chi}}
|
||||
\newcommand{\mut} {\ensuremath{\mu}}
|
||||
\newcommand{\lambdat} {\ensuremath{\lambda}}
|
||||
\newcommand{\rhot} {\ensuremath{\rho}}
|
||||
\newcommand{\kappat} {\ensuremath{\kappa}}
|
||||
\newcommand{\gammat} {\ensuremath{\gamma}}
|
||||
\newcommand{\etat} {\ensuremath{\eta}}
|
||||
|
||||
|
||||
|
||||
%------- Raccourcis du turfu
|
||||
|
||||
\newcommand{\ds}{\displaystyle}
|
||||
\newcommand{\vr}{\overrightarrow}
|
||||
|
||||
%------- Notation des ensembles
|
||||
|
||||
\newcommand{\Lesp}[1] {\ensuremath{\mathrm{L}^{#1}}} % Pour composer les espace L^p
|
||||
\newcommand{\A} {\ensuremath{\mathcal{A}}}
|
||||
\newcommand{\R} {\ensuremath{\mathbb{R}}}
|
||||
\newcommand{\CC} {\ensuremath{\mathbb{C}}}
|
||||
\newcommand{\N} {\ensuremath{\mathbb{N}}}
|
||||
\newcommand{\K} {\ensuremath{\mathbb{K}}}
|
||||
\newcommand{\Lens} {\mathcal{L}} % Lens pour "l'ENSemble L"
|
||||
\newcommand{\Pens} {\mathcal{P}} % Pareil pour P
|
||||
\newcommand{\M} {\ensuremath{\mathcal{M}}}
|
||||
\newcommand{\B} {\ensuremath{\mathcal{B}}}
|
||||
\newcommand{\dom} {\ensuremath{\mathcal{D}}}
|
||||
\newcommand{\surf} {\ensuremath{\mathcal{S}}}
|
||||
\newcommand{\cont} {\ensuremath{\mathcal{C}}}
|
||||
|
||||
|
||||
%------- Abréviations, langages et programme utiles
|
||||
|
||||
\newcommand{\ens}{École normale supérieur Paris-Saclay}
|
||||
\newcommand{\matlab}{\textsc{Matlab}}
|
||||
\newcommand{\python}{\emph{python}}
|
||||
|
||||
|
||||
%------- Fonctions de traitement du signal
|
||||
|
||||
\DeclareMathOperator{\sinc} {sinc}
|
||||
\DeclareMathOperator{\sgn} {\text{sgn}}
|
||||
\DeclareMathOperator*{\argmax} {argmax}
|
||||
\DeclareMathOperator*{\argmin} {argmin}
|
||||
\newcommand{\vect} {\text{Vect}}
|
||||
\newcommand{\esp} {\ensuremath{\mathbb{E}}}
|
||||
\newcommand{\hilbert} {\ensuremath{\mathcal{H}}}
|
||||
\newcommand{\fourier} {\ensuremath{\mathcal{F}}}
|
||||
|
||||
% Ces 4 lignes définissent la lettre sha pour le peigne de Dirac (et pas le vieux "Pgn" comme "pougne")
|
||||
\DeclareFontFamily{U} {wncy}{}
|
||||
\DeclareFontShape{U} {wncy}{m}{n}{<->wncyr10}{}
|
||||
\DeclareSymbolFont{mcy} {U}{wncy}{m}{n}
|
||||
\DeclareMathSymbol{\Sh} {\mathord}{mcy}{"58}
|
||||
|
||||
%------- Autres
|
||||
|
||||
|
||||
%------------------------------------------METTRE DU CODE INFORMATIQUE------------------------------------------%
|
||||
|
||||
\lstset{language=python,%
|
||||
basicstyle=\footnotesize,
|
||||
breaklines=false,%,
|
||||
keywordstyle=\color{blue},%
|
||||
morekeywords=[2]{1}, keywordstyle=[2]{\color{black}},
|
||||
identifierstyle=\color{black},%
|
||||
stringstyle=\color{CentraleRed},
|
||||
commentstyle=\color{CentraleGray},%
|
||||
showstringspaces=false,%without this there will be a symbol in the places where there is a space
|
||||
numbers=left,%
|
||||
numberstyle={\tiny \color{black}},% size of the numbers
|
||||
numbersep=9pt, % this defines how far the numbers are from the text
|
||||
emph=[1]{for,end,break},emphstyle=[1]\color{red}, %some words to emphasise
|
||||
%emph=[2]{word1,word2}, emphstyle=[2]{style},
|
||||
}
|
||||
|
||||
\lstset{language=Matlab, % Use MATLAB
|
||||
frame=single, % Single frame around code
|
||||
basicstyle=\small\ttfamily, % Use small true type font
|
||||
keywordstyle=[1]\color{blue}\bfseries, % MATLAB functions bold and blue
|
||||
keywordstyle=[2]\color{matlabLilas}, % MATLAB function arguments purple
|
||||
keywordstyle=[3]\color{blue}\underbar, % User functions underlined and blue
|
||||
identifierstyle=, % Nothing special about identifiers
|
||||
% Comments small green courier
|
||||
commentstyle=\usefont{T1}{pcr}{m}{sl}\color{matlabGreen}\small,
|
||||
stringstyle=\color{matlabLilas}, % Strings are purple
|
||||
breaklines=true,
|
||||
showstringspaces=false, % Don't put marks in string spaces
|
||||
tabsize=5, % 5 spaces per tab
|
||||
title=\lstname,
|
||||
framextopmargin=2pt,
|
||||
framexbottommargin=2pt,
|
||||
%
|
||||
%%% Put standard MATLAB functions not included in the default
|
||||
%%% language here
|
||||
morekeywords={xlim,ylim,var,alpha,factorial,poissrnd,normpdf,normcdf},
|
||||
%
|
||||
%%% Put MATLAB function parameters here
|
||||
morekeywords=[2]{on, off, interp},
|
||||
%
|
||||
%%% Put user defined functions here
|
||||
morekeywords=[3]{FindESS, homework_example},
|
||||
%
|
||||
morecomment=[l][\color{blue}]{...}, % Line continuation (...) like blue comment
|
||||
numbers=left, % Line numbers on left
|
||||
firstnumber=1, % Line numbers start with line 1
|
||||
numberstyle=\tiny\color{CentraleRed}, % Line numbers are blue
|
||||
stepnumber=5 % Line numbers go in steps of 5
|
||||
}
|
||||
|
||||
|
||||
|
||||
%----- Fin du paquet
|
||||
\endinput
|
BIN
ensps_sty_logo.png
Normal file
BIN
ensps_sty_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.9 KiB |
BIN
logo_ENSPS_UPS.png
Normal file
BIN
logo_ENSPS_UPS.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 105 KiB |
24
makefile
Normal file
24
makefile
Normal file
|
@ -0,0 +1,24 @@
|
|||
FIGURES_SVG=$(wildcard raw_img/*.svg)
|
||||
FIGURES_PDF=$(subst raw_img/,pdf_img/,$(FIGURES_SVG:.svg=.pdf_tex))
|
||||
|
||||
all : rapport.tex rapport.bib $(FIGURES_PDF)
|
||||
lualatex -shell-escape rapport.tex
|
||||
bibtex rapport
|
||||
lualatex -shell-escape rapport.tex
|
||||
lualatex -shell-escape rapport.tex
|
||||
|
||||
clean :
|
||||
rm -f rapport.aux
|
||||
rm -f rapport.bbl
|
||||
rm -f rapport.blg
|
||||
rm -f rapport.out
|
||||
rm -f rapport.log
|
||||
rm -f rapport.pdf
|
||||
rm -f rapport.toc
|
||||
rm -r pdf_img/
|
||||
|
||||
pdf_img/%.pdf : raw_img/%.svg pdf_img/%.pdf_tex
|
||||
inkscape -D -z --file=$< --export-pdf=$@ --export-latex
|
||||
|
||||
pdf_img/%.pdf_tex : raw_img/%.svg
|
||||
inkscape -D -z --file=$< --export-pdf=$@ --export-latex
|
383
rapport.bib
Normal file
383
rapport.bib
Normal file
|
@ -0,0 +1,383 @@
|
|||
|
||||
@article{ahmedFairnessAwareGroup2011,
|
||||
title = {Fairness {{Aware Group Proportional Frequency Domain Resource Allocation}} in {{L}}-{{SC}}-{{FDMA Based Uplink}}},
|
||||
author = {Ahmed, Irfan and Mohamed, Amr},
|
||||
year = {2011},
|
||||
volume = {04},
|
||||
pages = {487--494},
|
||||
issn = {1913-3715, 1913-3723},
|
||||
doi = {10.4236/ijcns.2011.48060},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/H8M4DAE6/Ahmed et Mohamed - 2011 - Fairness Aware Group Proportional Frequency Domain.pdf},
|
||||
journal = {International Journal of Communications, Network and System Sciences},
|
||||
number = {08}
|
||||
}
|
||||
|
||||
@incollection{ancillottiRTTBasedCongestionControl2018,
|
||||
title = {{{RTT}}-{{Based Congestion Control}} for the {{Internet}} of {{Things}}},
|
||||
booktitle = {Wired/{{Wireless Internet Communications}}},
|
||||
author = {Ancillotti, Emilio and Bolettieri, Simone and Bruno, Raffaele},
|
||||
editor = {Chowdhury, Kaushik Roy and Di Felice, Marco and Matta, Ibrahim and Sheng, Bo},
|
||||
year = {2018},
|
||||
volume = {10866},
|
||||
pages = {3--15},
|
||||
publisher = {{Springer International Publishing}},
|
||||
address = {{Cham}},
|
||||
doi = {10.1007/978-3-030-02931-9_1},
|
||||
abstract = {The design of scalable and reliable transport protocols for IoT environments is still an unsolved issue. A simple stop-and-wait congestion control method and a lightweight reliability mechanism are only implemented in CoAP, an application protocol that provides standardised RESTful services for IoT devices. Inspired by delay-based congestion control algorithms that have been proposed for the TCP, in this work we propose a rate control technique that leverages measurements of roundtrip times (RTTs) to infer network state and to determine the flow rate that would prevent network congestion. Our key idea is that the growth of RTT variance, coupled with thresholds on CoAP message losses, is an effective way to detect the onset of network congestion. To validate our approach, we conduct a comparative performance analysis with the two loss-based congestion control methods of standard CoAP under different application scenarios. Results show that our solution outperforms the alternative methods, with a significant improvement of fairness and robustness against unacknowledged traffic.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/V8MFYI2R/Ancillotti et al. - 2018 - RTT-Based Congestion Control for the Internet of T.pdf},
|
||||
isbn = {978-3-030-02930-2 978-3-030-02931-9},
|
||||
language = {en}
|
||||
}
|
||||
|
||||
@inproceedings{ancillottiRTTBasedCongestionControl2018a,
|
||||
title = {{{RTT}}-{{Based Congestion Control}} for the {{Internet}} of {{Things}}},
|
||||
booktitle = {International {{Conference}} on {{Wired}}/{{Wireless Internet Communication}} ({{WWIC}})},
|
||||
author = {Ancillotti, Emilio and Bolettieri, Simone and Bruno, Raffaele},
|
||||
year = {2018},
|
||||
month = jun,
|
||||
volume = {LNCS-10866},
|
||||
pages = {3},
|
||||
publisher = {{Springer International Publishing}},
|
||||
doi = {10.1007/978-3-030-02931-9_1},
|
||||
abstract = {The design of scalable and reliable transport protocols for IoT environments is still an unsolved issue. A simple stop-and-wait congestion control method and a lightweight reliability mechanism are only implemented in CoAP, an application protocol that provides standardised RESTful services for IoT devices. Inspired by delay-based congestion control algorithms that have been proposed for the TCP, in this work we propose a rate control technique that leverages measurements of round-trip times (RTTs) to infer network state and to determine the flow rate that would prevent network congestion. Our key idea is that the growth of RTT variance, coupled with thresholds on CoAP message losses, is an effective way to detect the onset of network congestion. To validate our approach, we conduct a comparative performance analysis with the two loss-based congestion control methods of standard CoAP under different application scenarios. Results show that our solution outperforms the alternative methods, with a significant improvement of fairness and robustness against unacknowledged traffic.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/PEFCKHKA/Ancillotti et al. - 2018 - RTT-Based Congestion Control for the Internet of T.pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/FHBCKQBZ/hal-02269740.html},
|
||||
language = {en}
|
||||
}
|
||||
|
||||
@article{bormannBlockWiseTransfersConstrained2016,
|
||||
title = {Block-{{Wise Transfers}} in the {{Constrained Application Protocol}} ({{CoAP}})},
|
||||
author = {Bormann, C. and Z. Shelby, Ed},
|
||||
year = {2016},
|
||||
issn = {2070-1721},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/HPKFQFKU/rfc7959.html},
|
||||
number = {RFC 7959}
|
||||
}
|
||||
|
||||
@techreport{bormannTerminologyConstrainedNodeNetworks2014,
|
||||
title = {Terminology for {{Constrained}}-{{Node Networks}}},
|
||||
author = {Bormann, C. and Ersue, M. and Keranen, A.},
|
||||
year = {2014},
|
||||
month = may,
|
||||
pages = {RFC7228},
|
||||
institution = {{RFC Editor}},
|
||||
doi = {10.17487/rfc7228},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/KXAF4RDI/Bormann et al. - 2014 - Terminology for Constrained-Node Networks.pdf},
|
||||
language = {en},
|
||||
number = {RFC7228}
|
||||
}
|
||||
|
||||
@techreport{bradnerKeyWordsUse1997,
|
||||
title = {Key Words for Use in {{RFCs}} to {{Indicate Requirement Levels}}},
|
||||
author = {Bradner, S.},
|
||||
year = {1997},
|
||||
month = mar,
|
||||
pages = {RFC2119},
|
||||
institution = {{RFC Editor}},
|
||||
doi = {10.17487/rfc2119},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/CSVTPM96/Bradner - 1997 - Key words for use in RFCs to Indicate Requirement .pdf},
|
||||
language = {en},
|
||||
number = {RFC2119}
|
||||
}
|
||||
|
||||
@article{FairnessMeasure2020,
|
||||
title = {Fairness Measure},
|
||||
year = {2020},
|
||||
month = dec,
|
||||
abstract = {Fairness measures or metrics are used in network engineering to determine whether users or applications are receiving a fair share of system resources. There are several mathematical and conceptual definitions of fairness.},
|
||||
annotation = {Page Version ID: 993616223},
|
||||
copyright = {Creative Commons Attribution-ShareAlike License},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/P7E9KWUD/index.html},
|
||||
journal = {Wikipedia},
|
||||
language = {en}
|
||||
}
|
||||
|
||||
@article{haileEndtoendCongestionControl2021,
|
||||
title = {End-to-End Congestion Control Approaches for High Throughput and Low Delay in {{4G}}/{{5G}} Cellular Networks},
|
||||
author = {Haile, Habtegebreil and Grinnemo, Karl-Johan and Ferlin, Simone and Hurtig, Per and Brunstrom, Anna},
|
||||
year = {2021},
|
||||
month = feb,
|
||||
volume = {186},
|
||||
pages = {107692},
|
||||
issn = {1389-1286},
|
||||
doi = {10.1016/j.comnet.2020.107692},
|
||||
abstract = {Cellular networks have evolved to support high peak bitrates with low loss rates as observed by the higher layers. However, applications and services running over cellular networks are now facing other difficult congestion-related challenges, most notably a highly variable link capacity and bufferbloat. To overcome these issues and improve performance of network traffic in 4G/5G cellular networks, a number of in-network and end-to-end solutions have been proposed. Fairness between interacting congestion control algorithms (CCAs) has played an important role in the type of CCAs considered for research and deployment. The placement of content closer to the user and the allocation of per-user queues in cellular networks has increased the likelihood of a cellular access bottleneck and reduced the extent of flow interaction between multiple users. This has resulted in renewed interest in end-to-end CCAs for cellular networks by opening up room for research and exploration. In this work, we present end-to-end CCAs that target a high throughput and a low latency over highly variable network links, and classify them according to the way they address the congestion control. The work also discusses the deployability of the algorithms. In addition, we provide insights into possible future research directions, such as coping with a higher degree of variability, interaction of CCAs in a shared bottleneck, and avenues for synergized research, such as CCAs assisted by software defined networking and network function virtualization. We hope that this work will serve as a starting point for systematically navigating through the expanding number of cellular CCAs.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/ZYVN97E6/Haile et al. - 2021 - End-to-end congestion control approaches for high .pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/ZBPCYB5Y/S1389128620312974.html},
|
||||
journal = {Computer Networks},
|
||||
keywords = {4G,5G,Congestion control,Mobile,QUIC,Survey,TCP,Wireless},
|
||||
language = {en}
|
||||
}
|
||||
|
||||
@techreport{hartkeObservingResourcesConstrained2015,
|
||||
title = {Observing {{Resources}} in the {{Constrained Application Protocol}} ({{CoAP}})},
|
||||
author = {Hartke, K.},
|
||||
year = {2015},
|
||||
month = sep,
|
||||
pages = {RFC7641},
|
||||
institution = {{RFC Editor}},
|
||||
doi = {10.17487/RFC7641},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/8VN6JIFQ/Hartke - 2015 - Observing Resources in the Constrained Application.pdf},
|
||||
language = {en},
|
||||
number = {RFC7641}
|
||||
}
|
||||
|
||||
@article{hochreiterLongShortTermMemory1997,
|
||||
title = {Long {{Short}}-{{Term Memory}}},
|
||||
author = {Hochreiter, Sepp and Schmidhuber, J{\"u}rgen},
|
||||
year = {1997},
|
||||
month = nov,
|
||||
volume = {9},
|
||||
pages = {1735--1780},
|
||||
issn = {0899-7667},
|
||||
doi = {10.1162/neco.1997.9.8.1735},
|
||||
abstract = {Learning to store information over extended time intervals by recurrent backpropagation takes a very long time, mostly because of insufficient, decaying error backflow. We briefly review Hochreiter's (1991) analysis of this problem, then address it by introducing a novel, efficient, gradient based method called long short-term memory (LSTM). Truncating the gradient where this does not do harm, LSTM can learn to bridge minimal time lags in excess of 1000 discrete-time steps by enforcing constant error flow through constant error carousels within special units. Multiplicative gate units learn to open and close access to the constant error flow. LSTM is local in space and time; its computational complexity per time step and weight is O. 1. Our experiments with artificial data involve local, distributed, real-valued, and noisy pattern representations. In comparisons with real-time recurrent learning, back propagation through time, recurrent cascade correlation, Elman nets, and neural sequence chunking, LSTM leads to many more successful runs, and learns much faster. LSTM also solves complex, artificial long-time-lag tasks that have never been solved by previous recurrent network algorithms.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/E29B3BIB/Hochreiter et Schmidhuber - 1997 - Long Short-Term Memory.pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/CZ2ERT63/Long-Short-Term-Memory.html},
|
||||
journal = {Neural Computation},
|
||||
number = {8}
|
||||
}
|
||||
|
||||
@article{jainQuantitativeMeasureFairness1998,
|
||||
title = {A {{Quantitative Measure Of Fairness And Discrimination For Resource Allocation In Shared Computer Systems}}},
|
||||
author = {Jain, R. and Chiu, D. and Hawe, W.},
|
||||
year = {1998},
|
||||
month = sep,
|
||||
abstract = {Fairness is an important performance criterion in all resource allocation schemes, including those in distributed computer systems. However, it is often specified only qualitatively. The quantitative measures proposed in the literature are either too specific to a particular application, or suffer from some undesirable characteristics. In this paper, we have introduced a quantitative measure called Indiex of FRairness. The index is applicable to any resource sharing or allocation problem. It is independent of the amount of the resource. The fairness index always lies between 0 and 1. This boundedness aids intuitive understanding of the fairness index. For example, a distribution algorithm with a fairness of 0.10 means that it is unfair to 90\% of the users. Also, the discrimination index can be defined as 1 - fairness index.},
|
||||
archiveprefix = {arXiv},
|
||||
eprint = {cs/9809099},
|
||||
eprinttype = {arxiv},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/NZS4CZVM/Jain et al. - 1998 - A Quantitative Measure Of Fairness And Discriminat.pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/PP7ZG8W3/9809099.html},
|
||||
journal = {arXiv:cs/9809099},
|
||||
keywords = {C.2.1,Computer Science - Networking and Internet Architecture}
|
||||
}
|
||||
|
||||
@inproceedings{jayDeepReinforcementLearning2019,
|
||||
title = {A {{Deep Reinforcement Learning Perspective}} on {{Internet Congestion Control}}},
|
||||
booktitle = {International {{Conference}} on {{Machine Learning}}},
|
||||
author = {Jay, Nathan and Rotman, Noga and Godfrey, Brighten and Schapira, Michael and Tamar, Aviv},
|
||||
year = {2019},
|
||||
month = may,
|
||||
pages = {3050--3059},
|
||||
publisher = {{PMLR}},
|
||||
issn = {2640-3498},
|
||||
abstract = {We present and investigate a novel and timely application domain for deep reinforcement learning (RL): Internet congestion control. Congestion control is the core networking task of modulating traf...},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/J3EGXP4X/Jay et al. - 2019 - A Deep Reinforcement Learning Perspective on Inter.pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/4LBJU9M4/jay19a.html},
|
||||
language = {en}
|
||||
}
|
||||
|
||||
@techreport{kushalnagarIPv6LowPowerWireless2007,
|
||||
title = {{{IPv6}} over {{Low}}-{{Power Wireless Personal Area Networks}} ({{6LoWPANs}}): {{Overview}}, {{Assumptions}}, {{Problem Statement}}, and {{Goals}}},
|
||||
shorttitle = {{{IPv6}} over {{Low}}-{{Power Wireless Personal Area Networks}} ({{6LoWPANs}})},
|
||||
author = {Kushalnagar, N. and Montenegro, G. and Schumacher, C.},
|
||||
year = {2007},
|
||||
month = aug,
|
||||
pages = {RFC4919},
|
||||
institution = {{RFC Editor}},
|
||||
doi = {10.17487/rfc4919},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/EE2RHNFM/Kushalnagar et al. - 2007 - IPv6 over Low-Power Wireless Personal Area Network.pdf},
|
||||
language = {en},
|
||||
number = {RFC4919}
|
||||
}
|
||||
|
||||
@inproceedings{lanDeepReinforcementLearning2019,
|
||||
title = {A {{Deep Reinforcement Learning Based Congestion Control Mechanism}} for {{NDN}}},
|
||||
booktitle = {{{ICC}} 2019 - 2019 {{IEEE International Conference}} on {{Communications}} ({{ICC}})},
|
||||
author = {Lan, Dehao and Tan, Xiaobin and Lv, Jinyang and Jin, Yang and Yang, Jian},
|
||||
year = {2019},
|
||||
month = may,
|
||||
pages = {1--7},
|
||||
issn = {1938-1883},
|
||||
doi = {10.1109/ICC.2019.8761737},
|
||||
abstract = {Named Data Networking (NDN) is an emerging future network architecture that changes the network communication model from push mode to pull mode, which leads to the requirement of a new mechanism of congestion control. To fully exploit the capability of NDN, a suitable congestion control scheme must consider the characteristics of NDN, such as connectionless, in-network caching, content perceptibility, etc. In this paper, firstly, we redefine the congestion control objective for NDN, which considers requirements diversities for different contents. Then we design and develop an efficient congestion control mechanism based on deep reinforcement learning (DRL), namely DRL-based Congestion Control Protocol (DRL-CCP). DRL-CCP enables consumers to automatically learn the optimal congestion control policy from historical congestion control experience. Finally, a real-world test platform with some typical congestion control algorithms for NDN is implemented, and a series of comparative experiments are performed on this platform to verify the performance of DRL-CCP.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/JD3BUTCA/8761737.html},
|
||||
keywords = {Data models,Deep learning,Neural networks,Protocols,Reinforcement learning,TCPIP,Training}
|
||||
}
|
||||
|
||||
@article{leeEnhancementCongestionControl2016,
|
||||
title = {Enhancement of Congestion Control of {{Constrained Application Protocol}}/{{Congestion Control}}/{{Advanced}} for {{Internet}} of {{Things}} Environment},
|
||||
author = {Lee, Jung and Kim, Kyung and Youn, Hee},
|
||||
year = {2016},
|
||||
month = nov,
|
||||
volume = {12},
|
||||
doi = {10.1177/1550147716676274},
|
||||
abstract = {With the wide spread of Internet of Things, efficient communication between the nodes is getting more important. Constrained Application Protocol was developed to accommodate the resource-constrained nodes and low-power communication links. Being an Internet protocol, Constrained Application Protocol must adhere to congestion control, primarily to keep the backbone network stable. An advanced congestion control mechanism for Constrained Application Protocol, called Congestion Control/Advanced, has also been recently developed. In this article, we propose a new round trip time\textendash based adaptive congestion control scheme, which further improves Congestion Control/Advanced by utilizing the retransmission count in estimating the retransmission timeout value and the lower bound in round trip time variation. An experiment is conducted based on Californium Constrained Application Protocol framework and real devices, and the performance is compared with Constrained Application Protocol, Congestion Control/Advanced, and an existing scheme. It reveals that the proposed scheme significantly increases the throughput and rate of successful transactions in comparison with the other schemes. The approach of utilizing the option field of Constrained Application Protocol enables the proposed scheme to be implemented without any conflict with the existing protocol and extra overhead.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/ESXYH32D/Lee et al. - 2016 - Enhancement of congestion control of Constrained A.pdf},
|
||||
journal = {International Journal of Distributed Sensor Networks}
|
||||
}
|
||||
|
||||
@article{liQTCPAdaptiveCongestion2019,
|
||||
title = {{{QTCP}}: {{Adaptive Congestion Control}} with {{Reinforcement Learning}}},
|
||||
shorttitle = {{{QTCP}}},
|
||||
author = {Li, Wei and Zhou, Fan and Chowdhury, Kaushik Roy and Meleis, Waleed},
|
||||
year = {2019},
|
||||
month = jul,
|
||||
volume = {6},
|
||||
pages = {445--458},
|
||||
issn = {2327-4697, 2334-329X},
|
||||
doi = {10.1109/TNSE.2018.2835758},
|
||||
abstract = {Next generation network access technologies and Internet applications have increased the challenge of providing satisfactory quality of experience for users with traditional congestion control protocols. Efforts on optimizing the performance of TCP by modifying the core congestion control method depending on specific network architectures or apps do not generalize well under a wide range of network scenarios. This limitation arises from the rule-based design principle, where the performance is linked to a pre-decided mapping between the observed state of the network to the corresponding actions. Therefore, these protocols are unable to adapt their behavior in new environments or learn from experience for better performance. We address this problem by integrating a reinforcement-based Q-learning framework with TCP design in our approach called QTCP. QTCP enables senders to gradually learn the optimal congestion control policy in an on-line manner. QTCP does not need hard-coded rules, and can therefore generalize to a variety of different networking scenarios. Moreover, we develop a generalized Kanerva coding function approximation algorithm, which reduces the computation complexity of value functions and the searchable size of the state space. We show that QTCP outperforms the traditional rule-based TCP by providing 59.5\% higher throughput while maintaining low transmission latency.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/DBTMF6SI/Li et al. - 2019 - QTCP Adaptive Congestion Control with Reinforceme.pdf},
|
||||
journal = {IEEE Transactions on Network Science and Engineering},
|
||||
language = {en},
|
||||
number = {3}
|
||||
}
|
||||
|
||||
@article{mccallGeneticAlgorithmsModelling2005,
|
||||
title = {Genetic Algorithms for Modelling and Optimisation},
|
||||
author = {McCall, John},
|
||||
year = {2005},
|
||||
month = dec,
|
||||
volume = {184},
|
||||
pages = {205--222},
|
||||
issn = {0377-0427},
|
||||
doi = {10.1016/j.cam.2004.07.034},
|
||||
abstract = {Genetic algorithms (GAs) are a heuristic search and optimisation technique inspired by natural evolution. They have been successfully applied to a wide range of real-world problems of significant complexity. This paper is intended as an introduction to GAs aimed at immunologists and mathematicians interested in immunology. We describe how to construct a GA and the main strands of GA theory before speculatively identifying possible applications of GAs to the study of immunology. An illustrative example of using a GA for a medical optimal control problem is provided. The paper also includes a brief account of the related area of artificial immune systems.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/ZWGD35YA/McCall - 2005 - Genetic algorithms for modelling and optimisation.pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/VAQQGXRW/S0377042705000774.html},
|
||||
journal = {Journal of Computational and Applied Mathematics},
|
||||
keywords = {Evolution,Genetic algorithms,Immunology,Optimisation},
|
||||
language = {en},
|
||||
number = {1},
|
||||
series = {Special {{Issue}} on {{Mathematics Applied}} to {{Immunology}}}
|
||||
}
|
||||
|
||||
@techreport{montenegroTransmissionIPv6Packets2007,
|
||||
title = {Transmission of {{IPv6 Packets}} over {{IEEE}} 802.15.4 {{Networks}}},
|
||||
author = {Montenegro, G. and Kushalnagar, N. and Hui, J. and Culler, D.},
|
||||
year = {2007},
|
||||
month = sep,
|
||||
pages = {RFC4944},
|
||||
institution = {{RFC Editor}},
|
||||
doi = {10.17487/rfc4944},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/8IBKXRLW/Montenegro et al. - 2007 - Transmission of IPv6 Packets over IEEE 802.15.4 Ne.pdf},
|
||||
language = {en},
|
||||
number = {RFC4944}
|
||||
}
|
||||
|
||||
@article{naDLTCPDeepLearningBased2019,
|
||||
title = {{{DL}}-{{TCP}}: {{Deep Learning}}-{{Based Transmission Control Protocol}} for {{Disaster 5G mmWave Networks}}},
|
||||
shorttitle = {{{DL}}-{{TCP}}},
|
||||
author = {Na, Woongsoo and Bae, Byungjun and Cho, Sukhee and Kim, Nayeon},
|
||||
year = {2019},
|
||||
volume = {7},
|
||||
pages = {145134--145144},
|
||||
issn = {2169-3536},
|
||||
doi = {10.1109/ACCESS.2019.2945582},
|
||||
abstract = {The 5G mobile communication system is attracting attention as one of the most suitable communication models for broadcasting and managing disaster situations, owing to its large capacity and low latency. High-quality videos taken by a drone, which is an embedded IoT device for shooting in a disaster environment, play an important role in managing the disaster. However, the 5G mmWave frequency band is susceptible to obstacles and has beam misalignment problems, severing the connection and greatly affecting the degradation of TCP performance. This problem becomes even more serious in high-mobility drones and disaster sites with many obstacles. To solve this problem, we propose a deep-learning-based TCP (DL-TCP) for a disaster 5G mmWave network. DL-TCP learns the node's mobility information and signal strength, and adjusts the TCP congestion window by predicting when the network is disconnected and reconnected. As a result of the experiment, DL-TCP provides better network stability and higher network throughput than the existing TCP NewReno, TCP Cubic, and TCP BBR.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/GCGKXV6U/Na et al. - 2019 - DL-TCP Deep Learning-Based Transmission Control P.pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/PV8BQ6LQ/8859212.html},
|
||||
journal = {IEEE Access},
|
||||
keywords = {5G,5G mobile communication,Bandwidth,Deep-learning,Machine learning,mmWave,Protocols,Signal to noise ratio,supervised-learning,TCP,Videos,Wireless communication}
|
||||
}
|
||||
|
||||
@article{oliveiraComputerNetworkTraffic2016,
|
||||
title = {Computer Network Traffic Prediction: {{A}} Comparison between Traditional and Deep Learning Neural Networks},
|
||||
shorttitle = {Computer Network Traffic Prediction},
|
||||
author = {Oliveira, Tiago and Barbar, Jamil and Soares, Alexsandro},
|
||||
year = {2016},
|
||||
month = jan,
|
||||
volume = {3},
|
||||
pages = {28},
|
||||
doi = {10.1504/IJBDI.2016.073903},
|
||||
abstract = {This paper compares four different artificial neural network approaches for computer network traffic forecast, such as: 1) multilayer perceptron (MLP) using the backpropagation as training algorithm; 2) MLP with resilient backpropagation (Rprop); (3) recurrent neural network (RNN); 4) deep learning stacked autoencoder (SAE). The computer network traffic is sampled from the traffic of the network devices that are connected to the internet. It is shown herein how a simpler neural network model, such as the RNN and MLP, can work even better than a more complex model, such as the SAE. Internet traffic prediction is an important task for many applications, such as adaptive applications, congestion control, admission control, anomaly detection and bandwidth allocation. In addition, efficient methods of resource management, such as the bandwidth, can be used to gain performance and reduce costs, improving the quality of service (QoS). The popularity of the newest deep learning methods have been increasing in several areas, but there is a lack of studies concerning time series prediction, such as internet traffic.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/PP28QWSB/Oliveira et al. - 2016 - Computer network traffic prediction A comparison .pdf},
|
||||
journal = {International Journal of Big Data Intelligence}
|
||||
}
|
||||
|
||||
@techreport{shelbyConstrainedApplicationProtocol2014,
|
||||
title = {The {{Constrained Application Protocol}} ({{CoAP}})},
|
||||
author = {Shelby, Z. and Hartke, K. and Bormann, C.},
|
||||
year = {2014},
|
||||
month = jun,
|
||||
pages = {RFC7252},
|
||||
institution = {{RFC Editor}},
|
||||
doi = {10.17487/rfc7252},
|
||||
language = {en},
|
||||
number = {RFC7252}
|
||||
}
|
||||
|
||||
@techreport{shelbyConstrainedRESTfulEnvironments2012,
|
||||
title = {Constrained {{RESTful Environments}} ({{CoRE}}) {{Link Format}}},
|
||||
author = {Shelby, Z.},
|
||||
year = {2012},
|
||||
month = aug,
|
||||
pages = {RFC6690},
|
||||
institution = {{RFC Editor}},
|
||||
doi = {10.17487/rfc6690},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/TJZ9ZDWD/Shelby - 2012 - Constrained RESTful Environments (CoRE) Link Forma.pdf},
|
||||
language = {en},
|
||||
number = {RFC6690}
|
||||
}
|
||||
|
||||
@article{spivakComparisonDigitalMaps2014,
|
||||
title = {Comparison of {{Digital Maps}}: {{Recognition}} and {{Quantitative Measure}} of {{Changes}}},
|
||||
shorttitle = {Comparison of {{Digital Maps}}},
|
||||
author = {Spivak, Lev and Spivak, Ivan and Sokolov, Alexey and Voinov, Sergey},
|
||||
year = {2014},
|
||||
volume = {06},
|
||||
pages = {415--422},
|
||||
issn = {2151-1950, 2151-1969},
|
||||
doi = {10.4236/jgis.2014.65036},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/39HVB5X5/Spivak et al. - 2014 - Comparison of Digital Maps Recognition and Quanti.pdf},
|
||||
journal = {Journal of Geographic Information System},
|
||||
number = {05}
|
||||
}
|
||||
|
||||
@book{tesslerReinforcementLearningDatacenter2021,
|
||||
title = {Reinforcement {{Learning}} for {{Datacenter Congestion Control}}},
|
||||
author = {Tessler, Chen and Shpigelman, Yuval and Dalal, Gal and Mandelbaum, Amit and Kazakov, Doron and Fuhrer, Benjamin and Chechik, Gal and Mannor, Shie},
|
||||
year = {2021},
|
||||
month = feb,
|
||||
abstract = {We approach the task of network congestion control in datacenters using Reinforcement Learning (RL). Successful congestion control algorithms can dramatically improve latency and overall network throughput. Until today, no such learning-based algorithms have shown practical potential in this domain. Evidently, the most popular recent deployments rely on rule-based heuristics that are tested on a predetermined set of benchmarks. Consequently, these heuristics do not generalize well to newly-seen scenarios. Contrarily, we devise an RL-based algorithm with the aim of generalizing to different configurations of real-world datacenter networks. We overcome challenges such as partial-observability, non-stationarity, and multi-objectiveness. We further propose a policy gradient algorithm that leverages the analytical structure of the reward function to approximate its derivative and improve stability. We show that this scheme outperforms alternative popular RL approaches, and generalizes to scenarios that were not seen during training. Our experiments, conducted on a realistic simulator that emulates communication networks' behavior, exhibit improved performance concurrently on the multiple considered metrics compared to the popular algorithms deployed today in real datacenters. Our algorithm is being productized to replace heuristics in some of the largest datacenters in the world.}
|
||||
}
|
||||
|
||||
@article{xiaoTCPDrincSmartCongestion2019,
|
||||
title = {{{TCP}}-{{Drinc}}: {{Smart Congestion Control Based}} on {{Deep Reinforcement Learning}}},
|
||||
shorttitle = {{{TCP}}-{{Drinc}}},
|
||||
author = {Xiao, Kefan and Mao, Shiwen and Tugnait, Jitendra K.},
|
||||
year = {2019},
|
||||
volume = {7},
|
||||
pages = {11892--11904},
|
||||
issn = {2169-3536},
|
||||
doi = {10.1109/ACCESS.2019.2892046},
|
||||
abstract = {As wired/wireless networks become more and more complex, the fundamental assumptions made by many existing TCP variants may not hold true anymore. In this paper, we develop a model-free, smart congestion control algorithm based on deep reinforcement learning, which has a high potential in dealing with the complex and dynamic network environment. We present TCP-Deep ReInforcement learNing-based Congestion control (Drinc) which learns from past experience in the form of a set of measured features to decide how to adjust the congestion window size. We present the TCP-Drinc design and validate its performance with extensive ns-3 simulations and comparison with five benchmark schemes.},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/FTP7JBFP/Xiao et al. - 2019 - TCP-Drinc Smart Congestion Control Based on Deep .pdf;/home/leopold/snap/zotero-snap/common/Zotero/storage/SECVK22A/8610116.html},
|
||||
journal = {IEEE Access},
|
||||
keywords = {Congestion control,deep convolutional neural network (DCNN),deep reinforcement learning (DRL),Delays,long short term memory (LSTM),machine learning,Microsoft Windows,Protocols,Reinforcement learning,Wireless communication,Wireless sensor networks}
|
||||
}
|
||||
|
||||
@article{yangResearchLaboratoryManagement2021,
|
||||
title = {Research on the {{Laboratory Management Mode Based}} on the {{Optimal Allocation}} of {{Resources}}},
|
||||
author = {Yang, Bo},
|
||||
year = {2021},
|
||||
volume = {08},
|
||||
pages = {1--8},
|
||||
issn = {2333-9721, 2333-9705},
|
||||
doi = {10.4236/oalib.1107119},
|
||||
journal = {OALib},
|
||||
number = {01}
|
||||
}
|
||||
|
||||
@article{zhaoResourceAllocationOFDMAMIMO2013,
|
||||
title = {Resource {{Allocation}} for {{OFDMA}}-{{MIMO Relay Systems}} with {{Proportional Fairness Constraints}}},
|
||||
author = {Zhao, Cuiru and Li, Youming and Chen, Bin and Wang, Zhao and Wang, Jiongtao},
|
||||
year = {2013},
|
||||
volume = {05},
|
||||
pages = {303--307},
|
||||
issn = {1949-2421, 1947-3826},
|
||||
doi = {10.4236/cn.2013.53B2056},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/SHNR6SNE/Zhao et al. - 2013 - Resource Allocation for OFDMA-MIMO Relay Systems w.pdf},
|
||||
journal = {Communications and Network},
|
||||
number = {03}
|
||||
}
|
||||
|
||||
@article{zhengResearchAirportTaxi2020,
|
||||
title = {Research on {{Airport Taxi Resource Allocation Based}} on {{Information Asymmetry}}},
|
||||
author = {Zheng, Yansong},
|
||||
year = {2020},
|
||||
volume = {08},
|
||||
pages = {763--769},
|
||||
issn = {2329-3284, 2329-3292},
|
||||
doi = {10.4236/ojbm.2020.82046},
|
||||
file = {/home/leopold/snap/zotero-snap/common/Zotero/storage/KHZSTVS8/Zheng - 2020 - Research on Airport Taxi Resource Allocation Based.pdf},
|
||||
journal = {Open Journal of Business and Management},
|
||||
number = {02}
|
||||
}
|
||||
|
||||
|
215
rapport.tex
Normal file
215
rapport.tex
Normal file
|
@ -0,0 +1,215 @@
|
|||
% !TEX encoding = UTF-8 Unicode
|
||||
% -*- coding: UTF-8; -*-
|
||||
% vim: set fenc=utf-8
|
||||
\documentclass[a4paper,12pt,french]{article}
|
||||
|
||||
\usepackage{ensps}
|
||||
|
||||
\hypersetup{
|
||||
pdftitle={Titre},
|
||||
pdfauthor={Auteur},
|
||||
pdfsubject={Sujet},
|
||||
pdfproducer={Conversion PDF},
|
||||
pdfkeywords={Quelques mots-clés} %
|
||||
}
|
||||
|
||||
\DeclareGraphicsRule{.ai}{pdf}{.ai}{} % Pour insérer des documents .ai
|
||||
\graphicspath{{./img/} {./eps/} {./fig/}} % Pour ne pas avoir à ajouter eps/ton-image.jpg
|
||||
|
||||
% ------------- Packages spéciaux, nécessaires pour ce rapport, à insérer ici -------------
|
||||
\usepackage{minted}
|
||||
|
||||
\newcommand{\iot}{\emph{IoT}}
|
||||
\newcommand{\tcp}{\emph{TCP}}
|
||||
\newcommand{\coap}{\emph{CoAP}}
|
||||
\newcommand{\keras}{\emph{keras}}
|
||||
\newcommand{\TF}{\emph{TensorFlow}}
|
||||
\newcommand{\coapthon}{\emph{CoAPthon}}
|
||||
\newcommand{\rasp}{\emph{RaspberryPi}}
|
||||
|
||||
\begin{document}
|
||||
|
||||
% --------------------------------------------------------------
|
||||
% Page de garde
|
||||
% --------------------------------------------------------------
|
||||
|
||||
\begin{titlepage}
|
||||
\begin{center}
|
||||
|
||||
\includegraphics[height = 3 cm]{logo_ENSPS_UPS.png}\\[1cm]
|
||||
|
||||
{\large Département \emph{EEA}}\\[0.5cm]
|
||||
|
||||
{\large Stage de \emph{M1}}\\[0.5cm]
|
||||
|
||||
% Titre
|
||||
\rule{\linewidth}{0.5mm} \\[0.4cm]
|
||||
{ \huge \bfseries Titre du rapport éventuellement en plusieurs lignes. \\[0.4cm] }
|
||||
\rule{\linewidth}{0.5mm} \\[1.5cm]
|
||||
|
||||
% Auteur(es) et encadrant(es)
|
||||
\noindent
|
||||
\begin{minipage}{0.4\textwidth}
|
||||
\begin{flushleft} \large
|
||||
\emph{Auteurs :}\\
|
||||
M.~Léopold \textsc{Clément}
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
\begin{minipage}{0.4\textwidth}
|
||||
\begin{flushright} \large
|
||||
\emph{Encadrants :} \\
|
||||
M\up{me} Lynda \textsc{Zitoune}\\
|
||||
M\up{me} Véronique \textsc{Vèque}
|
||||
\end{flushright}
|
||||
\end{minipage}
|
||||
|
||||
\vfill
|
||||
|
||||
% Date en fin de page
|
||||
{\large Version du\\ \today}
|
||||
|
||||
\end{center}
|
||||
\end{titlepage}
|
||||
|
||||
% --------------------------------------------------------------
|
||||
% Table des matières
|
||||
% --------------------------------------------------------------
|
||||
|
||||
\thispagestyle{empty}
|
||||
\tableofcontents
|
||||
\pagebreak
|
||||
|
||||
% --------------------------------------------------------------
|
||||
% Début du corps
|
||||
% --------------------------------------------------------------
|
||||
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
\begin{minted}{python}
|
||||
print("hello world")
|
||||
\end{minted}
|
||||
|
||||
\subsection{Présentation de l'environnement de travail}
|
||||
|
||||
\subsection{Qu'est-ce qu'un réseau \iot{} ?}
|
||||
|
||||
\subsubsection{Qu'est-ce qu'un réseau ?}
|
||||
|
||||
\subsubsection{Qu'est-ce que la congestion ?}
|
||||
|
||||
\subsubsection{Quelle sont les spécificité des réseaux \iot{} ?}
|
||||
|
||||
\subsection{Quelle sont les particularités du \coap{} ?}
|
||||
|
||||
\subsection{Qu'est-ce que l'apprentissage par renforcement ?}
|
||||
|
||||
|
||||
\section{État de l'art}
|
||||
|
||||
\subsection{Comment gère-t-on la congestion en \tcp{} ?}
|
||||
|
||||
\subsection{Influences de l'apprentissage machine dans le contrôle de congestion ?}
|
||||
|
||||
\subsection{Comment gère-t-on la congestion avec l’implémentation classique de \coap ?}
|
||||
|
||||
|
||||
\section{Modélisation choisit}
|
||||
|
||||
\subsection{Quels cas d'utilisations nous est le plus favorable ?}
|
||||
|
||||
\subsection{Quelle sont les variables que nous pouvons observer ?}
|
||||
|
||||
\subsection{Comment représenter un état du système ?}
|
||||
\cite{jainQuantitativeMeasureFairness1998}
|
||||
\subsubsection{État d'un client seul.}
|
||||
|
||||
\subsubsection{État de l'ensemble des clients.}
|
||||
|
||||
\subsection{Comment quantifier la réussite de l'agent ?}
|
||||
|
||||
\subsection{Comment récolté de l'expérience ?}
|
||||
|
||||
\subsubsection{Par exploration}
|
||||
|
||||
\subsubsection{Par création artificiel de transition}
|
||||
|
||||
|
||||
\section{Implémentation de l'algorithme}
|
||||
|
||||
\subsection{Librairie uilisé}
|
||||
|
||||
\subsubsection{\TF{} et \keras{}}
|
||||
|
||||
\subsubsection{\coapthon{}}
|
||||
|
||||
\subsection{Structure du code}
|
||||
|
||||
\subsection{Maquette utilisée}
|
||||
|
||||
\subsection{Astuce pour simuler une congestion}
|
||||
|
||||
|
||||
\section{Expérience et résultats}
|
||||
|
||||
\subsection{Montage simple}
|
||||
|
||||
\subsection{Multiplication des clients}
|
||||
|
||||
\subsection{Multiplication des \rasp}
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Conclusion}
|
||||
\lipsum[3]
|
||||
|
||||
|
||||
% --- Biblio par .bib
|
||||
\bibliography{rapport.bib}
|
||||
%\bibliographystyle{plain-fr.bst}
|
||||
%\selectlanguage{french}
|
||||
|
||||
% --- Biblio écrite à la main
|
||||
%\begin{thebibliography}{7}
|
||||
%\bibitem[Bastien 2019]{id-de-la-source}
|
||||
%Auteurs : \emph{Un titre}, une date.
|
||||
%\end{thebibliography}
|
||||
|
||||
% --------------------------------------------------------------
|
||||
% Appendices
|
||||
% --------------------------------------------------------------
|
||||
|
||||
\clearpage
|
||||
|
||||
\appendix
|
||||
\begin{appendices}
|
||||
|
||||
\section{}
|
||||
|
||||
|
||||
\end{appendices}
|
||||
|
||||
|
||||
% --------------------------------------------------------------
|
||||
% Abstract
|
||||
% --------------------------------------------------------------
|
||||
\pagebreak
|
||||
\thispagestyle{empty}
|
||||
|
||||
\vspace*{\fill}
|
||||
\noindent\rule[2pt]{\textwidth}{0.5pt}\\
|
||||
{\textbf{Résumé :}}
|
||||
\lipsum[1]
|
||||
|
||||
{\noindent\textbf{Mots clés :}}
|
||||
Insérez ici, des mots-clés, pour décrire, votre rapport.
|
||||
\\
|
||||
\noindent\rule[2pt]{\textwidth}{0.5pt}
|
||||
\begin{center}
|
||||
\ens \\
|
||||
4, avenue des Sciences\\
|
||||
91190 Gif-sur-Yvette
|
||||
\end{center}
|
||||
\vspace*{\fill}
|
||||
|
||||
\end{document}
|
8
rapport_stage.code-workspace
Normal file
8
rapport_stage.code-workspace
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
}
|
116
raw_img/test_uml.svg
Normal file
116
raw_img/test_uml.svg
Normal file
|
@ -0,0 +1,116 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1224px" preserveAspectRatio="none" style="width:1351px;height:1224px;background:#FFFFFF;" version="1.1" viewBox="0 0 1351 1224" width="1351px" zoomAndPan="magnify"><defs><filter height="300%" id="f16ihaszaea5jq" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[b9ab6c91daa042623ac722868ebc2597]
|
||||
cluster global--><polygon fill="#FFFFFF" filter="url(#f16ihaszaea5jq)" points="16,148.5,115,148.5,122,170.7969,1217,170.7969,1217,1101.5,16,1101.5,16,148.5" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="16" x2="122" y1="170.7969" y2="170.7969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="93" x="20" y="163.4951">Client CoAP</text><!--MD5=[9d8156834bfc9526c23a84bd8a4eb9f5]
|
||||
cluster super--><rect fill="#FFFFFF" filter="url(#f16ihaszaea5jq)" height="538" style="stroke:#000000;stroke-width:1.5;" width="718" x="475" y="191.5"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1.5;" width="15" x="1173" y="196.5"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1.5;" width="4" x="1171" y="198.5"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1.5;" width="4" x="1171" y="202.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="69" x="799.5" y="217.4951">«Thread»</text><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="95" x="786.5" y="233.792">Superviseur</text><!--MD5=[aa2f05b2676d7d34ffa7e771fb7634f3]
|
||||
cluster client--><rect fill="#FFFFFF" filter="url(#f16ihaszaea5jq)" height="502" style="stroke:#000000;stroke-width:1.5;" width="382" x="61" y="567.5"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1.5;" width="15" x="423" y="572.5"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1.5;" width="4" x="421" y="574.5"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1.5;" width="4" x="421" y="578.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="76" x="214" y="593.4951">«Threads»</text><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="62" x="221" y="609.792">Session</text><path d="M69,444.5 L69,469.6328 L185,469.6328 L185,454.5 L175,444.5 L69,444.5 " fill="#FBFB77" filter="url(#f16ihaszaea5jq)" style="stroke:#A80036;stroke-width:1.0;"/><path d="M175,444.5 L175,454.5 L185,454.5 L175,444.5 " fill="#FBFB77" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="95" x="75" y="461.5669">Un par capteur</text><!--MD5=[afa0aa9786e57ad2ec3dfc302e641c1c]
|
||||
entity h_coap--><ellipse cx="765" cy="309" fill="#FEFECE" filter="url(#f16ihaszaea5jq)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="711" y="338.9951">Interface CoAP</text><!--MD5=[32a3dbe902e7e3707910d23f943dda71]
|
||||
entity h_stat--><ellipse cx="500" cy="309" fill="#FEFECE" filter="url(#f16ihaszaea5jq)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="132" x="434" y="338.9951">Collecteur donnée</text><!--MD5=[0544887a6193e5bf5f374726bfa990c0]
|
||||
entity main_super--><rect fill="#FEFECE" filter="url(#f16ihaszaea5jq)" height="78.8906" style="stroke:#A80036;stroke-width:1.5;" width="123" x="544.5" y="417.5"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="647.5" y="422.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="645.5" y="424.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="645.5" y="428.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="54" x="574" y="450.4951">«main»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="83" x="559.5" y="466.792">Gestionaire</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="559.5" y="483.0889">global</text><!--MD5=[299d1c4a2ba6184a4b2319b3d939ce68]
|
||||
entity stat--><rect fill="#FEFECE" filter="url(#f16ihaszaea5jq)" height="46.2969" style="stroke:#A80036;stroke-width:1.5;" width="123" x="544.5" y="286"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="647.5" y="291"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="645.5" y="293"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="645.5" y="297"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="83" x="559.5" y="318.9951">Statisticien</text><!--MD5=[fade500c9f62cce835db878c83a60e51]
|
||||
entity buff--><rect fill="#FEFECE" height="52.5938" style="stroke:none;stroke-width:1.5;" width="114" x="1048" y="282.5"/><path d="M1033,282.5 L1048,282.5 L1048,335.0938 L1162,335.0938 L1162,282.5 L1177,282.5 " fill="none" filter="url(#f16ihaszaea5jq)" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="45" x="1058" y="305.4951">buffer</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="1058" y="321.792">d'experience</text><!--MD5=[1baef995baf605750a18e6de17020cf1]
|
||||
entity NN--><rect fill="#FEFECE" filter="url(#f16ihaszaea5jq)" height="46.2969" style="stroke:#A80036;stroke-width:1.5;" width="60" x="1074" y="667.5"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="1114" y="672.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1112" y="674.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1112" y="678.5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="20" x="1089" y="700.4951">NN</text><!--MD5=[8e0cf92e53a407ca35d63255ba9bf9db]
|
||||
entity optimiseur--><rect fill="#FEFECE" filter="url(#f16ihaszaea5jq)" height="46.2969" style="stroke:#A80036;stroke-width:1.5;" width="118" x="1045" y="434"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="1143" y="439"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1141" y="441"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="1141" y="445"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78" x="1060" y="466.9951">optimiseur</text><!--MD5=[00ccade4d2e9d34be0442221a6cff66c]
|
||||
entity horloge--><rect fill="#FEFECE" filter="url(#f16ihaszaea5jq)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="136" x="862" y="277.5"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="978" y="282.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="976" y="284.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="976" y="288.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="96" x="877" y="310.4951">«interuption»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="55" x="897.5" y="326.792">horloge</text><!--MD5=[34b9dfdf6eee65fbbd1532cc0642e804]
|
||||
entity s_udp--><ellipse cx="133" cy="1014" fill="#FEFECE" filter="url(#f16ihaszaea5jq)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="84" x="91" y="1043.9951">Socket UDP</text><!--MD5=[a1e3d70e5da20b3e5a11dc250470e676]
|
||||
entity h_session_message--><ellipse cx="358" cy="690.5" fill="#FEFECE" filter="url(#f16ihaszaea5jq)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="106" x="305" y="720.4951">Session handle</text><!--MD5=[23de89f1cfa838dd70d864c6d1f1df45]
|
||||
entity h_session_rto--><ellipse cx="235" cy="690.5" fill="#FEFECE" filter="url(#f16ihaszaea5jq)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="30" x="220" y="720.4951">RTO</text><!--MD5=[8d209b981869ba51a2440fe93c6b67e7]
|
||||
entity file_attente--><path d="M187.5,1001 L242.5,1001 C247.5,1001 247.5,1014.1484 247.5,1014.1484 C247.5,1014.1484 247.5,1027.2969 242.5,1027.2969 L187.5,1027.2969 C182.5,1027.2969 182.5,1014.1484 182.5,1014.1484 C182.5,1014.1484 182.5,1001 187.5,1001 " fill="#FEFECE" filter="url(#f16ihaszaea5jq)" style="stroke:#A80036;stroke-width:1.5;"/><path d="M242.5,1001 C237.5,1001 237.5,1014.1484 237.5,1014.1484 C237.5,1027.2969 242.5,1027.2969 242.5,1027.2969 " fill="none" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="45" x="187.5" y="1018.9951">Buffer</text><!--MD5=[a84a2f5a2d8e3077147b7b8a99f6a912]
|
||||
entity main_sess--><rect fill="#FEFECE" filter="url(#f16ihaszaea5jq)" height="78.8906" style="stroke:#A80036;stroke-width:1.5;" width="130" x="170" y="796.5"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="280" y="801.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="278" y="803.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="278" y="807.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="54" x="203" y="829.4951">«main»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="83" x="185" y="845.792">Gestionaire</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="90" x="185" y="862.0889">de la session</text><!--MD5=[13dff29a2267c98a2d820d96b9b744fb]
|
||||
entity timer--><rect fill="#FEFECE" filter="url(#f16ihaszaea5jq)" height="62.5938" style="stroke:#A80036;stroke-width:1.5;" width="136" x="283" y="982.5"/><rect fill="#FEFECE" height="10" style="stroke:#A80036;stroke-width:1.5;" width="15" x="399" y="987.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="397" y="989.5"/><rect fill="#FEFECE" height="2" style="stroke:#A80036;stroke-width:1.5;" width="4" x="397" y="993.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="96" x="298" y="1015.4951">«interuption»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="326" y="1031.792">timer</text><!--MD5=[778fdad4168e1c9e2d13c8a5e427c42e]
|
||||
entity usr--><ellipse cx="710" cy="14" fill="#FEFECE" filter="url(#f16ihaszaea5jq)" rx="8" ry="8" style="stroke:#A80036;stroke-width:1.5;"/><path d="M710,22 L710,49 M697,30 L723,30 M710,49 L697,64 M710,49 L723,64 " fill="none" filter="url(#f16ihaszaea5jq)" style="stroke:#A80036;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="73" x="673.5" y="82.4951">Utilisateur</text><!--MD5=[7468467f3b6b392f1d176d828c753b77]
|
||||
entity db--><path d="M782,24 C782,14 820,14 820,14 C820,14 858,14 858,24 L858,65.5938 C858,75.5938 820,75.5938 820,75.5938 C820,75.5938 782,75.5938 782,65.5938 L782,24 " fill="#FEFECE" filter="url(#f16ihaszaea5jq)" style="stroke:#000000;stroke-width:1.5;"/><path d="M782,24 C782,34 820,34 820,34 C820,34 858,34 858,24 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="56" x="792" y="50.9951">Base de</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="54" x="792" y="67.292">donnée</text><!--MD5=[c610bd6632b8a77f1f1b3723a00c362f]
|
||||
entity udp--><polygon fill="#FEFECE" filter="url(#f16ihaszaea5jq)" points="105.5,1164.5,105.5,1217.0938,160.5,1217.0938,160.5,1174.5,150.5,1164.5,105.5,1164.5" style="stroke:#000000;stroke-width:1.5;"/><path d="M150.5,1164.5 L150.5,1174.5 L160.5,1174.5 " fill="#FEFECE" style="stroke:#000000;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="35" x="115.5" y="1187.4951">«lib»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="118.5" y="1203.792">UDP</text><!--MD5=[00f9e30d6ead67871b5f4dcdb52564e0]
|
||||
entity tf--><polygon fill="#FEFECE" filter="url(#f16ihaszaea5jq)" points="1233.5,664,1233.5,716.5938,1334.5,716.5938,1334.5,674,1324.5,664,1233.5,664" style="stroke:#000000;stroke-width:1.5;"/><path d="M1324.5,664 L1324.5,674 L1334.5,674 " fill="#FEFECE" style="stroke:#000000;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="35" x="1266.5" y="686.9951">«lib»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81" x="1243.5" y="703.292">TensorFlow</text><!--MD5=[1c8f5b81a31bcb335baf7fc7f30eecf0]
|
||||
entity keras--><polygon fill="#FEFECE" filter="url(#f16ihaszaea5jq)" points="1233,809.5,1233,862.0938,1293,862.0938,1293,819.5,1283,809.5,1233,809.5" style="stroke:#000000;stroke-width:1.5;"/><path d="M1283,809.5 L1283,819.5 L1293,819.5 " fill="#FEFECE" style="stroke:#000000;stroke-width:1.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="35" x="1245.5" y="832.4951">«lib»</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="40" x="1243" y="848.792">Keras</text><!--MD5=[44d1b863b7cf48b60c60df6e4197ceba]
|
||||
link h_coap to main_super--><path d="M755.996,318.268 C735.631,336.968 684.939,383.515 648.11,417.333 " fill="none" id="h_coap-main_super" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[c3a97ac6bd5938361921b1a80d181d45]
|
||||
link buff to optimiseur--><path d="M1104.82,335.766 C1104.64,361.86 1104.37,402.064 1104.19,428.696 " fill="none" id="buff-to-optimiseur" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="1104.15,433.833,1108.2116,424.8606,1104.1843,428.8331,1100.2118,424.8058,1104.15,433.833" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="71" x="1105" y="383.5669">expérience</text><!--MD5=[8dc40196e7be32b7499da14a3a158fab]
|
||||
link optimiseur to NN--><path d="M1104,480.197 C1104,522.804 1104,615.924 1104,662.23 " fill="none" id="optimiseur-to-NN" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="1104,667.37,1108,658.37,1104,662.37,1100,658.37,1104,667.37" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="66" x="1105" y="539.5669">met à jour</text><!--MD5=[00e0e56bb8942f7d045b72b28410dcb8]
|
||||
link horloge to optimiseur--><path d="M966.476,340.606 C998.33,367.334 1044.01,405.666 1073.84,430.694 " fill="none" id="horloge-to-optimiseur" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="1077.76,433.983,1073.4358,425.1342,1073.9295,430.7695,1068.2942,431.2631,1077.76,433.983" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="65" x="1023" y="383.5669">déclanche</text><!--MD5=[0a9c8fbc5e6be315dc2579d6523c8be8]
|
||||
link h_stat to stat--><path d="M509.109,309 C520.842,309 532.575,309 544.308,309 " fill="none" id="h_stat-stat" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[2a53bd9146470a4be8de7aed6b5e91cc]
|
||||
link stat to buff--><path d="M611.258,285.928 C620.128,253.062 641.521,193.93 685,168.5 C748.491,131.36 951.558,133.04 1016,168.5 C1057.95,191.59 1082.9,243.726 1095.27,277.587 " fill="none" id="stat-to-buff" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="1097,282.445,1097.7441,272.6243,1095.3203,277.7356,1090.209,275.3118,1097,282.445" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="47" x="741.5" y="128.5669">remplis</text><!--MD5=[6a54ee8702427f98472c00275752958b]
|
||||
link h_session_message to main_sess--><path d="M351.035,699.626 C335.382,717.888 296.571,763.167 268.129,796.35 " fill="none" id="h_session_message-main_sess" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[2d05a6350c3effd7dbed848763bf8dc3]
|
||||
link h_session_rto to main_sess--><path d="M235,699.626 C235,717.888 235,763.167 235,796.35 " fill="none" id="h_session_rto-main_sess" style="stroke:#A80036;stroke-width:1.0;"/><!--MD5=[74528d00b0bff99990fc7889a8a0826b]
|
||||
link main_sess to s_udp--><path d="M169.78,863.04 C152.081,873.469 135.048,887.405 125,905.5 C108.164,935.817 119.892,978.566 127.654,999.867 " fill="none" id="main_sess-to-s_udp" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="129.522,1004.8,130.074,994.9666,127.7506,1000.1243,122.5929,997.8009,129.522,1004.8" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="43" x="126" y="926.0669">packet</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="24" x="135.5" y="941.1997">udp</text><!--MD5=[4fe7736ffa86495e5c2d9f1f23a257e1]
|
||||
reverse link main_sess to s_udp--><path d="M213.626,880.167 C202.39,902.14 188.059,929.086 174,952.5 C162.374,971.863 147.093,993.548 138.861,1004.966 " fill="none" id="main_sess-backto-s_udp" style="stroke:#A80036;stroke-width:1.0;"/><polygon fill="#A80036" points="215.976,875.556,208.3264,881.7595,213.7063,880.0112,215.4546,885.391,215.976,875.556" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="74" x="202" y="918.5669">aquitement</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="10" x="234" y="933.6997">&</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="52" x="213" y="948.8325">réponse</text><!--MD5=[4dc824d22c09885eb383f3198762067a]
|
||||
link main_sess to file_attente--><path d="M273.47,875.866 C280.246,884.915 286.305,894.997 290,905.5 C296.932,925.205 299.011,933.654 290,952.5 C284.341,964.336 257.464,984.378 237.492,998.129 " fill="none" id="main_sess-to-file_attente" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="233.345,1000.962,243.0322,999.1849,237.4727,998.1402,238.5174,992.5807,233.345,1000.962" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="298" y="933.5669">use</text><!--MD5=[6e782e06c0d2e17c0f5dc02bf57560f0]
|
||||
link main_sess to timer--><path d="M300.421,873.953 C311.745,882.96 322.325,893.513 330,905.5 C343.574,926.701 348.725,954.723 350.535,976.842 " fill="none" id="main_sess-to-timer" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="350.908,982.041,354.2549,972.7783,350.5509,977.0538,346.2753,973.3497,350.908,982.041" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="348" y="933.5669">use</text><!--MD5=[7ce8e2bcdca09a44590c89891d28fe3f]
|
||||
link main_super to h_session_message--><path d="M545.243,496.709 C522.263,512.522 496.489,531.731 475,551.5 C431.989,591.068 389.694,646.017 369.795,673.088 " fill="none" id="main_super-to-h_session_message" style="stroke:#A80036;stroke-width:1.0;"/><path d="M372.3756,683.9168 A9,9 0 0 0 358.6985 673.9651" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[ef2e0f79354206e0cc2b9607dccfbee3]
|
||||
link NN to h_session_rto--><path d="M1073.98,678.515 C945.413,627.995 441.44,438.471 302.333,514.833 C246.288,545.599 236.584,632.025 235.12,671.002 " fill="none" id="NN-to-h_session_rto" style="stroke:#A80036;stroke-width:1.0;"/><path d="M243.4117,678.5711 A9,9 0 0 0 226.5015 678.1941" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[e7d46baa1e450a057fba51bfb34eb936]
|
||||
link main_sess to h_stat--><path d="M169.629,817.568 C128.973,803.11 79.5398,778.179 53,737.5 C35.8582,711.226 11.1533,451.311 38,417.5 C94.8622,345.888 400.744,317.623 480.809,311.39 " fill="none" id="main_sess-to-h_stat" style="stroke:#A80036;stroke-width:1.0;"/><path d="M487.222,302.426 A9,9 0 0 0 488.493 319.2926" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[6d15f5afd906b4a05315f45878a919c1]
|
||||
link GMN1269701 to client--><path d="M118.575,469.68 C106.818,486.708 85.9312,519.783 77,551.5 C75.9755,555.1383 75.0467,558.8512 74.2059,562.6158 C73.9957,563.557 73.7909,564.5014 73.5916,565.4486 C73.4919,565.9223 73.3936,566.3966 73.2966,566.8716 " fill="none" id="GMN1269701-client" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><!--MD5=[be411837912adfb435f6f18d03088f30]
|
||||
link usr to h_coap--><path d="M718.294,85.51 C730.389,143.12 752.385,247.905 761.198,289.89 " fill="none" id="usr-to-h_coap" style="stroke:#A80036;stroke-width:1.0;"/><path d="M770.9166,295.0192 A9,9 0 0 0 754.3628 298.4938" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[030ca119770c76539f4bb2f11fd02f62]
|
||||
link db to h_coap--><path d="M813.691,76.05 C802.166,130.95 778.042,245.872 768.755,290.111 " fill="none" id="db-to-h_coap" style="stroke:#A80036;stroke-width:1.0;"/><path d="M775.5952,298.696 A9,9 0 0 0 759.0416 295.221" style="stroke:#A80036;stroke-width:1.5;fill:none;"/><!--MD5=[98669b2e2b94e771ebe6a5424a2eb69f]
|
||||
link buff to tf--><path d="M1148.85,335.624 C1162.03,345.139 1175.49,356.961 1185,370.5 C1249.53,462.407 1273.08,597.81 1280.73,658.309 " fill="none" id="buff-to-tf" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1281.38,663.579,1284.2482,654.157,1280.7679,658.6166,1276.3083,655.1364,1281.38,663.579" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1245" y="461.5669">use</text><!--MD5=[4d8c7b75c91428342e9b727caf112eb9]
|
||||
link optimiseur to tf--><path d="M1132.06,480.142 C1147.2,492.826 1165.65,509.555 1180,526.5 C1216.12,569.16 1249.26,625.291 1268,659.317 " fill="none" id="optimiseur-to-tf" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1270.44,663.763,1269.6236,653.948,1268.0375,659.378,1262.6076,657.792,1270.44,663.763" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1194" y="539.5669">use</text><!--MD5=[414b4abe29706d3b1d235c982f330774]
|
||||
link NN to keras--><path d="M1128.5,713.607 C1155.92,738.362 1200.48,778.579 1230.73,805.878 " fill="none" id="NN-to-keras" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="1234.72,809.475,1230.7287,800.4711,1231.0119,806.1209,1225.3622,806.4041,1234.72,809.475" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="1184" y="762.5669">use</text><!--MD5=[74d8804e3d4c7fb6dc3d2e83290e718e]
|
||||
link s_udp to udp--><path d="M133,1023.441 C133,1047.601 133,1117.9266 133,1159.0631 " fill="none" id="s_udp-to-udp" style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#A80036" points="133,1164.1752,137,1155.1752,133,1159.1752,129,1155.1752,133,1164.1752" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="134" y="1130.5669">use</text><!--MD5=[572256f3a60bec37f8387ca93c52b5ac]
|
||||
@startuml
|
||||
:Utilisateur: as usr
|
||||
database "Base de\ndonnée" as db
|
||||
file "UDP" <<lib>> as udp
|
||||
file "TensorFlow" <<lib>> as tf
|
||||
file "Keras" <<lib>> as keras
|
||||
|
||||
package "Client CoAP" as global {
|
||||
component "Superviseur" as super <<Thread>>{
|
||||
() "Interface CoAP" as h_coap
|
||||
() "Collecteur donnée" as h_stat
|
||||
|
||||
component "Gestionaire\nglobal" <<main>> as main_super
|
||||
component "Statisticien" as stat
|
||||
|
||||
stack "buffer\nd'experience" as buff
|
||||
[NN]
|
||||
[optimiseur]
|
||||
[horloge] <<interuption>>
|
||||
|
||||
h_coap - - main_super
|
||||
|
||||
buff - -> optimiseur : expérience
|
||||
optimiseur - -> NN : met à jour
|
||||
horloge - -> optimiseur : déclanche
|
||||
|
||||
h_stat - stat
|
||||
stat -> buff : remplis
|
||||
}
|
||||
component "Session" as client <<Threads>> {
|
||||
() "Socket UDP" as s_udp
|
||||
() "Session handle" as h_session_message
|
||||
() "RTO" as h_session_rto
|
||||
queue "Buffer" as file_attente
|
||||
[Gestionaire\nde la session] <<main>> as main_sess
|
||||
[timer] <<interuption>> as timer
|
||||
h_session_message - - main_sess
|
||||
h_session_rto - - main_sess
|
||||
main_sess - -> s_udp : packet\nudp
|
||||
main_sess ..> file_attente : use
|
||||
main_sess <- - s_udp : aquitement\n&\nréponse
|
||||
main_sess ..> timer : use
|
||||
}
|
||||
|
||||
main_super - -( h_session_message
|
||||
NN - -( h_session_rto
|
||||
main_sess - -( h_stat
|
||||
|
||||
note top of client
|
||||
Un par capteur
|
||||
end note
|
||||
}
|
||||
|
||||
usr - -( h_coap
|
||||
db - -( h_coap
|
||||
|
||||
|
||||
buff ..> tf : use
|
||||
optimiseur ..> tf : use
|
||||
NN ..> keras : use
|
||||
s_udp ..> udp : use
|
||||
@enduml
|
||||
|
||||
PlantUML version 1.2021.7(Sun May 23 12:40:07 UTC 2021)
|
||||
(GPL source distribution)
|
||||
Java Runtime: Java(TM) SE Runtime Environment
|
||||
JVM: Java HotSpot(TM) 64-Bit Server VM
|
||||
Default Encoding: UTF-8
|
||||
Language: en
|
||||
Country: US
|
||||
--></g></svg>
|
After Width: | Height: | Size: 26 KiB |
Loading…
Reference in a new issue