Experience et conclusion
25
dot/struct.dot
Normal file
|
@ -0,0 +1,25 @@
|
|||
digraph struc{
|
||||
rankdir = LR
|
||||
node[shape=Mrecord]
|
||||
root[label = "<n>Root - dict\{\} | <a1> charge | <a2> mesure"]
|
||||
charge[label = "<n>list[float]"]
|
||||
dmesure[label="list[]"]
|
||||
mesure[label = "<n>dict\{\}|<a1>rtos | <a2>rtts |<a3> n_tokens | <a4>n_envoies | <a5>n_echec"]
|
||||
rtos[label = "list[float]"]
|
||||
rtts[label = "list[]"]
|
||||
n_tokens[label = "list[float]"]
|
||||
n_envoies[label = "list[float]"]
|
||||
n_echec[label = "list[float]"]
|
||||
|
||||
rtt[label = "list[float]"]
|
||||
|
||||
|
||||
root:<a1> -> charge:<n>
|
||||
root:<a2> -> dmesure
|
||||
dmesure -> mesure:<n>
|
||||
mesure:<a1>->rtos
|
||||
mesure:<a2>->rtts->rtt
|
||||
mesure:<a3>->n_tokens
|
||||
mesure:<a4>->n_envoies
|
||||
mesure:<a5>->n_echec
|
||||
}
|
|
@ -86,7 +86,7 @@
|
|||
\sisetup{locale = FR} % Pour avoir les bonnes conventions typographiques des unités
|
||||
|
||||
% ------------- Une biliographie -------------
|
||||
\bibliographystyle{plain-fr} % Biblio en français
|
||||
\bibliographystyle{alpha-fr} % Biblio en français
|
||||
|
||||
|
||||
% ------------- Les options du paquet -------------
|
||||
|
@ -118,6 +118,7 @@
|
|||
\DeclareCaptionFont{CaptionENS}{\color{ENSRougeBrique}}
|
||||
\captionsetup[table]{labelfont={CaptionENS,bf}}
|
||||
\captionsetup[figure]{labelfont={CaptionENS,bf}}
|
||||
\captionsetup[listing]{labelfont={CaptionENS,bf}}
|
||||
\captionsetup[subfigure]{labelfont=bf,textfont=sf}
|
||||
|
||||
|
||||
|
|
25
makefile
|
@ -1,8 +1,16 @@
|
|||
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) $(UML_PNG) png_img/gain_action.png
|
||||
plantuml -checkmetadata puml
|
||||
DOT_DOT=$(wildcard dot/*.dot)
|
||||
DOT_PNG=$(DOT_DOT:.dot=.png)
|
||||
|
||||
UML_PUML=$(wildcard puml/*.puml)
|
||||
UML_PNG=$(UML_PUML:.puml=.png)
|
||||
|
||||
all : rapport.pdf
|
||||
echo "done\a"
|
||||
|
||||
rapport.pdf : rapport.tex rapport.bib $(FIGURES_PDF) $(UML_PNG) png_img/gain_action.png $(DOT_PNG)
|
||||
lualatex -shell-escape rapport.tex
|
||||
bibtex rapport
|
||||
makeglossaries rapport
|
||||
|
@ -16,6 +24,8 @@ clean : clean-latex
|
|||
rm -f -r pdf_img/
|
||||
rm -f -r puml/*.svg
|
||||
rm -f -r puml/*.png
|
||||
rm -f -r dot/*.png
|
||||
rm -f rapport.pdf
|
||||
|
||||
clean-latex :
|
||||
rm -f rapport.aux
|
||||
|
@ -23,17 +33,24 @@ clean-latex :
|
|||
rm -f rapport.blg
|
||||
rm -f rapport.out
|
||||
rm -f rapport.log
|
||||
rm -f rapport.pdf
|
||||
rm -f rapport.toc
|
||||
rm -f rapport.lof
|
||||
rm -f rapport.lot
|
||||
rm -f rapport.lol
|
||||
rm -f rapport.ist
|
||||
rm -f rapport.glg
|
||||
rm -f rapport.gls
|
||||
rm -f rapport.glo
|
||||
rm -f texput.log
|
||||
|
||||
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
|
||||
inkscape -D -z --file=$< --export-pdf=$@ --export-latex
|
||||
|
||||
puml/%.png : puml/%.puml
|
||||
plantuml $<
|
||||
|
||||
dot/%.png : dot/%.dot
|
||||
dot -Tpng -o $@ $<
|
BIN
png_img/charge-rtts.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
png_img/cropped-L2S.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
png_img/distri_rtt_distant.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
png_img/distri_rtt_local.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
png_img/gain_action.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
png_img/n_client_saturation.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
png_img/varrtt_demo.png
Normal file
After Width: | Height: | Size: 38 KiB |
9
puml/edt.puml
Normal file
|
@ -0,0 +1,9 @@
|
|||
@startgantt
|
||||
|
||||
language fr
|
||||
Project starts 2021-01-01
|
||||
[Prototype design end] as [TASK1] lasts 19 days
|
||||
[TASK1] is colored in Lavender/LightBlue
|
||||
[Testing] lasts 14 days
|
||||
[TASK1]->[Testing]
|
||||
@endgantt
|
178
rapport.tex
|
@ -6,10 +6,10 @@
|
|||
\usepackage{ensps}
|
||||
|
||||
\hypersetup{
|
||||
pdftitle={Titre},
|
||||
pdftitle={Rapport de stage, Léopold Clément},
|
||||
pdfauthor={Léopold Clément},
|
||||
pdfsubject={Sujet},
|
||||
pdfproducer={Conversion PDF},
|
||||
pdfsubject={Schémas de contrôle de congestion intelligents pour les réseaux IoT par apprentissage profond},
|
||||
pdfproducer={LuaLaTex},
|
||||
pdfkeywords={Quelques mots-clés} %
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,7 @@
|
|||
\newcommand{\cubic}{TCP-Cubic}
|
||||
\newcommand{\newreno}{TCP-NewReno}
|
||||
\newcommand{\cpp}{C++}
|
||||
|
||||
\newcommand{\lss}{\emph{L2S}}
|
||||
\newglossaryentry{rtt}
|
||||
{
|
||||
name=RTT,
|
||||
|
@ -201,7 +201,7 @@
|
|||
|
||||
% Titre
|
||||
\rule{\linewidth}{0.5mm} \\[0.4cm]
|
||||
{ \huge \bfseries Titre du rapport éventuellement en plusieurs lignes. \\[0.4cm] }
|
||||
{ \huge \bfseries Schémas de contrôle de congestion intelligents pour les réseaux IoT par apprentissage profond \\[0.4cm] }
|
||||
\rule{\linewidth}{0.5mm} \\[1.5cm]
|
||||
|
||||
% Auteur(es) et encadrant(es)
|
||||
|
@ -215,8 +215,8 @@
|
|||
\begin{minipage}{0.4\textwidth}
|
||||
\begin{flushright} \large
|
||||
\emph{Encadrants :} \\
|
||||
M\up{me} Lynda \textsc{Zitoune}\\
|
||||
M\up{me} Véronique \textsc{Vèque}
|
||||
M\up{me} Lynda \textsc{Zitoune}, professeur des universités\\
|
||||
M\up{me} Véronique \textsc{Vèque}, maitresse de conferences
|
||||
\end{flushright}
|
||||
\end{minipage}
|
||||
|
||||
|
@ -232,6 +232,17 @@
|
|||
% Table des matières
|
||||
% --------------------------------------------------------------
|
||||
|
||||
\thispagestyle{empty}
|
||||
\hspace{0pt}
|
||||
\vfill
|
||||
\begin{center}
|
||||
\section*{Remerciement}
|
||||
Je remercie Lynda
|
||||
\end{center}
|
||||
\vfill
|
||||
\hspace{0pt}
|
||||
\pagebreak
|
||||
|
||||
\thispagestyle{empty}
|
||||
\tableofcontents
|
||||
\pagebreak
|
||||
|
@ -241,9 +252,31 @@
|
|||
% --------------------------------------------------------------
|
||||
\printglossary[title=Glossaire, toctitle=Glossaire]
|
||||
|
||||
\pagebreak
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
\subsection{Présentation de l'environnement de travail}
|
||||
\begin{wrapfigure}{r}{0.30\textwidth} %this figure will be at the right
|
||||
\centering
|
||||
\includegraphics[width=0.30\textwidth]{png_img/cropped-L2S.png}
|
||||
\end{wrapfigure}
|
||||
|
||||
Le laboratoire des signaux et système (\lss{}) est une unité mixe de recherche entre le \emph{CNRS}, l'université PAris-Saclay et l'école CentralSupélec.
|
||||
Les thématique du laboratoire sont l'automatique, les traitements du signal et les télécomunication.
|
||||
En particulier, le pôle télécom et réseau se penche sur des problèmatique de tout niveaux autour des réseaux informatique, que ce soit de l'allcoation de ressource, du routage, de a compressionde donnée\dots
|
||||
Ces recherches s'appuis sur un vaste socle de méthode, que ce soit la théorie des jeux, du control, des graphes, de l'optimisation ou de l'apprentissage machine.
|
||||
L'équite Réseaux, Optimisation Conjointe et codage de Source (ROCS) travail sur deux thématique, l'\iot{} et les services vidéo, c'est à dire l'exploitation optimal d'une conexion limité.
|
||||
C'est dans cette équipe que j'ai réalisé mon stage.
|
||||
|
||||
La problématique étudier est de déterminer comment intégré un processus d'apprentissage dans la gestion de la congestion des réseaux \iot{}.
|
||||
En particulier, nous nous concentrons sur le protocole \coap{}.
|
||||
Nos objectifs sont \begin{itemize}
|
||||
\item nous familiariser avec les notions étudier et le protocole \coap{},
|
||||
\item déterminer quelle métrique utilisé pour suivre l'état du réseau,
|
||||
\item détermination des sénarios pertients
|
||||
\item simulation ou test de ces sénarios
|
||||
\end {itemize}
|
||||
Le stage se déroule entrièrement en distancielle, avec des réunions hébdomadaire avec mes encadrantes soit en présentielle dans les locaux de CentralSupélec, soit sur Teams.
|
||||
|
||||
\subsection{Qu'est-ce qu'un réseau \iot{} ?}
|
||||
|
||||
|
@ -376,7 +409,7 @@ Le but de l'acteur est de maximiser la récompense totale qu'il va recevoir au c
|
|||
Pour cela, l'acteur doit créer une fonction $\pi : \mathbb{S} \rightarrow \mathbb{A}$ permettant de donner l'action optimale à réaliser pour chaque état.
|
||||
|
||||
La solution optimal est définie comme l'action permetant de maximiser le retour global : \begin{equation}
|
||||
R = sum_{i = 1} ^\infty r _ i \gamma ^ i
|
||||
R = \sum_{i = 1} ^\infty r _ i \gamma ^ i
|
||||
\label{eq:rl:R}
|
||||
\end{equation}
|
||||
|
||||
|
@ -708,7 +741,7 @@ Ainsi on peut entrainer le simulateur avec la topologie du réseau que l'on veux
|
|||
Malheureusment, c'est un simulateur complexe à utilisé : tout les scripts de simulation sont écrit en \cpp{}.
|
||||
Par manque de temps et de compétence, les simulations sur \ns{} n'ont pas pu etre réalisé, mais cela reste une piste à étudier pour le pré-entrainement.
|
||||
|
||||
\subsubsection{Par création artificiel de transition}
|
||||
\subsubsection{Par création artificiel de transition\label{part:yaml}}
|
||||
|
||||
Une autre méthode possible est de créer des transitions artificiellement.
|
||||
Pour cela, l'algorithme commence par fixer une charge sur le réseau $f$, c'est à dire la fréquence à laquelle chaque client intéroge le capteur associé.
|
||||
|
@ -861,19 +894,117 @@ La maquette physique que nous utilisont est constitué de deux machines : \begin
|
|||
Les deux machines sont connectée par un réseau WiFi $2.5 GHz$ géré par le PC.
|
||||
La connexion est bien trop bonne pour pouvoir etre saturée par un système CoAP classique seul, d'où l'utilisation de plusieurs maquette numérique en même temps sur le modèle physique.
|
||||
|
||||
\subsection{Sénario d'interet}
|
||||
Les sénarios d'interet sont : \begin{itemize}
|
||||
\item un réseau peu congestioner,
|
||||
\item un réseau congestioner,
|
||||
\item la transition de l'un à l'autre.
|
||||
\end{itemize}
|
||||
Mais il faut prendre en compte que on peu mettre des charges diffeente sur chaque capteur.
|
||||
Ainsi on peu avoir peu de requettes sur tout les capteurs sauf un qui en a beaucoup plus.
|
||||
La charge sur le réseau est définie par la fréquence à laquelle chaque client émet des requettes.
|
||||
|
||||
\section{Expérience et résultats}
|
||||
Pour commencer, on fait quelque test en local, c'est à dire que le serveur \coap{} se trouve sur la même machine que le client.
|
||||
On obtient les resultats de la figure \ref{fig:res:rtt_local}.
|
||||
On constate que même en local, certain messages sont acquitté avec du retard.
|
||||
Certain on un \rtt{} deux fois plus grand que la moyenne.
|
||||
On peut aussi observer que $RTT_S$ a bien plus de varriation brusque que $RTT_L$.
|
||||
|
||||
\subsection{Montage simple}
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\includegraphics[width=0.7 \textwidth]{png_img/distri_rtt_local.png}
|
||||
\caption[Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ avec un seul client en local.]{Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ pendant un envoie de message sans délai entre la réception d'un messagee et l'envoie du suivant, avec un seul client en local.}
|
||||
\label{fig:res:rtt_local}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Multiplication des clients}
|
||||
\subsection{Etude de la maquette}
|
||||
On commence par essayer de mesurer les limites du système.
|
||||
Sur la figure \ref{fig:res:evo_grandeur}, on regarde les grandeurs que l'on va donner à l'agent en fonction du nombre de requette simultané que doit traiter le serveur.
|
||||
On utilise le \CCA{} de \coap{} de base.
|
||||
Pour généré $n$ requette, on prend $n$ client qui envoient une nouvelle requettes à la reception de l'ancienne requette.
|
||||
On constate que les grandeurs semblent toutes bruité de manière non-négligéable.
|
||||
On constate aussi que le taux de retransmission semble suivre un palier.
|
||||
Le rapport $\eta$ semble plus sensible, et suit une courbe continu, presque une exponentielle décroissante.
|
||||
Cela indique que tres rapidement le temps passé dans les queues est bien plus important que le temps de propagation.
|
||||
$VARRTT$ par contre n'est pas pertinante à regarder ici, car elle mesure l'évolution du système.
|
||||
Pourtant, le niveau de congestion semble avoir un impacte sur la grandeur que nous se savons pas expliquer.
|
||||
En regardant la charge de calcul sur le \rasp{}, on constate que la limite créant la congestion n'est pas la saturation de la connexion WiFi entre les deux machines, mais la puissance de calcule du \rasp{} qui n'arrive pas à traiter les requettes.
|
||||
|
||||
\subsection{Multiplication des \rasp{}}
|
||||
On peut aussi reproduire \ref{fig:res:rtt_local} mais en utilisant un seveur sur la \rasp{}.
|
||||
Sur la figure \ref{fig:res:rtt_distant}, on vois que la distribution des \rtt{} est similaire, mais que certaine mesure sont tres éloigné de la moyenne.
|
||||
Si on tentais de réduire le \rto{}, ces messages serais retransmie, alors que ils ne sont pas réelement perdus.
|
||||
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\includegraphics[width=0.7\textwidth]{png_img/n_client_saturation.png}
|
||||
\caption[Evolutions des grandeurs mesurer en fonction du nombre de requette simultané]{Evolution des grandeurs mesurer en fonction du nombre de requette simultané traiter par le serveur \coap{} tournant sur une \rasp{}. Le \CCA{} de \coap{} de base est utilisé.}
|
||||
\label{fig:res:evo_grandeur}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\includegraphics[width=0.7 \textwidth]{png_img/distri_rtt_distant.png}
|
||||
\caption[Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ avec un seul client.]{Distribution du \rtt{} et évolution de $RTT_L$ et $RTT_S$ pendant un envoie de message sans délai entre la réception d'un messagee et l'envoie du suivant, avec un seul client et un serveur sur le \rasp{}. Même si on ne les distingue pas sur l'histogramme, il y a quelque valeur de \rtt{} très élevées.}
|
||||
\label{fig:res:rtt_distant}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\includegraphics[width=0.7 \textwidth]{png_img/varrtt_demo.png}
|
||||
\caption[Evolution de $VARRTT$ lors d'un changement de charge du réseau.]{Evolution de $VARRTT$ lors d'un changement de charge du réseau au moment du $500$-ième message.}
|
||||
\label{fig:res:varrtt}
|
||||
\end{figure}
|
||||
|
||||
On peut aussi faire un essaie pour voir le profil de $VARRTT$ en cas de changement de charge sur le réseaux.
|
||||
On place dabbort un unique client sur le réseau, et on regarde l'évolution de $VARRTT$.
|
||||
Au $500$-ieme message, on active $20$ autre client qui vont eux aussi envoyer des requettes au serveur.
|
||||
Dans la figure \ref{fig:res:varrtt}, on constate que il y a bien un pic au moment de l'augmentation de la charge du système, mais il y a aussi des pics dû au bruit dans la mesure du \rtt{}.
|
||||
|
||||
\subsection{Test d'apprentissage}
|
||||
|
||||
Les testes de pré-apprentissage ont était réalisé avec : \begin{itemize}
|
||||
\item des réseaux de $25$ capteur, ce qui est un ordre de grandeur du nombre de capteur dans le type de réseaux cible,
|
||||
\item avec $8$ maquette en parrallèle pour acceleré la récupération d'expérience,
|
||||
\item des interval de control de $30$ secondes,
|
||||
\item un facteur d'apprentissage de $\alpha = 0.01$.
|
||||
\end{itemize}
|
||||
On obtient donc un pas d'entrainement toutes les heures.
|
||||
Appres $72$ heures d'entrainement, soit $70$ pas d'entrainement, on n'a toujours pas de résultats stable.
|
||||
En effet, les \rto{} ont des comportement hératique, ils convergent vers $0$ ou divergent vers $+\infty$.
|
||||
On se retrove donc avec un taux d'echec important, le réseau n'est pas exploitable.
|
||||
|
||||
Les décisions prise par l'agent non-entrainer sont trop aléatoire pour que il puisse maintenir en etat correct du réseau.
|
||||
Il faudrait attendre longtemps avant que un épisode stable se forme par hasard et que l'agent puisse exploiter la stratégie correct.
|
||||
Cela montre bien que l'entrainement sur simulateur est indispensable car le pré-entrinement sur modèle réel n'est pas assez performant.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{png_img/charge-rtts.png}
|
||||
\caption[Répartition de la \rtt{} et du taux de retransmition en fonction de la charge du réseau.]{Répartition de la \rtt{} et du taux de retransmition en fonction de la charge du réseau. On ne vois pas clairement, mais en bas à gauche de chaque figure, il y a une zone tres dense.}
|
||||
\label{fig:res:yaml}
|
||||
\end{figure}
|
||||
Pour palier à cela, une méthode pour crée de l'experience plus rapidement à était tenter, mais n'a pas pu etre finaliser.
|
||||
Néanmoins, grace au donné récupérer, on peut tracer la figure \ref{fig:res:yaml} qui nous montre bien qu'il y a une charge critique à partir de laquelle le \rtt{} varrie beaucoup.
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Conclusion}
|
||||
\lipsum[3]
|
||||
La modélisation que nous proposon est une transposition de méthode existante dans un nouveau domaine.
|
||||
L'apprentissage machine a déjà montrer qu'il était capable de résoudre des problèmes liée au réseaux et au \CC{}.
|
||||
Nous avons proposer ici une nouvelle modélisation pour intégrer ces nouveau outils à des problématique de l'\iot{}.
|
||||
On ne s'interresse plus à une connexion seule, mais à l'ensemble des connexions vers tout un réseau de capteurs.
|
||||
On ne mesure que les \rtt{} de chaque message, ainsi que le nombre de retransmission.
|
||||
On construit ensuite une matrices qui représente l'état du réseau durant un interval de control.
|
||||
Cette matrice est utilisé par un agent IA pour determiner l'action à prendre.
|
||||
Cette action est une liste de facteurs multiplicatifs à appliquer aux \rto{} de chaque capteurs.
|
||||
La difficulté est que on ne peut pas récupérer assez d'expérience pour réalisé un pré-entrainement.
|
||||
Pour cela, il faudrait un simulateur.
|
||||
La solution de la partie \ref{part:yaml} n'a pas pu etre tester.
|
||||
|
||||
Par manque de temps et de capacité, ledit simulateur n'a pas pu etre réalisé.
|
||||
Parmis les autres élements à perféctioner, il y a les valeurs de pondération utilisé dans la fonction de récompence, qui sont pour l'instant arbitraire.
|
||||
De même, l'agent est pour l'instant assez basique, on pourrait utiliser une structure du réseau de neurrone plus complexe pour prendre en compte les particularités de la matrice d'état.
|
||||
Le travail réalisé sera repris dans une thèse de \lss{}.
|
||||
|
||||
\clearpage
|
||||
|
||||
|
@ -886,7 +1017,7 @@ La connexion est bien trop bonne pour pouvoir etre saturée par un système CoAP
|
|||
% --- Biblio par .bib
|
||||
\bibliography{rapport.bib}
|
||||
%\bibliographystyle{plain-fr.bst}
|
||||
%\selectlanguage{french}
|
||||
\selectlanguage{french}
|
||||
|
||||
% --- Biblio écrite à la main
|
||||
%\begin{thebibliography}{7}
|
||||
|
@ -903,9 +1034,22 @@ La connexion est bien trop bonne pour pouvoir etre saturée par un système CoAP
|
|||
\appendix
|
||||
\begin{appendices}
|
||||
|
||||
\section{Structure du code}
|
||||
\section{Correspondance modélisation/code}
|
||||
|
||||
\begin{table}[htp]
|
||||
\centering
|
||||
\caption{Correspondance modélisation/code}
|
||||
\begin{tabular}{lcc}
|
||||
\toprule
|
||||
Nom & notation mathématique & Représentation numérique\\
|
||||
\midrule
|
||||
\rtt& Utilisation finale & http, ssh...\\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\begin{landscape}
|
||||
\section{Structure du code}
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\includegraphics[height=\vsize, width=\hsize, keepaspectratio]{puml/call_stack_envoie.png}
|
||||
|
|