diff --git a/.gitignore b/.gitignore index e362fba..eb6464f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,38 @@ -choco-4.0.6 +choco* +/tp/code/TP/Travail_de_session/nbproject/private/ +/out +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb -/tp/code/TP/Travail_de_session/nbproject/private/ \ No newline at end of file +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Intellij +.idea/ +*.iml +*.iws +*.ipr diff --git a/Rapport_de_session/Annexe1.tex b/Rapport_de_session/Annexe1.tex index 9da4f50..1de6fb0 100644 --- a/Rapport_de_session/Annexe1.tex +++ b/Rapport_de_session/Annexe1.tex @@ -3,61 +3,61 @@ \label{sec:AnnexeHoraires} \pagebreak \begin{landscape} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule1.png} + \includegraphics[width=25cm]{Tables/InitialSchedule1.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.11.} \label{fig:InitialSchedule1} -\end{figure} +\end{table} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule2.png} + \includegraphics[width=25cm]{Tables/InitialSchedule2.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.17.} \label{fig:InitialSchedule2} -\end{figure} +\end{table} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule3.png} + \includegraphics[width=25cm]{Tables/InitialSchedule3.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.22.} \label{fig:InitialSchedule3} -\end{figure} +\end{table} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule4.png} + \includegraphics[width=25cm]{Tables/InitialSchedule4.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.28.} \label{fig:InitialSchedule4} -\end{figure} +\end{table} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule5.png} + \includegraphics[width=25cm]{Tables/InitialSchedule5.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.33.} \label{fig:InitialSchedule5} -\end{figure} +\end{table} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule6.png} + \includegraphics[width=25cm]{Tables/InitialSchedule6.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.39.} \label{fig:InitialSchedule6} -\end{figure} +\end{table} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule7.png} + \includegraphics[width=25cm]{Tables/InitialSchedule7.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.44.} \label{fig:InitialSchedule7} -\end{figure} +\end{table} -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=25cm]{Figures/InitialSchedule8.png} + \includegraphics[width=25cm]{Tables/InitialSchedule8.png} \caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.50.} \label{fig:InitialSchedule8} -\end{figure} +\end{table} \end{landscape} %%% Local Variables: diff --git a/Rapport_de_session/Figures/InitialSchedule1.png b/Rapport_de_session/Tables/InitialSchedule1.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule1.png rename to Rapport_de_session/Tables/InitialSchedule1.png diff --git a/Rapport_de_session/Figures/InitialSchedule2.png b/Rapport_de_session/Tables/InitialSchedule2.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule2.png rename to Rapport_de_session/Tables/InitialSchedule2.png diff --git a/Rapport_de_session/Figures/InitialSchedule3.png b/Rapport_de_session/Tables/InitialSchedule3.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule3.png rename to Rapport_de_session/Tables/InitialSchedule3.png diff --git a/Rapport_de_session/Figures/InitialSchedule4.png b/Rapport_de_session/Tables/InitialSchedule4.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule4.png rename to Rapport_de_session/Tables/InitialSchedule4.png diff --git a/Rapport_de_session/Figures/InitialSchedule5.png b/Rapport_de_session/Tables/InitialSchedule5.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule5.png rename to Rapport_de_session/Tables/InitialSchedule5.png diff --git a/Rapport_de_session/Figures/InitialSchedule6.png b/Rapport_de_session/Tables/InitialSchedule6.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule6.png rename to Rapport_de_session/Tables/InitialSchedule6.png diff --git a/Rapport_de_session/Figures/InitialSchedule7.png b/Rapport_de_session/Tables/InitialSchedule7.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule7.png rename to Rapport_de_session/Tables/InitialSchedule7.png diff --git a/Rapport_de_session/Figures/InitialSchedule8.png b/Rapport_de_session/Tables/InitialSchedule8.png similarity index 100% rename from Rapport_de_session/Figures/InitialSchedule8.png rename to Rapport_de_session/Tables/InitialSchedule8.png diff --git a/Rapport_de_session/Figures/TableaueffetsParametres.png b/Rapport_de_session/Tables/TableaueffetsParametres.png similarity index 100% rename from Rapport_de_session/Figures/TableaueffetsParametres.png rename to Rapport_de_session/Tables/TableaueffetsParametres.png diff --git a/Rapport_de_session/etapes.dot b/Rapport_de_session/etapes.dot new file mode 100644 index 0000000..97540d9 --- /dev/null +++ b/Rapport_de_session/etapes.dot @@ -0,0 +1,24 @@ + +digraph etapes { + graph [splines=false]; + + node[fontsize=10, color=black, shape=box, width=3, height=0.5]; + a[label="Générer les tableaux\nd'horaires valides"]; + b1[label="Générer les horaires initiales"]; + b2[label="Calculer le coût initial"]; + c1[label="Générer les scénarios d'absences"]; + c2[label="Calculer le coût\ndes absences"]; + d1[label="Générer les horaires\nde recouvrement optimales"]; + d2[label="Calculer le coût\nde recouvrement moyen"]; + + {a -> b1}; + {rank=same;b1 -> b2}; + {b2 -> c1}; + {rank=same;c1 -> c2}; + {c2 -> d1}; + {rank=same;d1 -> d2}; + + edge[style=invis]; + {b1 -> c1 -> d1}; + {b2 -> c2 -> d2}; +} diff --git a/Rapport_de_session/etapes.pdf b/Rapport_de_session/etapes.pdf new file mode 100644 index 0000000..d874006 Binary files /dev/null and b/Rapport_de_session/etapes.pdf differ diff --git a/Rapport_de_session/introduction.tex b/Rapport_de_session/introduction.tex index e498097..929988e 100644 --- a/Rapport_de_session/introduction.tex +++ b/Rapport_de_session/introduction.tex @@ -3,8 +3,15 @@ La planification d'horaires de travail est un enjeu important pour plusieurs industries et entités gouvernementales. Une mauvaise planification des ressources en fonction de la demande de travail d'une entreprise peut entraîner une diminution des profits en plus d'avoir des répercussions sur les dates de livraison de ses différents contrats. Parmi les raisons qui rendent cette tâche difficile, il y a les restrictions complexes provenant de la loi du travail, une variabilité de la demande de travail selon les période de l'année et une incertitude liée à l'absentéisme des employés. Il devient donc important de produire des horaires de travail permettant une flexibilité d'ajustement en fonction de la demande de travail et de l'absentéisme des employés, tout en minimisant le coût des salaires. -Le présent travail propose une approche pour la génération d'horaires de travail optimale en fonction du taux d'absentéisme et du taux d'augmentation de la demande de travail. - +Le présent travail propose une approche pour la génération d'horaires de travail optimales et robustes en fonction du taux d'absentéisme et du taux d'augmentation de la demande de travail. Les différentes étapes suivies sont présentées à la Figure \ref{fig:etapes}. + +\begin{figure}[h] + \centering + \label{fig:etapes} + \includegraphics[]{etapes} + \caption{Étapes de la production d'horaires optimales et robustes} +\end{figure} + %%% Local Variables: %%% mode: latex %%% TeX-master: "rapport_de_recherche" diff --git a/Rapport_de_session/makefile b/Rapport_de_session/makefile index 0994487..bd9bbd9 100644 --- a/Rapport_de_session/makefile +++ b/Rapport_de_session/makefile @@ -1,13 +1,16 @@ build: rapport_de_recherche.pdf -maxconsecutif.svg: +maxconsecutif.pdf: dot -Tpdf maxconsecutif.dot -o maxconsecutif.pdf +etapes.pdf: + dot -Tpdf etapes.dot -o etapes.pdf + rapport_de_recherche.pdf: rapport_de_recherche.bbl pdflatex rapport_de_recherche.tex pdflatex rapport_de_recherche.tex -rapport_de_recherche.bbl: rapport_de_recherche.tex maxconsecutif.svg +rapport_de_recherche.bbl: rapport_de_recherche.tex maxconsecutif.pdf etapes.pdf pdflatex rapport_de_recherche.tex bibtex rapport_de_recherche.aux @@ -22,3 +25,6 @@ clean: -rm *.log -rm *.out -rm *.toc + -rm *.pdf + + diff --git a/Rapport_de_session/modelisation.tex b/Rapport_de_session/modelisation.tex index 5352a4e..4406a65 100644 --- a/Rapport_de_session/modelisation.tex +++ b/Rapport_de_session/modelisation.tex @@ -24,7 +24,7 @@ Notre modèle considère deux types $A$ d'employés: les employés à temps plei \begin{align} \label{typeemployes} - A \in {FT,PT} + A \in \lbrace FT,PT \rbrace \end{align} Ils travaillent des périodes consécutives d'une durée $i_{A}$ heures. L'intervalle de travail des employés à temps plein doit cependant débuter à la première, troisième ou cinquième période. On définit aussi un nombre d'heures de repos minimal $r_{min,A}$ entre les périodes travaillées. Les employés à temps plein travaillent $h_{reg}^{FT}$ heures par période de deux semaines et les employés à temps partiel travaillent entre $h_{min}^{PT}$ et $h_{max}^{PT}$ heures durant cette même période. Les employés ne travaillent pas plus que $j_{max,A}$ journées consécutives. Le nombre d'employés $E$ de chaque type est variable et sera déterminé par les ratios \eqref{eq:eftept}: @@ -84,7 +84,7 @@ L'horaire doit inclure le travail durant une fin de semaine sur deux \eqref{eq:c h_{6} &= h_{7} \wedge h_{13} = h_{14} \wedge h_{6} \neq h_{13} \end{align} -L'horaire doit respecter le nombre maximum de jours consécutifs travaillés autorisés. On utilise une contrainte \textsc{Regular} \guillemotleft réifiée \guillemotright pour représenter le non-respect de cette contrainte, c'est-à-dire lorsque qu'on retrouve une séquence de jours consécutifs dont la longueur est supérieure à $j_{max,A}$. L'automate fini pour cette contrainte lorsque $j_{max,A}=4$ est représenté à la Figure \ref{fig:automatemaxconsecutif}. L'expression régulière représentant cet automate prend la forme \texttt{[01]*1\{5,\}[01]*}. +L'horaire doit respecter le nombre maximum de jours consécutifs travaillés autorisés. On utilise une contrainte \textsc{Regular} \guillemotleft réifiée \guillemotright pour représenter le non-respect de cette contrainte, c'est-à-dire lorsque qu'on retrouve une séquence de jours consécutifs dont la longueur est supérieure à $j_{max,A}$. L'automate fini pour cette contrainte lorsque $j_{max,A}=4$ est représenté à la Figure \ref{fig:automatemaxconsecutif}. \begin{figure}[ht] \centering @@ -93,7 +93,16 @@ L'horaire doit respecter le nombre maximum de jours consécutifs travaillés aut \label{fig:automatemaxconsecutif} \end{figure} -On obtient, pour chaque type de travailleur, une liste de vecteurs à laquelle on ajouter le vecteur nul, représentant la situation où l'employé est exclus de l'horaire. + + +L'expression régulière représentant cet automate est représenté à la Figure \ref{fig:regexpautomate}. On obtient, pour chaque type de travailleur, une liste de vecteurs à laquelle on ajouter le vecteur nul, représentant la situation où l'employé est exclus de l'horaire. + +\begin{figure}[ht] + \centering + \fbox{\texttt{[01]*1\{5,\}[01]*}} + \caption{Expression régulière représentant l'automate fini} + \label{fig:regexpautomate} + \end{figure} \subsubsection{Ajout des périodes} \label{sec:horaireajoutperiode} @@ -115,15 +124,16 @@ On considère la matrice des horaires quinzomadaires valides \eqref{eq:horairejo \subsection{Contraintes} \label{sec:contraintes} -Chaque horaire d'employé doit d'abord correspondre à un horaire valide tel qu'établi à la section \ref{sec:horairesvalides}. Il doit donc satisfaire une contrainte \textsc{Tableau} \eqref{eq:contraintetableau}. +Chaque horaire d'employé $X_e$ doit d'abord correspondre à un horaire valide tel qu'établi à la section \ref{sec:horairesvalides}. Il doit donc satisfaire une contrainte \textsc{Tableau} \eqref{eq:contraintetableau}. \begin{align} - \label{eq:contraintetableau} - \mathcal{C}_1 &: \textsc{Tableau}\left( \mathbf{V}_A, - \begin{bmatrix}x_{e,1,1}&\cdots&x_{e,1,J}\\ + X_e &= \begin{bmatrix}x_{e,1,1}&\cdots&x_{e,1,J}\\ \vdots&\ddots&\vdots\\ x_{e,P,1}&\cdots&x_{e,P,J} - \end{bmatrix}\right) & \forall e + \end{bmatrix}\\ + \label{eq:contraintetableau} + \mathcal{C}_1 &: \textsc{Tableau}\left( \mathbf{V}_A, + X_e \right) & \forall e \end{align} La planification doit aussi satisfaire la demande en employés, en utilisant une contrainte \textsc{Sum} \eqref{eq:contrsumemployes}. @@ -133,6 +143,12 @@ La planification doit aussi satisfaire la demande en employés, en utilisant une \mathcal{C}_2 &: \sum_{A}\sum_{e=1}^{E_A} x_{e,p,j} = d_{p,j} & \forall 1 \leq p \leq P, 1 \leq j \leq J \end{align} +Afin de réduire la taille de l'arbre de recherche, nous imposons la contrainte de bris de symétrie suivante: les horaires des employés à temps plein, de même que les horaires des employés à temps partiel, doivent être dans un ordre lexicographique \eqref{eq:lex}. +\begin{align} + \label{eq:lex} + X_i &\leq X_{i+1} &\forall i \in [1,E^A],A +\end{align} + \subsection{Fonction objectif} \label{sec:fonctionobjectif} diff --git a/Rapport_de_session/rapport_de_recherche.log b/Rapport_de_session/rapport_de_recherche.log deleted file mode 100644 index d0b42cd..0000000 --- a/Rapport_de_session/rapport_de_recherche.log +++ /dev/null @@ -1,1467 +0,0 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.19 (MiKTeX 2.9.6630 64-bit) (preloaded format=pdflatex 2018.3.8) 13 APR 2018 16:34 -entering extended mode -**"F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Re -pository/Rapport_de_session/rapport_de_recherche.tex" - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session/rapport_de_recherche.tex" -LaTeX2e <2017-04-15> -Babel <3.18> and hyphenation patterns for 75 language(s) loaded. -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\article.cls" -Document Class: article 2014/09/29 v1.4h Standard LaTeX document class -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\size12.clo" -File: size12.clo 2014/09/29 v1.4h Standard LaTeX file (size option) -) -\c@part=\count79 -\c@section=\count80 -\c@subsection=\count81 -\c@subsubsection=\count82 -\c@paragraph=\count83 -\c@subparagraph=\count84 -\c@figure=\count85 -\c@table=\count86 -\abovecaptionskip=\skip41 -\belowcaptionskip=\skip42 -\bibindent=\dimen102 -) ("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\natbib\natbib.st -y" -Package: natbib 2010/09/13 8.31b (PWD, AO) -\bibhang=\skip43 -\bibsep=\skip44 -LaTeX Info: Redefining \cite on input line 694. -\c@NAT@ctr=\count87 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\babel\babel.sty" -Package: babel 2018/02/14 3.18 The Babel package -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\babel\switch.def -" -File: switch.def 2018/02/14 3.18 Babel switching mechanism -) -************************************* -* Local config file bblopts.cfg used -* -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\arabi\bblopts.cfg" -File: bblopts.cfg 2005/09/08 v0.1 add Arabic and Farsi to "declared" options of - babel -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\babel-french\fre -nch.ldf" -Language: french 2018/02/04 v3.4b French support from the babel system - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\babel\babel.def" -File: babel.def 2018/02/14 3.18 Babel common definitions -\babel@savecnt=\count88 -\U@D=\dimen103 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\babel\txtbabel.d -ef") -\bbl@dirlevel=\count89 -) -\l@acadian = a dialect from \language\l@french -\FB@nonchar=\count90 -Package babel Info: Making : an active character on input line 411. -Package babel Info: Making ; an active character on input line 412. -Package babel Info: Making ! an active character on input line 413. -Package babel Info: Making ? an active character on input line 414. -\FBguill@level=\count91 -\FB@everypar=\toks14 -\FB@Mht=\dimen104 -\mc@charclass=\count92 -\mc@charfam=\count93 -\mc@charslot=\count94 -\std@mcc=\count95 -\dec@mcc=\count96 -\c@FBcaption@count=\count97 -\listindentFB=\skip45 -\descindentFB=\skip46 -\labelwidthFB=\skip47 -\leftmarginFB=\skip48 -\parindentFFN=\dimen105 -\FBfnindent=\skip49 -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\carlisle\scalefnt. -sty") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics\keyval.st -y" -Package: keyval 2014/10/28 v1.15 key=value parser (DPC) -\KV@toks@=\toks15 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\inputenc.sty" -Package: inputenc 2015/03/17 v1.2c Input encoding file -\inpenc@prehook=\toks16 -\inpenc@posthook=\toks17 -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\utf8.def" -File: utf8.def 2017/01/28 v1.1t UTF-8 support for inputenc -Now handling font encoding OML ... -... no UTF-8 mapping file for font encoding OML -Now handling font encoding T1 ... -... processing UTF-8 mapping file for font encoding T1 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\t1enc.dfu" -File: t1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc - defining Unicode char U+00A0 (decimal 160) - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AB (decimal 171) - defining Unicode char U+00AD (decimal 173) - defining Unicode char U+00BB (decimal 187) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C0 (decimal 192) - defining Unicode char U+00C1 (decimal 193) - defining Unicode char U+00C2 (decimal 194) - defining Unicode char U+00C3 (decimal 195) - defining Unicode char U+00C4 (decimal 196) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00C7 (decimal 199) - defining Unicode char U+00C8 (decimal 200) - defining Unicode char U+00C9 (decimal 201) - defining Unicode char U+00CA (decimal 202) - defining Unicode char U+00CB (decimal 203) - defining Unicode char U+00CC (decimal 204) - defining Unicode char U+00CD (decimal 205) - defining Unicode char U+00CE (decimal 206) - defining Unicode char U+00CF (decimal 207) - defining Unicode char U+00D0 (decimal 208) - defining Unicode char U+00D1 (decimal 209) - defining Unicode char U+00D2 (decimal 210) - defining Unicode char U+00D3 (decimal 211) - defining Unicode char U+00D4 (decimal 212) - defining Unicode char U+00D5 (decimal 213) - defining Unicode char U+00D6 (decimal 214) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00D9 (decimal 217) - defining Unicode char U+00DA (decimal 218) - defining Unicode char U+00DB (decimal 219) - defining Unicode char U+00DC (decimal 220) - defining Unicode char U+00DD (decimal 221) - defining Unicode char U+00DE (decimal 222) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E0 (decimal 224) - defining Unicode char U+00E1 (decimal 225) - defining Unicode char U+00E2 (decimal 226) - defining Unicode char U+00E3 (decimal 227) - defining Unicode char U+00E4 (decimal 228) - defining Unicode char U+00E5 (decimal 229) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00E7 (decimal 231) - defining Unicode char U+00E8 (decimal 232) - defining Unicode char U+00E9 (decimal 233) - defining Unicode char U+00EA (decimal 234) - defining Unicode char U+00EB (decimal 235) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F0 (decimal 240) - defining Unicode char U+00F1 (decimal 241) - defining Unicode char U+00F2 (decimal 242) - defining Unicode char U+00F3 (decimal 243) - defining Unicode char U+00F4 (decimal 244) - defining Unicode char U+00F5 (decimal 245) - defining Unicode char U+00F6 (decimal 246) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+00F9 (decimal 249) - defining Unicode char U+00FA (decimal 250) - defining Unicode char U+00FB (decimal 251) - defining Unicode char U+00FC (decimal 252) - defining Unicode char U+00FD (decimal 253) - defining Unicode char U+00FE (decimal 254) - defining Unicode char U+00FF (decimal 255) - defining Unicode char U+0100 (decimal 256) - defining Unicode char U+0101 (decimal 257) - defining Unicode char U+0102 (decimal 258) - defining Unicode char U+0103 (decimal 259) - defining Unicode char U+0104 (decimal 260) - defining Unicode char U+0105 (decimal 261) - defining Unicode char U+0106 (decimal 262) - defining Unicode char U+0107 (decimal 263) - defining Unicode char U+0108 (decimal 264) - defining Unicode char U+0109 (decimal 265) - defining Unicode char U+010A (decimal 266) - defining Unicode char U+010B (decimal 267) - defining Unicode char U+010C (decimal 268) - defining Unicode char U+010D (decimal 269) - defining Unicode char U+010E (decimal 270) - defining Unicode char U+010F (decimal 271) - defining Unicode char U+0110 (decimal 272) - defining Unicode char U+0111 (decimal 273) - defining Unicode char U+0112 (decimal 274) - defining Unicode char U+0113 (decimal 275) - defining Unicode char U+0114 (decimal 276) - defining Unicode char U+0115 (decimal 277) - defining Unicode char U+0116 (decimal 278) - defining Unicode char U+0117 (decimal 279) - defining Unicode char U+0118 (decimal 280) - defining Unicode char U+0119 (decimal 281) - defining Unicode char U+011A (decimal 282) - defining Unicode char U+011B (decimal 283) - defining Unicode char U+011C (decimal 284) - defining Unicode char U+011D (decimal 285) - defining Unicode char U+011E (decimal 286) - defining Unicode char U+011F (decimal 287) - defining Unicode char U+0120 (decimal 288) - defining Unicode char U+0121 (decimal 289) - defining Unicode char U+0122 (decimal 290) - defining Unicode char U+0123 (decimal 291) - defining Unicode char U+0124 (decimal 292) - defining Unicode char U+0125 (decimal 293) - defining Unicode char U+0128 (decimal 296) - defining Unicode char U+0129 (decimal 297) - defining Unicode char U+012A (decimal 298) - defining Unicode char U+012B (decimal 299) - defining Unicode char U+012C (decimal 300) - defining Unicode char U+012D (decimal 301) - defining Unicode char U+012E (decimal 302) - defining Unicode char U+012F (decimal 303) - defining Unicode char U+0130 (decimal 304) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0132 (decimal 306) - defining Unicode char U+0133 (decimal 307) - defining Unicode char U+0134 (decimal 308) - defining Unicode char U+0135 (decimal 309) - defining Unicode char U+0136 (decimal 310) - defining Unicode char U+0137 (decimal 311) - defining Unicode char U+0139 (decimal 313) - defining Unicode char U+013A (decimal 314) - defining Unicode char U+013B (decimal 315) - defining Unicode char U+013C (decimal 316) - defining Unicode char U+013D (decimal 317) - defining Unicode char U+013E (decimal 318) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0143 (decimal 323) - defining Unicode char U+0144 (decimal 324) - defining Unicode char U+0145 (decimal 325) - defining Unicode char U+0146 (decimal 326) - defining Unicode char U+0147 (decimal 327) - defining Unicode char U+0148 (decimal 328) - defining Unicode char U+014A (decimal 330) - defining Unicode char U+014B (decimal 331) - defining Unicode char U+014C (decimal 332) - defining Unicode char U+014D (decimal 333) - defining Unicode char U+014E (decimal 334) - defining Unicode char U+014F (decimal 335) - defining Unicode char U+0150 (decimal 336) - defining Unicode char U+0151 (decimal 337) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0154 (decimal 340) - defining Unicode char U+0155 (decimal 341) - defining Unicode char U+0156 (decimal 342) - defining Unicode char U+0157 (decimal 343) - defining Unicode char U+0158 (decimal 344) - defining Unicode char U+0159 (decimal 345) - defining Unicode char U+015A (decimal 346) - defining Unicode char U+015B (decimal 347) - defining Unicode char U+015C (decimal 348) - defining Unicode char U+015D (decimal 349) - defining Unicode char U+015E (decimal 350) - defining Unicode char U+015F (decimal 351) - defining Unicode char U+0160 (decimal 352) - defining Unicode char U+0161 (decimal 353) - defining Unicode char U+0162 (decimal 354) - defining Unicode char U+0163 (decimal 355) - defining Unicode char U+0164 (decimal 356) - defining Unicode char U+0165 (decimal 357) - defining Unicode char U+0168 (decimal 360) - defining Unicode char U+0169 (decimal 361) - defining Unicode char U+016A (decimal 362) - defining Unicode char U+016B (decimal 363) - defining Unicode char U+016C (decimal 364) - defining Unicode char U+016D (decimal 365) - defining Unicode char U+016E (decimal 366) - defining Unicode char U+016F (decimal 367) - defining Unicode char U+0170 (decimal 368) - defining Unicode char U+0171 (decimal 369) - defining Unicode char U+0172 (decimal 370) - defining Unicode char U+0173 (decimal 371) - defining Unicode char U+0174 (decimal 372) - defining Unicode char U+0175 (decimal 373) - defining Unicode char U+0176 (decimal 374) - defining Unicode char U+0177 (decimal 375) - defining Unicode char U+0178 (decimal 376) - defining Unicode char U+0179 (decimal 377) - defining Unicode char U+017A (decimal 378) - defining Unicode char U+017B (decimal 379) - defining Unicode char U+017C (decimal 380) - defining Unicode char U+017D (decimal 381) - defining Unicode char U+017E (decimal 382) - defining Unicode char U+01CD (decimal 461) - defining Unicode char U+01CE (decimal 462) - defining Unicode char U+01CF (decimal 463) - defining Unicode char U+01D0 (decimal 464) - defining Unicode char U+01D1 (decimal 465) - defining Unicode char U+01D2 (decimal 466) - defining Unicode char U+01D3 (decimal 467) - defining Unicode char U+01D4 (decimal 468) - defining Unicode char U+01E2 (decimal 482) - defining Unicode char U+01E3 (decimal 483) - defining Unicode char U+01E6 (decimal 486) - defining Unicode char U+01E7 (decimal 487) - defining Unicode char U+01E8 (decimal 488) - defining Unicode char U+01E9 (decimal 489) - defining Unicode char U+01EA (decimal 490) - defining Unicode char U+01EB (decimal 491) - defining Unicode char U+01F0 (decimal 496) - defining Unicode char U+01F4 (decimal 500) - defining Unicode char U+01F5 (decimal 501) - defining Unicode char U+0218 (decimal 536) - defining Unicode char U+0219 (decimal 537) - defining Unicode char U+021A (decimal 538) - defining Unicode char U+021B (decimal 539) - defining Unicode char U+0232 (decimal 562) - defining Unicode char U+0233 (decimal 563) - defining Unicode char U+1E02 (decimal 7682) - defining Unicode char U+1E03 (decimal 7683) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2010 (decimal 8208) - defining Unicode char U+2011 (decimal 8209) - defining Unicode char U+2012 (decimal 8210) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2015 (decimal 8213) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201A (decimal 8218) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) - defining Unicode char U+201E (decimal 8222) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+2039 (decimal 8249) - defining Unicode char U+203A (decimal 8250) - defining Unicode char U+2423 (decimal 9251) - defining Unicode char U+1E20 (decimal 7712) - defining Unicode char U+1E21 (decimal 7713) -) -Now handling font encoding OT1 ... -... processing UTF-8 mapping file for font encoding OT1 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\ot1enc.dfu" -File: ot1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc - defining Unicode char U+00A0 (decimal 160) - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AD (decimal 173) - defining Unicode char U+00B8 (decimal 184) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0174 (decimal 372) - defining Unicode char U+0175 (decimal 373) - defining Unicode char U+0176 (decimal 374) - defining Unicode char U+0177 (decimal 375) - defining Unicode char U+0218 (decimal 536) - defining Unicode char U+0219 (decimal 537) - defining Unicode char U+021A (decimal 538) - defining Unicode char U+021B (decimal 539) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) -) -Now handling font encoding OMS ... -... processing UTF-8 mapping file for font encoding OMS - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\omsenc.dfu" -File: omsenc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) -) -Now handling font encoding OMX ... -... no UTF-8 mapping file for font encoding OMX -Now handling font encoding U ... -... no UTF-8 mapping file for font encoding U - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+02C6 (decimal 710) - defining Unicode char U+02DC (decimal 732) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2026 (decimal 8230) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2423 (decimal 9251) -)) ("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\fontenc.st -y" -Package: fontenc 2017/04/05 v2.0i Standard LaTeX package - ("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\t1enc.def" -File: t1enc.def 2017/04/05 v2.0i Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 48. -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\setspace\setspace. -sty" -Package: setspace 2011/12/19 v6.7a set line spacing -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\datetime\datetime. -sty" -Package: datetime 2015/03/20 v2.60 Date Time Package - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\etoolbox\etoolbox. -sty" -Package: etoolbox 2018/02/11 v2.5e e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count98 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\fmtcount\fmtcount. -sty" -Package: fmtcount 2017/12/24 v3.05 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\ifthen.sty" -Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\xkeyval\xkeyval.st -y" -Package: xkeyval 2014/12/03 v2.7a package option processing (HA) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\xkeyval\xkeyval. -tex" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\xkeyval\xkvutils -.tex" -\XKV@toks=\toks18 -\XKV@tempa@toks=\toks19 -) -\XKV@depth=\count99 -File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\fmtcount\fcprefix. -sty" -Package: fcprefix 2012/09/28 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\fmtcount\fcnumpars -er.sty" -Package: fcnumparser 2017/06/15 -\fc@digit@counter=\count100 -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsmath\amsgen.sty -" -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks20 -\ex@=\dimen106 -) -\c@padzeroesN=\count101 -\fc@tmpcatcode=\count102 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\fmtcount\fc-french -.def" -File: fc-french.def 2017/06/15 -) -\@DT@modctr=\count103 -\@ordinalctr=\count104 -\@orgargctr=\count105 -\@strctr=\count106 -\@tmpstrctr=\count107 -\@DT@loopN=\count108 -\@DT@X=\count109 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\datetime\datetime- -defaults.sty" -Package: datetime-defaults 2013/09/10 -) -\@day=\count110 -\@month=\count111 -\@year=\count112 -\c@HOUR=\count113 -\c@HOURXII=\count114 -\c@MINUTE=\count115 -\c@TOHOUR=\count116 -\c@TOMINUTE=\count117 -\c@SECOND=\count118 -\currenthour=\count119 -\currentminute=\count120 -\currentsecond=\count121 -Package datetime Info: No datetime.cfg file found, using default settings on in -put line 308. -\@dtctr=\count122 -\dayofyear=\count123 -\dayofweek=\count124 -LaTeX Info: Redefining \today on input line 736. - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\datetime\dt-french -.def" -File: dt-french.def 2013/09/10 -LaTeX Info: Redefining \datefrench on input line 91. -) -\dt@a=\toks21 -\dt@b=\toks22 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\geometry\geometry. -sty" -Package: geometry 2010/09/12 v5.6 Page Geometry - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\ifpdf.s -ty" -Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\ifvtex. -sty" -Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) -Package ifvtex Info: VTeX not detected. -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\ifxetex\ifxetex. -sty" -Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional -) -\Gm@cnth=\count125 -\Gm@cntv=\count126 -\c@Gm@tempcnt=\count127 -\Gm@bindingoffset=\dimen107 -\Gm@wd@mp=\dimen108 -\Gm@odd@mp=\dimen109 -\Gm@even@mp=\dimen110 -\Gm@layoutwidth=\dimen111 -\Gm@layoutheight=\dimen112 -\Gm@layouthoffset=\dimen113 -\Gm@layoutvoffset=\dimen114 -\Gm@dimlist=\toks23 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\geometry\geometry. -cfg")) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\tocbibind\tocbibin -d.sty" -Package: tocbibind 2010/10/13 v1.5k extra ToC listings -Package tocbibind Info: The document has section divisions on input line 50. - - -Package tocbibind Note: Using section or other style headings. - -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsmath\amsmath.st -y" -Package: amsmath 2017/09/02 v2.17a AMS math features -\@mathmargin=\skip50 - -For additional information on amsmath, use the `?' option. - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsmath\amstext.st -y" -Package: amstext 2000/06/29 v2.01 AMS text -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsmath\amsbsy.sty -" -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen115 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsmath\amsopn.sty -" -Package: amsopn 2016/03/08 v2.02 operator names -) -\inf@bad=\count128 -LaTeX Info: Redefining \frac on input line 213. -\uproot@=\count129 -\leftroot@=\count130 -LaTeX Info: Redefining \overline on input line 375. -\classnum@=\count131 -\DOTSCASE@=\count132 -LaTeX Info: Redefining \ldots on input line 472. -LaTeX Info: Redefining \dots on input line 475. -LaTeX Info: Redefining \cdots on input line 596. -\Mathstrutbox@=\box26 -\strutbox@=\box27 -\big@size=\dimen116 -LaTeX Font Info: Redeclaring font encoding OML on input line 712. -LaTeX Font Info: Redeclaring font encoding OMS on input line 713. -\macc@depth=\count133 -\c@MaxMatrixCols=\count134 -\dotsspace@=\muskip10 -\c@parentequation=\count135 -\dspbrk@lvl=\count136 -\tag@help=\toks24 -\row@=\count137 -\column@=\count138 -\maxfields@=\count139 -\andhelp@=\toks25 -\eqnshift@=\dimen117 -\alignsep@=\dimen118 -\tagshift@=\dimen119 -\tagwidth@=\dimen120 -\totwidth@=\dimen121 -\lineht@=\dimen122 -\@envbody=\toks26 -\multlinegap=\skip51 -\multlinetaggap=\skip52 -\mathdisplay@stack=\toks27 -LaTeX Info: Redefining \[ on input line 2817. -LaTeX Info: Redefining \] on input line 2818. -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amscls\amsthm.sty" -Package: amsthm 2017/10/31 v2.20.4 -\thm@style=\toks28 -\thm@bodyfont=\toks29 -\thm@headfont=\toks30 -\thm@notefont=\toks31 -\thm@headpunct=\toks32 -\thm@preskip=\skip53 -\thm@postskip=\skip54 -\thm@headsep=\skip55 -\dth@everypar=\toks33 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsfonts\amssymb.s -ty" -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsfonts\amsfonts. -sty" -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\tools\calc.sty" -Package: calc 2014/10/28 v4.3 Infix arithmetic (KKT,FJ) -\calc@Acount=\count140 -\calc@Bcount=\count141 -\calc@Adimen=\dimen123 -\calc@Bdimen=\dimen124 -\calc@Askip=\skip56 -\calc@Bskip=\skip57 -LaTeX Info: Redefining \setlength on input line 80. -LaTeX Info: Redefining \addtolength on input line 81. -\calc@Ccount=\count142 -\calc@Cskip=\skip58 -) -(C:/localtex\tex\latex\dirtytalk\dirtytalk.sty -Package: dirtytalk 2010/11/21 A package making "quoting" easier - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\oberdiek\kvoptions -.sty" -Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\ltxcmds -.sty" -Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\kvsetke -ys.sty" -Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\infware -rr.sty" -Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\etexcmd -s.sty" -Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\ifluate -x.sty" -Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -) -Package etexcmds Info: Could not find \expanded. -(etexcmds) That can mean that you are not using pdfTeX 1.50 or -(etexcmds) that some package has redefined \expanded. -(etexcmds) In the latter case, load this package earlier. -))) -\c@dirtytalk@qdepth=\count143 -) -\c@definition=\count144 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\tools\array.sty" -Package: array 2016/10/06 v2.4d Tabular extension package (FMi) -\col@sep=\dimen125 -\extrarowheight=\dimen126 -\NC@list=\toks34 -\extratabsurround=\skip59 -\backup@length=\skip60 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\float\float.sty" -Package: float 2001/11/08 v1.3d Float enhancements (AL) -\c@float@type=\count145 -\float@exts=\toks35 -\float@box=\box28 -\@float@everytoks=\toks36 -\@floatcapt=\box29 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics\lscape.st -y" -Package: lscape 2000/10/22 v3.01 Landscape Pages (DPC) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics\graphics. -sty" -Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics\trig.sty" -Package: trig 2016/01/03 v1.10 sin cos tan (DPC) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics-cfg\graph -ics.cfg" -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 99. - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics-def\pdfte -x.def" -File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex -))) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\tools\enumerate.st -y" -Package: enumerate 2015/07/23 v3.00 enumerate extensions (DPC) -\@enLab=\toks37 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics\graphicx. -sty" -Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR) -\Gin@req@height=\dimen127 -\Gin@req@width=\dimen128 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics\color.sty -" -Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics-cfg\color -.cfg" -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package color Info: Driver file: pdftex.def on input line 147. -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\units\units.sty" -Package: units 1998/08/04 v0.9b Typesetting units - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\units\nicefrac.sty -" -Package: nicefrac 1998/08/04 v0.9b Nice fractions -\L@UnitsRaiseDisplaystyle=\skip61 -\L@UnitsRaiseTextstyle=\skip62 -\L@UnitsRaiseScriptstyle=\skip63 -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\basiclayer\pgf -.sty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\utilities\pgfr -cs.sty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -futil-common.tex" -\pgfutil@everybye=\toks38 -\pgfutil@tempdima=\dimen129 -\pgfutil@tempdimb=\dimen130 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -futil-common-lists.tex")) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -futil-latex.def" -\pgfutil@abb=\box30 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\ms\everyshi.sty" -Package: everyshi 2001/05/15 v3.00 EveryShipout Package (MS) -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -frcs.code.tex" -Package: pgfrcs 2015/08/07 v3.0.1a (rcs-revision 1.31) -)) -Package: pgf 2015/08/07 v3.0.1a (rcs-revision 1.15) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\basiclayer\pgf -core.sty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\systemlayer\pg -fsys.sty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\systemlayer\ -pgfsys.code.tex" -Package: pgfsys 2014/07/09 v3.0.1a (rcs-revision 1.48) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -fkeys.code.tex" -\pgfkeys@pathtoks=\toks39 -\pgfkeys@temptoks=\toks40 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -fkeysfiltered.code.tex" -\pgfkeys@tmptoks=\toks41 -)) -\pgf@x=\dimen131 -\pgf@y=\dimen132 -\pgf@xa=\dimen133 -\pgf@ya=\dimen134 -\pgf@xb=\dimen135 -\pgf@yb=\dimen136 -\pgf@xc=\dimen137 -\pgf@yc=\dimen138 -\w@pgf@writea=\write3 -\r@pgf@reada=\read1 -\c@pgf@counta=\count146 -\c@pgf@countb=\count147 -\c@pgf@countc=\count148 -\c@pgf@countd=\count149 -\t@pgf@toka=\toks42 -\t@pgf@tokb=\toks43 -\t@pgf@tokc=\toks44 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\systemlayer\ -pgf.cfg" -File: pgf.cfg 2008/05/14 (rcs-revision 1.7) -) -Driver file for pgf: pgfsys-pdftex.def - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\systemlayer\ -pgfsys-pdftex.def" -File: pgfsys-pdftex.def 2014/10/11 (rcs-revision 1.35) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\systemlayer\ -pgfsys-common-pdf.def" -File: pgfsys-common-pdf.def 2013/10/10 (rcs-revision 1.13) -))) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\systemlayer\ -pgfsyssoftpath.code.tex" -File: pgfsyssoftpath.code.tex 2013/09/09 (rcs-revision 1.9) -\pgfsyssoftpath@smallbuffer@items=\count150 -\pgfsyssoftpath@bigbuffer@items=\count151 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\systemlayer\ -pgfsysprotocol.code.tex" -File: pgfsysprotocol.code.tex 2006/10/16 (rcs-revision 1.4) -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\xcolor\xcolor.sty" -Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\graphics-cfg\color -.cfg" -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 225. -LaTeX Info: Redefining \color on input line 709. -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. -Package xcolor Info: Model `RGB' extended on input line 1364. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcore.code.tex" -Package: pgfcore 2010/04/11 v3.0.1a (rcs-revision 1.7) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -.code.tex" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -calc.code.tex" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -util.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -parser.code.tex" -\pgfmath@dimen=\dimen139 -\pgfmath@count=\count152 -\pgfmath@box=\box31 -\pgfmath@toks=\toks45 -\pgfmath@stack@operand=\toks46 -\pgfmath@stack@operation=\toks47 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.code.tex" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.basic.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.trigonometric.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.random.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.comparison.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.base.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.round.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.misc.code.tex") -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -functions.integerarithmetics.code.tex"))) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -float.code.tex" -\c@pgfmathroundto@lastzeros=\count153 -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorepoints.code.tex" -File: pgfcorepoints.code.tex 2013/10/07 (rcs-revision 1.27) -\pgf@picminx=\dimen140 -\pgf@picmaxx=\dimen141 -\pgf@picminy=\dimen142 -\pgf@picmaxy=\dimen143 -\pgf@pathminx=\dimen144 -\pgf@pathmaxx=\dimen145 -\pgf@pathminy=\dimen146 -\pgf@pathmaxy=\dimen147 -\pgf@xx=\dimen148 -\pgf@xy=\dimen149 -\pgf@yx=\dimen150 -\pgf@yy=\dimen151 -\pgf@zx=\dimen152 -\pgf@zy=\dimen153 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorepathconstruct.code.tex" -File: pgfcorepathconstruct.code.tex 2013/10/07 (rcs-revision 1.29) -\pgf@path@lastx=\dimen154 -\pgf@path@lasty=\dimen155 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorepathusage.code.tex" -File: pgfcorepathusage.code.tex 2014/11/02 (rcs-revision 1.24) -\pgf@shorten@end@additional=\dimen156 -\pgf@shorten@start@additional=\dimen157 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorescopes.code.tex" -File: pgfcorescopes.code.tex 2015/05/08 (rcs-revision 1.46) -\pgfpic=\box32 -\pgf@hbox=\box33 -\pgf@layerbox@main=\box34 -\pgf@picture@serial@count=\count154 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcoregraphicstate.code.tex" -File: pgfcoregraphicstate.code.tex 2014/11/02 (rcs-revision 1.12) -\pgflinewidth=\dimen158 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcoretransformations.code.tex" -File: pgfcoretransformations.code.tex 2015/08/07 (rcs-revision 1.20) -\pgf@pt@x=\dimen159 -\pgf@pt@y=\dimen160 -\pgf@pt@temp=\dimen161 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorequick.code.tex" -File: pgfcorequick.code.tex 2008/10/09 (rcs-revision 1.3) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcoreobjects.code.tex" -File: pgfcoreobjects.code.tex 2006/10/11 (rcs-revision 1.2) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorepathprocessing.code.tex" -File: pgfcorepathprocessing.code.tex 2013/09/09 (rcs-revision 1.9) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorearrows.code.tex" -File: pgfcorearrows.code.tex 2015/05/14 (rcs-revision 1.43) -\pgfarrowsep=\dimen162 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcoreshade.code.tex" -File: pgfcoreshade.code.tex 2013/07/15 (rcs-revision 1.15) -\pgf@max=\dimen163 -\pgf@sys@shading@range@num=\count155 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcoreimage.code.tex" -File: pgfcoreimage.code.tex 2013/07/15 (rcs-revision 1.18) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcoreexternal.code.tex" -File: pgfcoreexternal.code.tex 2014/07/09 (rcs-revision 1.21) -\pgfexternal@startupbox=\box35 -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorelayers.code.tex" -File: pgfcorelayers.code.tex 2013/07/18 (rcs-revision 1.7) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcoretransparency.code.tex" -File: pgfcoretransparency.code.tex 2013/09/30 (rcs-revision 1.5) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\basiclayer\p -gfcorepatterns.code.tex" -File: pgfcorepatterns.code.tex 2013/11/07 (rcs-revision 1.5) -))) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\modules\pgfm -oduleshapes.code.tex" -File: pgfmoduleshapes.code.tex 2014/03/21 (rcs-revision 1.35) -\pgfnodeparttextbox=\box36 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\modules\pgfm -oduleplot.code.tex" -File: pgfmoduleplot.code.tex 2015/08/03 (rcs-revision 1.13) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\compatibility\ -pgfcomp-version-0-65.sty" -Package: pgfcomp-version-0-65 2007/07/03 v3.0.1a (rcs-revision 1.7) -\pgf@nodesepstart=\dimen164 -\pgf@nodesepend=\dimen165 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\compatibility\ -pgfcomp-version-1-18.sty" -Package: pgfcomp-version-1-18 2007/07/23 v3.0.1a (rcs-revision 1.1) -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\frontendlayer\ -tikz.sty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\utilities\pgff -or.sty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\utilities\pgfk -eys.sty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -fkeys.code.tex")) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\pgf\math\pgfmath.s -ty" -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -.code.tex")) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\utilities\pg -ffor.code.tex" -Package: pgffor 2013/12/13 v3.0.1a (rcs-revision 1.25) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\math\pgfmath -.code.tex") -\pgffor@iter=\dimen166 -\pgffor@skip=\dimen167 -\pgffor@stack=\toks48 -\pgffor@toks=\toks49 -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\frontendlaye -r\tikz\tikz.code.tex" -Package: tikz 2015/08/07 v3.0.1a (rcs-revision 1.151) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\libraries\pg -flibraryplothandlers.code.tex" -File: pgflibraryplothandlers.code.tex 2013/08/31 v3.0.1a (rcs-revision 1.20) -\pgf@plot@mark@count=\count156 -\pgfplotmarksize=\dimen168 -) -\tikz@lastx=\dimen169 -\tikz@lasty=\dimen170 -\tikz@lastxsaved=\dimen171 -\tikz@lastysaved=\dimen172 -\tikzleveldistance=\dimen173 -\tikzsiblingdistance=\dimen174 -\tikz@figbox=\box37 -\tikz@figbox@bg=\box38 -\tikz@tempbox=\box39 -\tikz@tempbox@bg=\box40 -\tikztreelevel=\count157 -\tikznumberofchildren=\count158 -\tikznumberofcurrentchild=\count159 -\tikz@fig@count=\count160 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\modules\pgfm -odulematrix.code.tex" -File: pgfmodulematrix.code.tex 2013/09/17 (rcs-revision 1.8) -\pgfmatrixcurrentrow=\count161 -\pgfmatrixcurrentcolumn=\count162 -\pgf@matrix@numberofcolumns=\count163 -) -\tikz@expandcount=\count164 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\frontendlaye -r\tikz\libraries\tikzlibrarytopaths.code.tex" -File: tikzlibrarytopaths.code.tex 2008/06/17 v3.0.1a (rcs-revision 1.2) -))) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\frontendlaye -r\tikz\libraries\tikzlibraryshapes.geometric.code.tex" -File: tikzlibraryshapes.geometric.code.tex 2008/01/09 v3.0.1a (rcs-revision 1.1 -) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\libraries\sh -apes\pgflibraryshapes.geometric.code.tex" -File: pgflibraryshapes.geometric.code.tex 2008/06/26 v3.0.1a (rcs-revision 1.1) - -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\frontendlaye -r\tikz\libraries\tikzlibraryarrows.code.tex" -File: tikzlibraryarrows.code.tex 2008/01/09 v3.0.1a (rcs-revision 1.1) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\pgf\libraries\pg -flibraryarrows.code.tex" -File: pgflibraryarrows.code.tex 2013/09/23 v3.0.1a (rcs-revision 1.16) -\arrowsize=\dimen175 -)) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\hyperref\hyperref. -sty" -Package: hyperref 2018/02/06 v6.86b Hypertext links for LaTeX - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\hobsub- -hyperref.sty" -Package: hobsub-hyperref 2016/05/16 v1.14 Bundle oberdiek, subset hyperref (HO) - - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\hobsub- -generic.sty" -Package: hobsub-generic 2016/05/16 v1.14 Bundle oberdiek, subset generic (HO) -Package: hobsub 2016/05/16 v1.14 Construct package bundles (HO) -Package hobsub Info: Skipping package `infwarerr' (already loaded). -Package hobsub Info: Skipping package `ltxcmds' (already loaded). -Package hobsub Info: Skipping package `ifluatex' (already loaded). -Package hobsub Info: Skipping package `ifvtex' (already loaded). -Package: intcalc 2016/05/16 v1.2 Expandable calculations with integers (HO) -Package hobsub Info: Skipping package `ifpdf' (already loaded). -Package hobsub Info: Skipping package `etexcmds' (already loaded). -Package hobsub Info: Skipping package `kvsetkeys' (already loaded). -Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) -Package: pdftexcmds 2018/01/21 v0.26 Utility functions of pdfTeX for LuaTeX (HO -) -Package pdftexcmds Info: LuaTeX not detected. -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -Package: pdfescape 2016/05/16 v1.14 Implements pdfTeX's escape features (HO) -Package: bigintcalc 2016/05/16 v1.4 Expandable calculations on big integers (HO -) -Package: bitset 2016/05/16 v1.2 Handle bit-vector datatype (HO) -Package: uniquecounter 2016/05/16 v1.3 Provide unlimited unique counter (HO) -) -Package hobsub Info: Skipping package `hobsub' (already loaded). -Package: letltxmacro 2016/05/16 v1.5 Let assignment for LaTeX macros (HO) -Package: hopatch 2016/05/16 v1.3 Wrapper for package hooks (HO) -Package: xcolor-patch 2016/05/16 xcolor patch -Package: atveryend 2016/05/16 v1.9 Hooks at the very end of document (HO) -Package: atbegshi 2016/06/09 v1.18 At begin shipout hook (HO) -Package: refcount 2016/05/16 v3.5 Data extraction from label references (HO) -Package: hycolor 2016/05/16 v1.8 Color options for hyperref/bookmark (HO) -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\oberdiek\auxhook.s -ty" -Package: auxhook 2016/05/16 v1.4 Hooks for auxiliary files (HO) -) -\@linkdim=\dimen176 -\Hy@linkcounter=\count165 -\Hy@pagecounter=\count166 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\hyperref\pd1enc.de -f" -File: pd1enc.def 2018/02/06 v6.86b Hyperref: PDFDocEncoding definition (HO) -Now handling font encoding PD1 ... -... no UTF-8 mapping file for font encoding PD1 -) -\Hy@SavedSpaceFactor=\count167 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\00miktex\hyperref. -cfg" -File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive -) -Package hyperref Info: Hyper figures OFF on input line 4509. -Package hyperref Info: Link nesting OFF on input line 4514. -Package hyperref Info: Hyper index ON on input line 4517. -Package hyperref Info: Plain pages OFF on input line 4524. -Package hyperref Info: Backreferencing OFF on input line 4529. -Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4762. -\c@Hy@tempcnt=\count168 - ("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\url\url.sty" -\Urlmuskip=\muskip11 -Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. -) -LaTeX Info: Redefining \url on input line 5115. -\XeTeXLinkMargin=\dimen177 -\Fld@menulength=\count169 -\Field@Width=\dimen178 -\Fld@charsize=\dimen179 -Package hyperref Info: Hyper figures OFF on input line 6369. -Package hyperref Info: Link nesting OFF on input line 6374. -Package hyperref Info: Hyper index ON on input line 6377. -Package hyperref Info: backreferencing OFF on input line 6384. -Package hyperref Info: Link coloring OFF on input line 6389. -Package hyperref Info: Link coloring with OCG OFF on input line 6394. -Package hyperref Info: PDF/A mode OFF on input line 6399. -LaTeX Info: Redefining \ref on input line 6439. -LaTeX Info: Redefining \pageref on input line 6443. -\Hy@abspage=\count170 -\c@Item=\count171 -\c@Hfootnote=\count172 -) -Package hyperref Info: Driver (autodetected): hpdftex. - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\hyperref\hpdftex.d -ef" -File: hpdftex.def 2018/02/06 v6.86b Hyperref driver for pdfTeX -\Fld@listcount=\count173 -\c@bookmark@seq@number=\count174 - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\oberdiek\rerunfile -check.sty" -Package: rerunfilecheck 2016/05/16 v1.8 Rerun checks for auxiliary files (HO) -Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 -82. -) -\Hy@SectionHShift=\skip64 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\cprotect\cprotect. -sty" -Package: cprotect 2011/01/27 v1.0e (Bruno Le Floch) - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\bigfoot\suffix.sty -" -Package: suffix 2006/07/15 1.5a Variant command support -) -\CPT@WriteOut=\write4 -\c@CPT@WriteCount=\count175 -\c@CPT@numB=\count176 -\CPT@commandatend@toks=\toks50 -) -No file rapport_de_recherche.aux. -\openout1 = `rapport_de_recherche.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 62. -LaTeX Font Info: ... okay on input line 62. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 62. -LaTeX Font Info: ... okay on input line 62. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 62. -LaTeX Font Info: ... okay on input line 62. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 62. -LaTeX Font Info: ... okay on input line 62. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 62. -LaTeX Font Info: ... okay on input line 62. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 62. -LaTeX Font Info: ... okay on input line 62. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 62. -LaTeX Font Info: ... okay on input line 62. -LaTeX Info: Redefining \degres on input line 62. -LaTeX Info: Redefining \dots on input line 62. -Package french.ldf Info: Setting StandardEnumerateEnv=true for -(french.ldf) compatibility with enumerate package, -(french.ldf) reported on input line 62. -LaTeX Info: Redefining \up on input line 62. -*geometry* driver: auto-detecting -*geometry* detected driver: pdftex -*geometry* verbose mode - [ preamble ] result: -* driver: pdftex -* paper: -* layout: -* layoutoffset:(h,v)=(0.0pt,0.0pt) -* modes: -* h-part:(L,W,R)=(71.13188pt, 472.03123pt, 71.13188pt) -* v-part:(T,H,B)=(71.13188pt, 652.70622pt, 71.13188pt) -* \paperwidth=614.295pt -* \paperheight=794.96999pt -* \textwidth=472.03123pt -* \textheight=652.70622pt -* \oddsidemargin=-1.1381pt -* \evensidemargin=-1.1381pt -* \topmargin=-38.1381pt -* \headheight=12.0pt -* \headsep=25.0pt -* \topskip=12.0pt -* \footskip=30.0pt -* \marginparwidth=44.0pt -* \marginparsep=10.0pt -* \columnsep=10.0pt -* \skip\footins=10.8pt plus 4.0pt minus 2.0pt -* \hoffset=0.0pt -* \voffset=0.0pt -* \mag=1000 -* \@twocolumnfalse -* \@twosidefalse -* \@mparswitchfalse -* \@reversemarginfalse -* (1in=72.27pt=25.4mm, 1cm=28.453pt) - - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\context\base\supp-pdf.mk -ii" -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count177 -\scratchdimen=\dimen180 -\scratchbox=\box41 -\nofMPsegments=\count178 -\nofMParguments=\count179 -\everyMPshowfont=\toks51 -\MPscratchCnt=\count180 -\MPscratchDim=\dimen181 -\MPnumerator=\count181 -\makeMPintoPDFobject=\count182 -\everyMPtoPDFconversion=\toks52 -) -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\oberdiek\epstopdf- -base.sty" -Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\oberdiek\grfext.st -y" -Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) -) -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -38. -Package grfext Info: Graphics extension search list: -(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE -G,.JBIG2,.JB2,.eps] -(grfext) \AppendGraphicsExtensions on input line 456. -) ABD: EveryShipout initializing macros -\AtBeginShipoutBox=\box42 -Package hyperref Info: Link coloring OFF on input line 62. - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\hyperref\nameref.s -ty" -Package: nameref 2016/05/21 v2.44 Cross-referencing by name of section - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\gettitl -estring.sty" -Package: gettitlestring 2016/05/16 v1.5 Cleanup title references (HO) -) -\c@section@level=\count183 -) -LaTeX Info: Redefining \ref on input line 62. -LaTeX Info: Redefining \pageref on input line 62. -LaTeX Info: Redefining \nameref on input line 62. -\@outlinefile=\write5 -\openout5 = `rapport_de_recherche.out'. - - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session\pagetitre.tex" - -File: logo.png Graphic file (type png) - -Package pdftex.def Info: logo.png used on input line 2. -(pdftex.def) Requested size: 142.26378pt x 59.13257pt. - [1 - -{C:/Users/frabe/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map} ]) -\tf@toc=\write6 -\openout6 = `rapport_de_recherche.toc'. - - [2] -\openout2 = `introduction.aux'. - - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session\introduction.tex") -\openout2 = `modelisation.aux'. - - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session\modelisation.tex" -LaTeX Font Info: Try loading font information for U+msa on input line 13. - -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsfonts\umsa.fd" -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Try loading font information for U+msb on input line 13. -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\amsfonts\umsb.fd" -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) - -LaTeX Warning: Reference `eq:dtot' on page 3 undefined on input line 13. - - -LaTeX Warning: Reference `typeemployes' on page 3 undefined on input line 23. - - -LaTeX Warning: Reference `eq:eftept' on page 3 undefined on input line 30. - - -LaTeX Warning: Reference `tableauxvariables' on page 3 undefined on input line -42. - - -Package natbib Warning: Citation `choco' on page 3 undefined on input line 53. - -[3 - - - -] - -LaTeX Warning: Reference `eq:contrnbpertravaillees' on page 4 undefined on inpu -t line 66. - - -LaTeX Warning: Reference `eq:contrdeuxperiodes' on page 4 undefined on input li -ne 73. - - -LaTeX Warning: Reference `eq:contrfinsemaine' on page 4 undefined on input line - 80. - - -LaTeX Warning: Reference `fig:automatemaxconsecutif' on page 4 undefined on inp -ut line 87. - -LaTeX Font Info: Try loading font information for T1+cmtt on input line 87. -("C:\Users\frabe\AppData\Local\Programs\MiKTeX 2.9\tex\latex\base\t1cmtt.fd" -File: t1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions -) - -File: maxconsecutif.pdf Graphic file (type pdf) - -Package pdftex.def Info: maxconsecutif.pdf used on input line 91. -(pdftex.def) Requested size: 426.79134pt x 225.85667pt. - - -LaTeX Warning: Reference `eq:horairejourvalide' on page 4 undefined on input li -ne 101. - - -LaTeX Warning: Reference `eq:horairequotidienvalide' on page 4 undefined on inp -ut line 101. - - -LaTeX Warning: Reference `eq:produithoraire' on page 4 undefined on input line -101. - -[4] - -LaTeX Warning: Reference `sec:horairesvalides' on page 5 undefined on input lin -e 118. - - -LaTeX Warning: Reference `eq:contraintetableau' on page 5 undefined on input li -ne 118. - - -LaTeX Warning: Reference `eq:contrsumemployes' on page 5 undefined on input lin -e 129. - -[5 ] - -LaTeX Warning: Reference `eq:fonctionobjectif' on page 6 undefined on input lin -e 139. - -) [6] -\openout2 = `generationabsences.aux'. - - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session\generationabsences.tex" - -LaTeX Warning: Reference `eq:scenarioabsence' on page 7 undefined on input line - 5. - - -LaTeX Warning: Reference `eq:matricetransition' on page 7 undefined on input li -ne 5. - - -Package natbib Warning: Citation `jdistlib' on page 7 undefined on input line 5 -. - -) [7 - - -] -\openout2 = `recouvrement.aux'. - - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session\recouvrement.tex") [8 - - -] -\openout2 = `experimentation.aux'. - - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session\experimentation.tex") -\openout2 = `resultats.aux'. - - -("F:/OneDrive/Franky/Programme_informatique/IFT-7020/Travail de session/Git Rep -ository/Rapport_de_session\resultats.tex" \ No newline at end of file diff --git a/Rapport_de_session/rapport_de_recherche.pdf b/Rapport_de_session/rapport_de_recherche.pdf index 366da98..4c9a8b8 100644 Binary files a/Rapport_de_session/rapport_de_recherche.pdf and b/Rapport_de_session/rapport_de_recherche.pdf differ diff --git a/Rapport_de_session/rapport_de_recherche.synctex.gz b/Rapport_de_session/rapport_de_recherche.synctex.gz deleted file mode 100644 index bac53bc..0000000 Binary files a/Rapport_de_session/rapport_de_recherche.synctex.gz and /dev/null differ diff --git a/Rapport_de_session/rapport_de_recherche.tex b/Rapport_de_session/rapport_de_recherche.tex index 6e44abb..23e8129 100644 --- a/Rapport_de_session/rapport_de_recherche.tex +++ b/Rapport_de_session/rapport_de_recherche.tex @@ -1,4 +1,4 @@ -\documentclass[12pt]{article} % Précise le type de document, et la taille de la police de caractère +\documentclass[11pt]{article} % Précise le type de document, et la taille de la police de caractère \usepackage[square,sort,numbers]{natbib}% Pour pouvoir utiliser une bibliographie externe \usepackage[french]{babel} % Pour préciser la langue du document \usepackage[utf8]{inputenc} % Précise comment le texte est saisi : cela permet de tapper directement les accents @@ -57,12 +57,17 @@ \usepackage{cprotect} % Pour pouvoir personaliser la légende des figures \DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} +\setlength{\fboxsep}{3pt} +\setlength{\fboxrule}{1pt} %---------------------------------------------------------------- \begin{document} \input{pagetitre} % Inclut le code contenu dans un fichier comme s'il était entré ici \tableofcontents -%\listoffigures +\newpage +\listoffigures +\newpage +\listoftables % Le package newclude mis en commentaire permet d'introduire une * pour éviter le saut de page entre les section \include{introduction} \include{modelisation} diff --git a/Rapport_de_session/resultats.tex b/Rapport_de_session/resultats.tex index 23ff1b1..ce67cf5 100644 --- a/Rapport_de_session/resultats.tex +++ b/Rapport_de_session/resultats.tex @@ -6,21 +6,21 @@ \subsection{Résultats de l'étude de cas} À l'aide du modèle de génération d'horaires en 2 phases, 8 horaires présentant des ratios employés temps plein / employés temps partiel différents ont été obtenus (voir Annexe 1). Puisque les 2 types d'employés ont des contraintes différentes quant au recouvrement de ces derniers, il a été possible de tester l'effet du taux d'absentéisme et de l'augmentation de la demande. L'effet de ces 2 paramètres sur le coût de recouvrement des 8 horaires sont présentés au Tableau \ref{table:TableauEffetsParametres}. Ces coûts de recouvrement sont présentés comme un ratio par rapport au coût de l'horaire optimale, soit celle ayant un nombre d'employé temps plein maximal. -\begin{figure}[ht] +\begin{table}[ht] \centering - \includegraphics[width=16cm]{Figures/TableaueffetsParametres.png} + \includegraphics[width=16cm]{Tables/TableaueffetsParametres.png} \caption{Effet des probabilités d'absentéisme et d'augmentation de la demande de travail sur le coût moyen de recouvrement des horaires.} \label{table:TableauEffetsParametres} -\end{figure} +\end{table} Comme le montre ce tableau, pour une probabilité d'absentéisme nulle (sans absence), le coût des horaires augmente en fonction du nombre d'employé à temps partiel. Cela est dû au fait que ces employés ont un taux horaire régulier 20\% plus élevé que celui des employés à temps plein. De plus, pour tous les ratios de type employés, l'augmentation de la probabilité d'absentéisme et l'augmentation de la probabilité d'augmentation de la demande de travail sont associées à l'augmentation du coût de recouvrement des horaires. Cette augmentation de coûts est liée au temps supplémentatire des employés à temps plein (+50\%) ainsi que du taux horaire régulier supérieur des employés à temps partiel, lesquels sont privilégiés pour effectuer les recouvrements. Enfin, ces résultats démontrent que le ratio de type d'employés qui conduit à l'horaire avec un coût de recouvrement minimal varie selon les deux paramètres testés. En effet, lorsque le nombre d'absence et/ou la demande de travail supplémentaire augmente de façon importante, un nombre d'employés à temps partiel supérieur par rapport au nombre d'employés à temps plein permet d'obtenir un horaire au coût de recouvrement le plus faible. La prinpale raison est un diminution du temps supplémentaire effectué par les employés à temps plein. La Figure xx montre les ratios de type d'employés à privilégier pour la construction d'horaires en fonction des probabilités d'absence et d'augmentation de la demande de travail. -\begin{figure}[ht] +\begin{table}[ht] \centering \includegraphics[width=16cm]{Figures/Mapping.png} \caption{Proportion d'employés à temps plein optimale en fonction des probabilités d'absentéisme et d'augmentation de la demande de travail.} \label{table:MappingRatioOptimal} -\end{figure} +\end{table} %%% Local Variables: %%% mode: latex diff --git a/Travail_de_session/AbsenceSchedules/AbsenceSchedulesArray.java b/Travail_de_session/AbsenceSchedules/AbsenceSchedulesArray.java index ef1c91d..c0f216e 100644 --- a/Travail_de_session/AbsenceSchedules/AbsenceSchedulesArray.java +++ b/Travail_de_session/AbsenceSchedules/AbsenceSchedulesArray.java @@ -5,8 +5,8 @@ import ScheduleUtil.SchedulesArray; import jdistlib.rng.RandomEngine; public class AbsenceSchedulesArray extends SchedulesArray{ - - public SchedulesArray initialSchedulesArray; + + private final SchedulesArray initialSchedulesArray; public int numberOfRecoveringActionsToPerform; public AbsenceSchedulesArray(SchedulesArray initialSchedulesArray, RandomEngine r) { diff --git a/Travail_de_session/AbsenceSchedules/AbsencesVector.java b/Travail_de_session/AbsenceSchedules/AbsencesVector.java index bb141de..9a29ffb 100644 --- a/Travail_de_session/AbsenceSchedules/AbsencesVector.java +++ b/Travail_de_session/AbsenceSchedules/AbsencesVector.java @@ -3,7 +3,7 @@ package AbsenceSchedules; import jdistlib.Binomial; import jdistlib.rng.RandomEngine; -public class AbsencesVector { +class AbsencesVector { private final boolean[] AbsencesVector; public AbsencesVector(int length, RandomEngine r) { diff --git a/Travail_de_session/AbsenceSchedules/BankAbsenceSchedules.java b/Travail_de_session/AbsenceSchedules/BankAbsenceSchedules.java index bcf86bb..907c454 100644 --- a/Travail_de_session/AbsenceSchedules/BankAbsenceSchedules.java +++ b/Travail_de_session/AbsenceSchedules/BankAbsenceSchedules.java @@ -6,6 +6,7 @@ package AbsenceSchedules; import ScheduleUtil.SchedulesArray; + import java.util.ArrayList; import java.util.List; @@ -14,8 +15,8 @@ import java.util.List; * @author frabe */ public class BankAbsenceSchedules { - public SchedulesArray initialSchedulesArray; - public List bankAbsenceSimulation; + public final SchedulesArray initialSchedulesArray; + public final List bankAbsenceSimulation; public BankAbsenceSchedules(SchedulesArray initialSchedulesArray) { this.initialSchedulesArray = initialSchedulesArray; diff --git a/Travail_de_session/AbsenceSchedules/ParametersAbsencesSimulator.java b/Travail_de_session/AbsenceSchedules/ParametersAbsencesSimulator.java index c5e46a5..e0ae85c 100644 --- a/Travail_de_session/AbsenceSchedules/ParametersAbsencesSimulator.java +++ b/Travail_de_session/AbsenceSchedules/ParametersAbsencesSimulator.java @@ -10,7 +10,7 @@ package AbsenceSchedules; * @author frabe */ public class ParametersAbsencesSimulator { - public static double probPresence = 0.99; + public static final double probPresence = 0.99; public static final double probReturn = 0.50; - public static int numberAbsenceSimulations = 1000; + public static final int numberAbsenceSimulations = 1000; } diff --git a/Travail_de_session/InitialSchedules/GenerationPossibleEmployeeSchedules.java b/Travail_de_session/InitialSchedules/GenerationPossibleEmployeeSchedules.java index 135ded1..5cc586b 100644 --- a/Travail_de_session/InitialSchedules/GenerationPossibleEmployeeSchedules.java +++ b/Travail_de_session/InitialSchedules/GenerationPossibleEmployeeSchedules.java @@ -11,13 +11,12 @@ import org.chocosolver.solver.constraints.extension.Tuples; * * @author frabe */ -public class GenerationPossibleEmployeeSchedules { +class GenerationPossibleEmployeeSchedules { public static Tuples setWorkPeriodsSchedulesOfFullTimeEmployees(int shiftWorkPerDay, int workPeriodsPerSchedule, int workPeriodPerDay, int daysPerSchedule) { ValidDailySchedules validDailyFullTimeSchedules = new ValidDailySchedules(daysPerSchedule, 10, 10, - 0, 5, 7, 12, @@ -35,28 +34,28 @@ public class GenerationPossibleEmployeeSchedules { for (int day = 0; day < daysPerSchedule; day++) { for (int shiftNumber = 0; shiftNumber < shiftWorkPerDay; shiftNumber++) { if (dailySchedulesOfFullTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 0) { - workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 0] = 1; + workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay] = 1; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 1] = 1; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 2] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 3] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 4] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 5] = 0; } else if (dailySchedulesOfFullTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 1) { - workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 1] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 2] = 1; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 3] = 1; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 4] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 5] = 0; } else if (dailySchedulesOfFullTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 2) { - workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 1] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 2] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 3] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 4] = 1; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 5] = 1; } else if (dailySchedulesOfFullTimeEmployees[scheduleNumber][day] == 0) { - workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 1] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 2] = 0; workPeriodsSchedulesOfFullTimeEmployees[scheduleNumber * shiftWorkPerDay + shiftNumber][day * workPeriodPerDay + 3] = 0; @@ -68,8 +67,7 @@ public class GenerationPossibleEmployeeSchedules { } // Creation des tuples a partir du tableau pour creer les 3 types de quart de travail (nuit, jour soir). - Tuples enumerationWorkPeriodsSchedulesOfFullTimeEmployees = new Tuples(workPeriodsSchedulesOfFullTimeEmployees, true); - return enumerationWorkPeriodsSchedulesOfFullTimeEmployees; + return new Tuples(workPeriodsSchedulesOfFullTimeEmployees, true); } public static Tuples setWorkPeriodsSchedulesOfPartTimeEmployees(int workPeriodsPerSchedule, int workPeriodPerDay, int daysPerSchedule) { @@ -79,7 +77,6 @@ public class GenerationPossibleEmployeeSchedules { 0, 0, 0, - 0, 6); int NbPartTimeSolutions = validDailyPartTimeSchedules.getNbSolutions(); @@ -96,42 +93,42 @@ public class GenerationPossibleEmployeeSchedules { for (int day = 0; day < daysPerSchedule; day++) { for (int shiftNumber = 0; shiftNumber < maxShiftConfig; shiftNumber++) { if (dailySchedulesOfPartTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 0) { - workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 0] = 1; + workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 1] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 2] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 3] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 4] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 5] = 0; } else if (dailySchedulesOfPartTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 1) { - workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 1] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 2] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 3] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 4] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 5] = 0; } else if (dailySchedulesOfPartTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 2) { - workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 1] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 2] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 3] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 4] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 5] = 0; } else if (dailySchedulesOfPartTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 3) { - workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 1] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 2] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 3] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 4] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 5] = 0; } else if (dailySchedulesOfPartTimeEmployees[scheduleNumber][day] == 1 && shiftNumber == 4) { - workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 1] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 2] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 3] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 4] = 1; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 5] = 1; } else if (dailySchedulesOfPartTimeEmployees[scheduleNumber][day] == 0) { - workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 0] = 0; + workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 1] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 2] = 0; workPeriodsSchedulesOfPartTimeEmployees[scheduleNumber * maxShiftConfig + shiftNumber][day * workPeriodPerDay + 3] = 0; @@ -143,7 +140,6 @@ public class GenerationPossibleEmployeeSchedules { } // Creation des tuples a partir du tableau pour creer les 3 types de quart de travail (nuit, jour soir). - Tuples enumerationWorkPeriodsSchedulesOfPartTimeEmployees = new Tuples(workPeriodsSchedulesOfPartTimeEmployees, true); - return enumerationWorkPeriodsSchedulesOfPartTimeEmployees; + return new Tuples(workPeriodsSchedulesOfPartTimeEmployees, true); } } diff --git a/Travail_de_session/InitialSchedules/ModelFullTimeEmployeesInitialSchedules.java b/Travail_de_session/InitialSchedules/ModelFullTimeEmployeesInitialSchedules.java index e0ad052..004a8f6 100644 --- a/Travail_de_session/InitialSchedules/ModelFullTimeEmployeesInitialSchedules.java +++ b/Travail_de_session/InitialSchedules/ModelFullTimeEmployeesInitialSchedules.java @@ -14,16 +14,16 @@ import org.chocosolver.solver.variables.IntVar; * @author frabe */ public class ModelFullTimeEmployeesInitialSchedules { - public ParametersInitialSchedules myScheduleParameters; + public final ParametersInitialSchedules myScheduleParameters; - public int numberOfFullTimeEmployees; + public final int numberOfFullTimeEmployees; public BoolVar workPeriodsSchedulesOfFullTimeEmployees[][]; private BoolVar transposeWorkPeriodsSchedulesOfFullTimeEmployees[][]; private IntVar fullTimeEmployeesPerWorkPeriods[]; - public Model chocoModelInitialSchedules; + public final Model chocoModelInitialSchedules; public ModelFullTimeEmployeesInitialSchedules(ParametersInitialSchedules myScheduleParameters, int numberOfFullTimeEmployees) { @@ -70,7 +70,7 @@ public class ModelFullTimeEmployeesInitialSchedules { transposeWorkPeriodsSchedulesOfFullTimeEmployees[workPeriod], this.fullTimeEmployeesPerWorkPeriods[workPeriod]).post(); chocoModelInitialSchedules.arithm(this.fullTimeEmployeesPerWorkPeriods[workPeriod], "<=", - this.myScheduleParameters.requiredWorkforce[workPeriod]).post(); + this.myScheduleParameters.getRequiredWorkForce(workPeriod)).post(); } diff --git a/Travail_de_session/InitialSchedules/ModelPartTimeEmployeesInitialSchedules.java b/Travail_de_session/InitialSchedules/ModelPartTimeEmployeesInitialSchedules.java index 5b4e1e8..8d5713f 100644 --- a/Travail_de_session/InitialSchedules/ModelPartTimeEmployeesInitialSchedules.java +++ b/Travail_de_session/InitialSchedules/ModelPartTimeEmployeesInitialSchedules.java @@ -6,16 +6,16 @@ import org.chocosolver.solver.variables.IntVar; public class ModelPartTimeEmployeesInitialSchedules { - public ParametersInitialSchedules myScheduleParameters; + public final ParametersInitialSchedules myScheduleParameters; - public int maxPartTimeEmployee; + public final int maxPartTimeEmployee; public BoolVar workPeriodsSchedulesOfPartTimeEmployees[][]; private BoolVar transposeWorkPeriodsSchedulesOfPartTimeEmployees[][]; private IntVar partTimeEmployeesPerWorkPeriods[]; - public Model chocoModelInitialSchedules; + public final Model chocoModelInitialSchedules; public ModelPartTimeEmployeesInitialSchedules(ParametersInitialSchedules myScheduleParameters) { @@ -65,7 +65,7 @@ public class ModelPartTimeEmployeesInitialSchedules { transposeWorkPeriodsSchedulesOfPartTimeEmployees[workPeriod], this.partTimeEmployeesPerWorkPeriods[workPeriod]).post(); chocoModelInitialSchedules.arithm(this.partTimeEmployeesPerWorkPeriods[workPeriod], "=", - this.myScheduleParameters.requiredWorkforce[workPeriod]).post(); + this.myScheduleParameters.getRequiredWorkForce(workPeriod)).post(); } // Contrainte de bris de symétrie: diff --git a/Travail_de_session/InitialSchedules/ParametersInitialSchedules.java b/Travail_de_session/InitialSchedules/ParametersInitialSchedules.java index 9b3cd54..704753f 100644 --- a/Travail_de_session/InitialSchedules/ParametersInitialSchedules.java +++ b/Travail_de_session/InitialSchedules/ParametersInitialSchedules.java @@ -6,37 +6,37 @@ import org.chocosolver.solver.constraints.extension.Tuples; public class ParametersInitialSchedules { //General Parameters - final int shiftWorkPerDay = 3; - final int daysPerSchedule = 14; - final int hoursPerWorkPeriod = 4; - final int workingHoursPaidAtRegularHourlyRatePerSchedule = 80; - final int workingHoursPaidAtRegularHourlyRatePerShiftWork = 8; + private final int shiftWorkPerDay = 3; + private final int daysPerSchedule = 14; + private final int hoursPerWorkPeriod = 4; + private final int workingHoursPaidAtRegularHourlyRatePerSchedule = 80; + private final int workingHoursPaidAtRegularHourlyRatePerShiftWork = 8; //PartTime Employees Parameters - final int fixedCostOfPartTimeEmployeesPerSchedule = 50; - final int regularHourlyRateOfPartTimeEmployees = 12; - final int overtimeHourlyRateOfPartTimeEmployees = 17; - final int minWorkingHoursOfPartTimeEmployeesPerSchedule = 32; - final int maxWorkingHoursOfPartTimeEmployeesPerSchedule = 64; - final int maxConsecutiveWorkingHoursOfPartTimeEmployeesPerShiftWork = 12; - final int minConsecutiveNonWorkingHoursBetweenShiftWorksOfPartTimeEmployees = 12; + private final int fixedCostOfPartTimeEmployeesPerSchedule = 50; + private final int regularHourlyRateOfPartTimeEmployees = 12; + private final int overtimeHourlyRateOfPartTimeEmployees = 17; + private final int minWorkingHoursOfPartTimeEmployeesPerSchedule = 32; + private final int maxWorkingHoursOfPartTimeEmployeesPerSchedule = 64; + private final int maxConsecutiveWorkingHoursOfPartTimeEmployeesPerShiftWork = 12; + private final int minConsecutiveNonWorkingHoursBetweenShiftWorksOfPartTimeEmployees = 12; //FullTime Employees Parameters - final int fixedCostOfFullTimeEmployeesPerSchedule = 50; - final int regularHourlyRateOfFullTimeEmployees = 10; - final int overtimeHourlyRateOfFullTimeEmployees = 15; - final int workingHoursOfFullTimeEmployeesPerSchedule = 80; - final int maxWorkingHoursOfFullTimeEmployeesPerSchedule = 120; - final int maxConsecutiveWorkingHoursOfFullTimeEmployeesPerShiftWork = 12; - final int minConsecutiveNonWorkingHoursBetweenShiftWorksOfFullTimeEmployees = 12; + private final int fixedCostOfFullTimeEmployeesPerSchedule = 50; + private final int regularHourlyRateOfFullTimeEmployees = 10; + private final int overtimeHourlyRateOfFullTimeEmployees = 15; + private final int workingHoursOfFullTimeEmployeesPerSchedule = 80; + private final int maxWorkingHoursOfFullTimeEmployeesPerSchedule = 120; + private final int maxConsecutiveWorkingHoursOfFullTimeEmployeesPerShiftWork = 12; + private final int minConsecutiveNonWorkingHoursBetweenShiftWorksOfFullTimeEmployees = 12; - int[] requiredWorkforce; + private int[] requiredWorkforce; int NbFullTimeSolutions; int NbPartTimeSolutions; Tuples enumerationWorkPeriodsSchedulesOfFullTimeEmployees; Tuples enumerationWorkPeriodsSchedulesOfPartTimeEmployees; - Tuples ValidPartTimeEmployeeShiftTuples; + private Tuples ValidPartTimeEmployeeShiftTuples; public ParametersInitialSchedules() { @@ -77,6 +77,12 @@ public class ParametersInitialSchedules { public int getRequiredWorkForce(int workPeriod) { return this.requiredWorkforce[workPeriod]; } + + public void setRequiredWorkforce(int[] vector) { + for(int workPeriod=0;workPeriod=", nbPeriodesTravailleesMin).post(); diff --git a/Travail_de_session/InitialSchedules/ValidPartTimeEmployeeShift.java b/Travail_de_session/InitialSchedules/ValidPartTimeEmployeeShift.java index a319262..35171d2 100644 --- a/Travail_de_session/InitialSchedules/ValidPartTimeEmployeeShift.java +++ b/Travail_de_session/InitialSchedules/ValidPartTimeEmployeeShift.java @@ -2,8 +2,8 @@ package InitialSchedules; import org.chocosolver.solver.constraints.extension.Tuples; -public class ValidPartTimeEmployeeShift { - int[][] shiftsOfPartTimeEmployees; +class ValidPartTimeEmployeeShift { + private final int[][] shiftsOfPartTimeEmployees; public ValidPartTimeEmployeeShift() { this.shiftsOfPartTimeEmployees = new int[][]{ diff --git a/Travail_de_session/MainClass.java b/Travail_de_session/MainClass.java index b97b229..b4e0a63 100644 --- a/Travail_de_session/MainClass.java +++ b/Travail_de_session/MainClass.java @@ -2,6 +2,9 @@ import AbsenceSchedules.*; import InitialSchedules.*; import ScheduleUtil.*; import SchedulesRecovery.*; +import VariableDemandSchedules.BankVariableDemandSchedules; +import VariableDemandSchedules.ParametersVariableDemandSimulator; +import VariableDemandSchedules.VariableDemandSchedulesArray; import jdistlib.rng.MersenneTwister; import jdistlib.rng.RandomEngine; import org.chocosolver.solver.Solution; @@ -10,6 +13,7 @@ import java.util.ArrayList; import java.util.List; import java.util.PriorityQueue; +@SuppressWarnings("unused") public class MainClass { public static void main(String[] args) { @@ -24,17 +28,20 @@ public class MainClass { List initialSchedulesArrayList = generateInitialSchedules(); + //List listBankVariableDemandSchedules = GenerateModifiedDemandSchedules(initialSchedulesArrayList); + List listBankAbsenceSchedules = GenerateAbsencesSchedules(initialSchedulesArrayList); List bankRecoveredSchedulesOrderedByMeanCost = GenerateOptimalRecoveredSchedules(listBankAbsenceSchedules); - SchedulesWindows.ShowSolutionResultsFrame initialSchedulesViewer = new SchedulesWindows.ShowSolutionResultsFrame(bankRecoveredSchedulesOrderedByMeanCost); + @SuppressWarnings("unused") SchedulesWindows.ShowSolutionResultsFrame initialSchedulesViewer = new SchedulesWindows.ShowSolutionResultsFrame(bankRecoveredSchedulesOrderedByMeanCost); // int optimalFullTimeEmployee = bankRecoveredSchedulesOrderedByMeanCost.get(0).initialSchedulesArray.getNumberFullTimeEmployee(); // System.out.println(optimalFullTimeEmployee + " "); // } } + @SuppressWarnings("unused") private static List generateInitialSchedules() { // Trouver les horaires des employes a temps plein possibles pour different ratio templein/temps partiel @@ -90,6 +97,25 @@ public class MainClass { } + private static List GenerateModifiedDemandSchedules(List initialSchedulesArrayList) { + RandomEngine r = new MersenneTwister(987654321); + List listBankVariableDemandSchedules = new ArrayList<>(); + List listVariableDemandSchedules = new ArrayList<>(); // to be removed + for (SchedulesArray initialSchedule : initialSchedulesArrayList) { + BankVariableDemandSchedules bankVariableDemandSimulations = new BankVariableDemandSchedules(initialSchedule); + for (int simNum = 0; simNum < ParametersVariableDemandSimulator.numberVariableDemandSimulation ; simNum++){ + VariableDemandSchedulesArray variableDemandSchedule = new VariableDemandSchedulesArray(initialSchedule,r); + listVariableDemandSchedules.add(variableDemandSchedule); + bankVariableDemandSimulations.addVariableDemandSchedules(variableDemandSchedule); + } + listBankVariableDemandSchedules.add(bankVariableDemandSimulations); + } + // Pour afficher les horaires avec demande modifiée + SchedulesWindows.ShowSchedulesFrame variableDemandSchedulesViewer = new SchedulesWindows.ShowSchedulesFrame(listVariableDemandSchedules,"Variable Demand Schedules"); + + return listBankVariableDemandSchedules; + } + private static List GenerateAbsencesSchedules(List initialSchedulesArrayList) { RandomEngine r = new MersenneTwister(123456789); diff --git a/Travail_de_session/ScheduleUtil/EmployeeCostCalculator.java b/Travail_de_session/ScheduleUtil/EmployeeCostCalculator.java index 3995c97..f8b34c5 100644 --- a/Travail_de_session/ScheduleUtil/EmployeeCostCalculator.java +++ b/Travail_de_session/ScheduleUtil/EmployeeCostCalculator.java @@ -8,6 +8,8 @@ package ScheduleUtil; import AbsenceSchedules.AbsenceSchedulesArray; import InitialSchedules.ParametersInitialSchedules; import SchedulesRecovery.RecoveredSchedulesArray; +import VariableDemandSchedules.VariableDemandSchedulesArray; + /** * * @author frabe @@ -28,6 +30,18 @@ public class EmployeeCostCalculator { } return totalCost; } + + public static int getFullVariableDemandScheduleCost( VariableDemandSchedulesArray myVariableDemandSchedule, ParametersInitialSchedules myScheduleParameters) { + int totalCost = 0; + + /* Coût spécifique à une augmentation de la demande */ + for(int p=0;p bankRecoveredSimulation; - public List bankAbsenceSimulation; + public final SchedulesArray initialSchedulesArray; + public final List bankRecoveredSimulation; + private final List bankAbsenceSimulation; public double meanCostRecoveredSimulations; public BankRecoveredSchedules(SchedulesArray initialSchedulesArray, List bankAbsenceSimulation) { diff --git a/Travail_de_session/SchedulesRecovery/BankRecoveredSchedulesComparator.java b/Travail_de_session/SchedulesRecovery/BankRecoveredSchedulesComparator.java index 303920c..341c387 100644 --- a/Travail_de_session/SchedulesRecovery/BankRecoveredSchedulesComparator.java +++ b/Travail_de_session/SchedulesRecovery/BankRecoveredSchedulesComparator.java @@ -17,7 +17,6 @@ public class BankRecoveredSchedulesComparator implements Comparator< BankRecover if (meanCostCmp !=0) { return meanCostCmp; } - int simNumberCmp = Integer.compare(b1.initialSchedulesArray.initialScheduleSolutionNumber, b2.initialSchedulesArray.initialScheduleSolutionNumber); - return simNumberCmp; + return Integer.compare(b1.initialSchedulesArray.initialScheduleSolutionNumber, b2.initialSchedulesArray.initialScheduleSolutionNumber); } } diff --git a/Travail_de_session/SchedulesRecovery/RecoveredSchedulesArray.java b/Travail_de_session/SchedulesRecovery/RecoveredSchedulesArray.java index 66ce8c1..459d96a 100644 --- a/Travail_de_session/SchedulesRecovery/RecoveredSchedulesArray.java +++ b/Travail_de_session/SchedulesRecovery/RecoveredSchedulesArray.java @@ -6,16 +6,19 @@ package SchedulesRecovery; import AbsenceSchedules.AbsenceSchedulesArray; +import ScheduleUtil.EmployeeCostCalculator; +import ScheduleUtil.SchedulesArray; + import java.util.*; -import ScheduleUtil.*; /** * * @author frabe */ +@SuppressWarnings("unchecked") public class RecoveredSchedulesArray extends SchedulesArray{ - - public AbsenceSchedulesArray absenceSchedulesArray; + + public final AbsenceSchedulesArray absenceSchedulesArray; public RecoveredSchedulesArray(AbsenceSchedulesArray absenceSchedulesArray){ super(absenceSchedulesArray); @@ -140,7 +143,7 @@ public class RecoveredSchedulesArray extends SchedulesArray{ && !alreadyRecoveredWorkPeriodByPartTimeEmployees[partTimeEmployee][remainingRecoveringAction-1]){ RecoveringActionPartTimeEmployee recoveringAction = new RecoveringActionPartTimeEmployee(partTimeEmployee, workPeriod); - recoveringAction.calculateRecoveringActionCost (currentPartTimeSchedule, absenceSchedulesArray, myParametersInitialSchedules); + recoveringAction.calculateRecoveringActionCost(currentPartTimeSchedule, myParametersInitialSchedules); recoveringActionsOrderedByCost.add(recoveringAction); } } @@ -162,13 +165,13 @@ public class RecoveredSchedulesArray extends SchedulesArray{ int workingEmployees; for (int workPeriod = 0 ; workPeriod < myParametersInitialSchedules.getWorkPeriodsPerSchedule() ; workPeriod++) { workingEmployees = 0; - for (int partTimeEmployee = 0 ; partTimeEmployee < currentPartTimeSchedule.length ; partTimeEmployee++) { - if ( currentPartTimeSchedule[partTimeEmployee][workPeriod] ) { + for (boolean[] aCurrentPartTimeSchedule : currentPartTimeSchedule) { + if (aCurrentPartTimeSchedule[workPeriod]) { workingEmployees++; } } - for (int fullTimeEmployee = 0 ; fullTimeEmployee < currentFullTimeSchedule.length ; fullTimeEmployee++) { - if ( currentFullTimeSchedule[fullTimeEmployee][workPeriod] ) { + for (boolean[] aCurrentFullTimeSchedule : currentFullTimeSchedule) { + if (aCurrentFullTimeSchedule[workPeriod]) { workingEmployees++; } } diff --git a/Travail_de_session/SchedulesRecovery/RecoveringAction.java b/Travail_de_session/SchedulesRecovery/RecoveringAction.java index afb99d7..aa78eea 100644 --- a/Travail_de_session/SchedulesRecovery/RecoveringAction.java +++ b/Travail_de_session/SchedulesRecovery/RecoveringAction.java @@ -9,12 +9,12 @@ package SchedulesRecovery; * * @author frabe */ -public class RecoveringAction { - public int employee; - public int workPeriod; +class RecoveringAction { + public final int employee; + public final int workPeriod; public int recoveringActionCost; - - public RecoveringAction( int employee, int workPeriod){ + + RecoveringAction(int employee, int workPeriod) { this.employee = employee; this.workPeriod = workPeriod; } diff --git a/Travail_de_session/SchedulesRecovery/RecoveringActionComparator.java b/Travail_de_session/SchedulesRecovery/RecoveringActionComparator.java index 72cf651..0d35e8c 100644 --- a/Travail_de_session/SchedulesRecovery/RecoveringActionComparator.java +++ b/Travail_de_session/SchedulesRecovery/RecoveringActionComparator.java @@ -11,7 +11,7 @@ import java.util.Comparator; * @author frabe */ -public class RecoveringActionComparator implements Comparator< RecoveringAction > { +class RecoveringActionComparator implements Comparator { public int compare(RecoveringAction a2, RecoveringAction a1) { return Integer.compare(a1.recoveringActionCost, a2.recoveringActionCost); } diff --git a/Travail_de_session/SchedulesRecovery/RecoveringActionFullTimeEmployee.java b/Travail_de_session/SchedulesRecovery/RecoveringActionFullTimeEmployee.java index 368d8e0..8011852 100644 --- a/Travail_de_session/SchedulesRecovery/RecoveringActionFullTimeEmployee.java +++ b/Travail_de_session/SchedulesRecovery/RecoveringActionFullTimeEmployee.java @@ -7,13 +7,13 @@ package SchedulesRecovery; import AbsenceSchedules.AbsenceSchedulesArray; import InitialSchedules.ParametersInitialSchedules; -import ScheduleUtil.*; +import ScheduleUtil.EmployeeCostCalculator; /** * * @author frabe */ -public class RecoveringActionFullTimeEmployee extends RecoveringAction{ +class RecoveringActionFullTimeEmployee extends RecoveringAction { public RecoveringActionFullTimeEmployee( int employee, int workPeriod){ super(employee, workPeriod); diff --git a/Travail_de_session/SchedulesRecovery/RecoveringActionPartTimeEmployee.java b/Travail_de_session/SchedulesRecovery/RecoveringActionPartTimeEmployee.java index 2779e73..3c3ea0e 100644 --- a/Travail_de_session/SchedulesRecovery/RecoveringActionPartTimeEmployee.java +++ b/Travail_de_session/SchedulesRecovery/RecoveringActionPartTimeEmployee.java @@ -5,21 +5,20 @@ */ package SchedulesRecovery; -import AbsenceSchedules.AbsenceSchedulesArray; import InitialSchedules.ParametersInitialSchedules; -import ScheduleUtil.*; +import ScheduleUtil.EmployeeCostCalculator; /** * * @author frabe */ -public class RecoveringActionPartTimeEmployee extends RecoveringAction{ +class RecoveringActionPartTimeEmployee extends RecoveringAction { public RecoveringActionPartTimeEmployee( int employee, int workPeriod){ super(employee, workPeriod); } - - public void calculateRecoveringActionCost ( boolean[][] currentEmployeesSchedule,AbsenceSchedulesArray absenceSchedulesArray, ParametersInitialSchedules myScheduleParameters) { + + public void calculateRecoveringActionCost(boolean[][] currentEmployeesSchedule, ParametersInitialSchedules myScheduleParameters) { int costBeforeAction = EmployeeCostCalculator.getPartTimeEmployeeCost(currentEmployeesSchedule, this.employee, myScheduleParameters); currentEmployeesSchedule[this.employee][this.workPeriod] = true; int costAfterAction = EmployeeCostCalculator.getPartTimeEmployeeCost(currentEmployeesSchedule, this.employee, myScheduleParameters); diff --git a/Travail_de_session/SchedulesRecovery/ValidationRecoveringAction.java b/Travail_de_session/SchedulesRecovery/ValidationRecoveringAction.java index a21db5a..48b668d 100644 --- a/Travail_de_session/SchedulesRecovery/ValidationRecoveringAction.java +++ b/Travail_de_session/SchedulesRecovery/ValidationRecoveringAction.java @@ -14,7 +14,7 @@ import InitialSchedules.ParametersInitialSchedules; */ // classe statique pour mettre fonction utilitaire -public class ValidationRecoveringAction { +class ValidationRecoveringAction { //Toutes les fonctions sont dedoublees. On devrait faire du polymorphisme. static boolean isPartTimeEmployeeAvailableForAbsenceRecovering(boolean[][] currentPartTimeSchedule, ParametersInitialSchedules myScheduleParameters, diff --git a/Travail_de_session/SchedulesWindows/ShowSchedulesFrame.java b/Travail_de_session/SchedulesWindows/ShowSchedulesFrame.java index 3cb143b..dd13b92 100644 --- a/Travail_de_session/SchedulesWindows/ShowSchedulesFrame.java +++ b/Travail_de_session/SchedulesWindows/ShowSchedulesFrame.java @@ -5,7 +5,7 @@ */ package SchedulesWindows; -import java.util.*; +import java.util.List; /** * @@ -13,8 +13,8 @@ import java.util.*; */ public class ShowSchedulesFrame extends javax.swing.JFrame { - private List schedulesArrayList; - private String title; + private final List schedulesArrayList; + private final String title; /** * Creates new form ShowSchedulesFrame **/ @@ -40,20 +40,16 @@ public class ShowSchedulesFrame extends javax.swing.JFrame { // //GEN-BEGIN:initComponents private void initComponents() { - mainPanel = new javax.swing.JPanel(); + javax.swing.JPanel mainPanel = new javax.swing.JPanel(); changeScheduleNumberScrollBar = new javax.swing.JScrollBar(); - jScrollPane1 = new javax.swing.JScrollPane(); + javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane(); scheduleViewerArea = new javax.swing.JTextArea(); - jLabel1 = new javax.swing.JLabel(); + javax.swing.JLabel jLabel1 = new javax.swing.JLabel(); textSolutionNumber = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - changeScheduleNumberScrollBar.addAdjustmentListener(new java.awt.event.AdjustmentListener() { - public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { - changeScheduleNumberScrollBarAdjustmentValueChanged(evt); - } - }); + changeScheduleNumberScrollBar.addAdjustmentListener(evt -> changeScheduleNumberScrollBarAdjustmentValueChanged(evt)); scheduleViewerArea.setEditable(false); scheduleViewerArea.setColumns(20); @@ -124,9 +120,6 @@ public class ShowSchedulesFrame extends javax.swing.JFrame { // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollBar changeScheduleNumberScrollBar; - private javax.swing.JLabel jLabel1; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JPanel mainPanel; private javax.swing.JTextArea scheduleViewerArea; private javax.swing.JLabel textSolutionNumber; // End of variables declaration//GEN-END:variables diff --git a/Travail_de_session/SchedulesWindows/ShowSolutionResultsFrame.java b/Travail_de_session/SchedulesWindows/ShowSolutionResultsFrame.java index c55c8c7..c500b04 100644 --- a/Travail_de_session/SchedulesWindows/ShowSolutionResultsFrame.java +++ b/Travail_de_session/SchedulesWindows/ShowSolutionResultsFrame.java @@ -6,7 +6,8 @@ package SchedulesWindows; import SchedulesRecovery.BankRecoveredSchedules; -import java.util.*; + +import java.util.List; /** * @@ -14,7 +15,7 @@ import java.util.*; */ public class ShowSolutionResultsFrame extends javax.swing.JFrame { - private List< BankRecoveredSchedules > bankRecoveredSchedulesOrderedByMeanCost; + private final List bankRecoveredSchedulesOrderedByMeanCost; /** * Creates new form ShowSchedulesFrame */ @@ -39,22 +40,18 @@ public class ShowSolutionResultsFrame extends javax.swing.JFrame { // //GEN-BEGIN:initComponents private void initComponents() { - mainPanel = new javax.swing.JPanel(); + javax.swing.JPanel mainPanel = new javax.swing.JPanel(); changeScheduleNumberScrollBar = new javax.swing.JScrollBar(); - jScrollPane1 = new javax.swing.JScrollPane(); + javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane(); scheduleViewerArea = new javax.swing.JTextArea(); - jLabel1 = new javax.swing.JLabel(); + javax.swing.JLabel jLabel1 = new javax.swing.JLabel(); textSolutionNumber = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setPreferredSize(new java.awt.Dimension(1400, 600)); setSize(new java.awt.Dimension(1000, 600)); - changeScheduleNumberScrollBar.addAdjustmentListener(new java.awt.event.AdjustmentListener() { - public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { - changeScheduleNumberScrollBarAdjustmentValueChanged(evt); - } - }); + changeScheduleNumberScrollBar.addAdjustmentListener(evt -> changeScheduleNumberScrollBarAdjustmentValueChanged(evt)); scheduleViewerArea.setEditable(false); scheduleViewerArea.setColumns(20); @@ -130,9 +127,6 @@ public class ShowSolutionResultsFrame extends javax.swing.JFrame { // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollBar changeScheduleNumberScrollBar; - private javax.swing.JLabel jLabel1; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JPanel mainPanel; private javax.swing.JTextArea scheduleViewerArea; private javax.swing.JLabel textSolutionNumber; // End of variables declaration//GEN-END:variables diff --git a/Travail_de_session/VariableDemandSchedules/BankVariableDemandSchedules.java b/Travail_de_session/VariableDemandSchedules/BankVariableDemandSchedules.java new file mode 100644 index 0000000..ce808c5 --- /dev/null +++ b/Travail_de_session/VariableDemandSchedules/BankVariableDemandSchedules.java @@ -0,0 +1,20 @@ +package VariableDemandSchedules; + +import ScheduleUtil.SchedulesArray; + +import java.util.ArrayList; +import java.util.List; + +public class BankVariableDemandSchedules { + public final SchedulesArray initialSchedulesArray; + public final List bankVariableDemandSimulation; + + public BankVariableDemandSchedules(SchedulesArray initialSchedulesArray) { + this.initialSchedulesArray = initialSchedulesArray; + this.bankVariableDemandSimulation = new ArrayList<>(); + } + + public void addVariableDemandSchedules(VariableDemandSchedulesArray variableDemandSchedulesArray) { + this.bankVariableDemandSimulation.add(variableDemandSchedulesArray); + } +} diff --git a/Travail_de_session/VariableDemandSchedules/ParametersVariableDemandSimulator.java b/Travail_de_session/VariableDemandSchedules/ParametersVariableDemandSimulator.java new file mode 100644 index 0000000..549e4d6 --- /dev/null +++ b/Travail_de_session/VariableDemandSchedules/ParametersVariableDemandSimulator.java @@ -0,0 +1,5 @@ +package VariableDemandSchedules; + +public class ParametersVariableDemandSimulator { + public static final int numberVariableDemandSimulation = 1; +} diff --git a/Travail_de_session/VariableDemandSchedules/VariableDemandSchedulesArray.java b/Travail_de_session/VariableDemandSchedules/VariableDemandSchedulesArray.java new file mode 100644 index 0000000..65dc3f9 --- /dev/null +++ b/Travail_de_session/VariableDemandSchedules/VariableDemandSchedulesArray.java @@ -0,0 +1,40 @@ +package VariableDemandSchedules; + +import ScheduleUtil.EmployeeCostCalculator; +import ScheduleUtil.SchedulesArray; +import jdistlib.rng.RandomEngine; + +public class VariableDemandSchedulesArray extends SchedulesArray { + private final SchedulesArray initialSchedulesArray; + private SchedulesArray initialSchedulesArrayVariableDemand; + + public VariableDemandSchedulesArray(SchedulesArray initialSchedulesArray, RandomEngine r) { + super(initialSchedulesArray); + this.initialSchedulesArray = initialSchedulesArray; + generateDemandSimulation(r); + this.totalScheduleCost = EmployeeCostCalculator.getFullVariableDemandScheduleCost(this, myParametersInitialSchedules); + } + + private void generateDemandSimulation(RandomEngine r) { + int[] vd = new VariableDemandVector(this.myParametersInitialSchedules.getWorkPeriodsPerSchedule(), r).getVariableDemandVector(); + int[] adjd = new int[this.myParametersInitialSchedules.getWorkPeriodsPerSchedule()]; + for (int p = 0; p < this.myParametersInitialSchedules.getWorkPeriodsPerSchedule(); p++) { + adjd[p] = /*this.myParametersInitialSchedules.getRequiredWorkForce(p) + */vd[p]; + } + + this.initialSchedulesArrayVariableDemand = new SchedulesArray( + myParametersInitialSchedules, + initialSchedulesArray.fullTimeSchedules, + initialSchedulesArray.partTimeSchedules, + initialSchedulesArray.initialScheduleSolutionNumber, + adjd); + } + + public SchedulesArray getInitialSchedulesArrayVariableDemand() { + return initialSchedulesArrayVariableDemand; + } + + public SchedulesArray getInitialSchedulesArray() { + return initialSchedulesArray; + } +} diff --git a/Travail_de_session/VariableDemandSchedules/VariableDemandVector.java b/Travail_de_session/VariableDemandSchedules/VariableDemandVector.java new file mode 100644 index 0000000..f1d9a55 --- /dev/null +++ b/Travail_de_session/VariableDemandSchedules/VariableDemandVector.java @@ -0,0 +1,21 @@ +package VariableDemandSchedules; + +import jdistlib.Binomial; +import jdistlib.rng.RandomEngine; + +public class VariableDemandVector { + private int[] VariableDemandVector; + + VariableDemandVector(int length, RandomEngine r) { + VariableDemandVector = new int[length]; + Binomial p1 = new Binomial(1,0.5); + p1.setRandomEngine(r); + for (int i = 0; i < length; i++) { + VariableDemandVector[i] = (int) p1.random(); + } + } + + public int[] getVariableDemandVector() { + return VariableDemandVector; + } +} diff --git a/revue_litterature/fp/revue_litterature.pdf b/revue_litterature/fp/revue_litterature.pdf new file mode 100644 index 0000000..319ad8c Binary files /dev/null and b/revue_litterature/fp/revue_litterature.pdf differ