corrections dans le rapport

This commit is contained in:
François Pelletier 2018-04-21 12:05:27 -04:00
parent dd8bc6aeed
commit 0ae3c9be77
5 changed files with 39 additions and 37 deletions

View file

@ -2,7 +2,7 @@
\section{Approche proposée}
\label{sec:approcheproposee}
Ce problème sera modélisé à l'aide de la programmation par contraintes avec un objectif d'optimisation. Les différentes étapes suivies sont présentées à la figure \ref{fig:etapes}. Le choix de cette méthodologie est basé sur différents travaux dans le domaine de la planification \cite{easton_schedule_2005, hur_real-time_2004, mac-vicar_real-time_2017}. On développe donc un ensemble de paramètres, de variables, de contraintes ainsi qu'une fonction objectif.
On modélise ce problème à l'aide de la programmation par contraintes. Les différentes étapes suivies sont présentées à la figure \ref{fig:etapes}. Le choix de cette méthodologie est basé sur différents travaux dans le domaine de la planification \cite{easton_schedule_2005, hur_real-time_2004, mac-vicar_real-time_2017}. On développe donc un ensemble de paramètres, de variables et de contraintes.
\begin{figure}[h]
\centering
@ -14,7 +14,7 @@ Ce problème sera modélisé à l'aide de la programmation par contraintes avec
\subsection{Paramètres}
\label{sec:approcheparametres}
La durée de l'horaire est de $J$ jours de $P$ périodes, d'une durée d $\frac{24}{P}$ heures chacune. La demande de travail est représentée par une matrice $\mathbf{D} \in \N^{p \times j}$ où la valeur associée à la période $p$ de la journée $j$ est définie par la valeur $d_{p,j}$. La demande totale pour la durée de l'horaire de travail est définie par l'équation \eqref{eq:dtot}.
L'horaire a une durée de $J$ jours de $P$ périodes d $\frac{24}{P}$ heures chacune. La matrice $\mathbf{D} \in \N^{p \times j}$ représente la demande de travail où on définit celle de la période $p$ de la journée $j$ par $d_{p,j}$. L'équation \eqref{eq:dtot} définit la demande totale pour la durée de l'horaire de travail .
\begin{align}
\label{eq:dtot}
@ -23,19 +23,19 @@ La durée de l'horaire est de $J$ jours de $P$ périodes, d'une durée d $\fr
On représente l'ensemble des types d'employés disponibles $a \in \mathcal{A}$. Les employés travaillent entre $h_{min,a}$ et $h_{max,a}$ heures. On définit le nombre d'heures de repos minimal $r_{min,a}$ et le nombre maximal de journées consécutives par $j_{max,a}$.
Le nombre d'employés est variable. En tentant de résoudre le problème de satisfiabilité avec un nombre différent d'employés de chaque type, il est possible d'estimer une borne inférieure et une borne supérieure à ce nombre. On peut toutefois borner le maximum par les ratios suivants \eqref{eq:eftept}:
Le nombre d'employés est variable. En tentant de résoudre le problème de satisfiabilité avec un nombre différent de chaque type, on peut d'estimer des bornes inférieure et supérieure à ce nombre. On peut aussi borner le maximum par les ratios suivants \eqref{eq:eftept}:
\begin{align}
\label{eq:eftept}
E_{a} &= \frac{d_{tot}}{h_{min,a}}, &\forall a \in \mathcal{A}
\end{align}
Enfin, chaque type d'employé a un salaire par période de $s_{a}$ et encourent des frais fixes de $f_{a}$.
Enfin, chacun a un salaire par période de $s_{a}$ et encourent des frais fixes de $f_{a}$.
\subsection{Variables}
\label{sec:variables}
On représente les horaires de travail par deux tableaux $\mathbf{X}_{FT}$ et $\mathbf{X}_{PT}$ de variables booliennes $x$ représentant chacune si l'employé $e$ du type $a$ travaille à la période $p$ de la journée $j$ \eqref{tableauxvariables}.
On représente les horaires de travail par deux tableaux $\mathbf{X}_{FT}$ et $\mathbf{X}_{PT}$ de variables booliennes $x$, vraies si l'employé $e$ du type $a$ travaille à la période $p$ de la journée $j$ et fausse sinon \eqref{tableauxvariables}.
\begin{align}
\label{tableauxvariables}
@ -43,7 +43,7 @@ On représente les horaires de travail par deux tableaux $\mathbf{X}_{FT}$ et $\
dom(x_{e,j,p,a}) &= \lbrace 0,1 \rbrace, &\forall 1 \leq e \leq E_{a}, 1 \leq j \leq J, 1 \leq p \leq P, a \in \mathcal{A}\nonumber
\end{align}
On définit l'horaire s'appliquant à l'employé $e$ de type $a$ par la matrice $X_{e,a}$\eqref{eq:horaireemploye}.
On définit l'horaire de l'employé $e$ de type $a$ par la matrice $X_{e,a}$\eqref{eq:horaireemploye}.
\begin{align}
\label{eq:horaireemploye}
X_{e,a} &= \begin{bmatrix}x_{e,1,1,a}&\cdots&x_{e,1,J,a}\\
@ -55,9 +55,9 @@ On définit l'horaire s'appliquant à l'employé $e$ de type $a$ par la matrice
\subsection{Énumération des horaires valides}
\label{sec:horairesvalides}
Afin de réduire la taille du problème, la liste des horaires quotidiens valides pour un employé est générée, pour chaque type d'employés. Il s'agit de deux sous-problèmes de satisfaction pouvant aussi être résolus avec le solveur Choco \cite{choco}. L'énumération de toutes les solutions obtenues sera ensuite utilisée pour générer l'ensemble des tuples d'une contrainte \textsc{Tableau}.
Afin de réduire la taille du problème, la liste des horaires quotidiens valides pour un employé de chaque type est générée. Ces deux sous-problèmes de satisfaction peuvent aussi être résolus avec le solveur Choco \cite{choco}. L'énumération de toutes les solutions obtenues servira à générer l'ensemble des tuples d'une contrainte \textsc{Tableau}.
On définit un vecteur $\vec{H}_{a} \in \N^{J}$ de variables booliennes $h_{j}$ formant un horaire d'une durée de $J$ journées pour un employé de type $a$. L'horaire doit respecter le nombre de périodes travaillées sur la durée totale de l'horaire \eqref{eq:contrnbpertravaillees}.
On définit un vecteur $\vec{H}_{a} \in \N^{J}$. Les variables booliennes $h_{j}$ forment un horaire de $J$ journées pour un employé de type $a$. Il doit respecter le nombre de périodes travaillées désirées \eqref{eq:contrnbpertravaillees}.
\begin{align}
\label{eq:contrnbpertravaillees}
@ -71,23 +71,23 @@ L'horaire de l'employé à temps partiel doit contenir un même nombre de jours
\sum_{j=p1_{min}}^{p1_{max}} h_{j} = \sum_{j=p2_{min}}^{p2_{max}} h_{j}
\end{align}
L'horaire doit inclure le travail durant une fin de semaine sur deux \eqref{eq:contrfinsemaine}.
Il doit inclure le travail durant une fin de semaine sur deux \eqref{eq:contrfinsemaine}.
\begin{align}
\label{eq:contrfinsemaine}
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: lorsqu une séquence de jours dont la longueur est supérieure à $j_{max,A}$. L'expression régulière représentant ces horaires est représentée à 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.
Il 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: lorsqu une séquence de jours dont la longueur est supérieure à $j_{max,A}$. L'expression régulière qui modélise ces horaires est présentée à la figure \ref{fig:regexpautomate}. On obtient, pour chaque type de travailleur, une liste de vecteurs à laquelle on ajoute le vecteur nul, pour la situation où l'employé est exclu de l'horaire.
\begin{figure}[!ht]
\centering
\fbox{\texttt{[01]*1\{5,\}[01]*}}
\caption{Expression régulière représentant l'horaire des employés.}
\caption{Expression régulière qui représente l'horaire des employés.}
\label{fig:regexpautomate}
\end{figure}
Enfin, en effectuant le produit tensoriel de la matrice des horaires quinzomadaires valides $h_{reg,FT}$ \eqref{eq:horairejourvalide} et de la matrice des $n_{hq,a}$ horaires quotidiens valides \eqref{eq:horairequotidienvalide}, on obtient un tableau d'horaires par périodes travaillées valides $\mathbf{V}_a \in \N^{3}$ \eqref{eq:produithoraire}.
Enfin, en effectuant le produit tensoriel de la matrice des horaires sur deux semaines $h_{reg,FT}$ \eqref{eq:horairejourvalide} et de la matrice des $n_{hq,a}$ horaires quotidiens \eqref{eq:horairequotidienvalide}, on obtient un tableau d'horaires par périodes travaillées valides $\mathbf{V}_a \in \N^{3}$ \eqref{eq:produithoraire}.
\begin{align}
\label{eq:horairejourvalide}
\mathbf{H}_a &= \left( \vec{H}_{a} \right)\\
@ -104,7 +104,7 @@ Enfin, en effectuant le produit tensoriel de la matrice des horaires quinzomadai
\subsection{Contraintes}
\label{sec:contraintes}
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}. La planification doit aussi satisfaire la demande en employés, en utilisant une contrainte \textsc{Sum} \eqref{eq:contrsumemployes}. 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. On utilise alors la contrainte \textsc{LexLessEq} \eqref{eq:lex}.
Chaque horaire d'employé $X_e$ doit d'abord être valide (section \ref{sec:horairesvalides}). Il doit donc satisfaire une contrainte \textsc{Tableau} \eqref{eq:contraintetableau}. La planification doit aussi satisfaire la demande en employés, en utilisant une contrainte \textsc{Sum} \eqref{eq:contrsumemployes}. 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 et à temps partiel doivent, séparément, en ordre lexicographique. On utilise alors la contrainte \textsc{LexLessEq} \eqref{eq:lex}.
\begin{align}
\label{eq:contraintetableau}
\mathcal{C}_1 &: \textsc{Tableau}\left( \mathbf{V}_a,
@ -118,7 +118,7 @@ Chaque horaire d'employé $X_e$ doit d'abord correspondre à un horaire valide t
\subsection{Génération des scénarios de demande excédentaire}
\label{sec:scenariosdemande}
Chaque valeur $d_{p,j}$ de la matrice de demande peut être augmentée par une demande excédentaire, représentée par une variable aléatoire $D_{p,j}^{(exc)}$ dont la fonction de masse de probabilités est définie par \eqref{eq:masseprobdemande}. La librairie JDistLib \cite{jdistlib} est utilisée pour générer des valeurs aléatoires de cette variable.
Chaque valeur $d_{p,j}$ de la matrice de demande peut augmenter par une quantité de demande excédentaire, représentée par une variable aléatoire $D_{p,j}^{(exc)}$ \eqref{eq:masseprobdemande} définit la fonction de masse de probabilités . On utilise la librairie JDistLib \cite{jdistlib} pour générer des valeurs aléatoires de cette variable.
\begin{align}
\label{eq:masseprobdemande}
@ -132,18 +132,18 @@ Chaque valeur $d_{p,j}$ de la matrice de demande peut être augmentée par une d
On obtient alors une matrice de demande modifiée $\mathbf{D}^{\prime}$$d_{p,j}^{\prime}=d_{p,j}+D_{p,j}^{(exc)}$.
On pourra répéter cette procédure pour générer différentes matrices de demande de travail modifiées. Cette approche de simulation s'inspire des travaux de \cite{walsh_stochastic_2002} sans toutefois reprendre le modèle des variables stochastiques.
On pourra répéter cette procédure pour générer différentes matrices de demande de travail modifiées. Cette approche de simulation s'inspire des recherches de \cite{walsh_stochastic_2002} sans toutefois reprendre le modèle des variables stochastiques.
\subsection{Génération de scénarios d'absences}
\label{sec:scenariosabsences}
On génère des scénarios d'absences $\vec{B}_{e,A}$ indépendants pour chaque employé $e$ de type $A$ \eqref{eq:scenarioabsence} à l'aide d'une chaine de Markov sur deux états ($0$: indisponible; $1$: disponible) ayant pour matrice de transition \ref{eq:matricetransition}$p(0,0)$ correspond à la probabilité de demeurer indisponible à la période suivante et $p(1,1)$, celle de demeurer disponible. Tout comme pour la génération des scénarios de demande, on utilise JDistLib \cite{jdistlib} pour générer aléatoirement les valeurs de transition entre chaque période.
On génère des scénarios d'absences $\vec{B}_{e,A}$ indépendants pour chaque employé $e$ de type $A$ \eqref{eq:scenarioabsence} à l'aide d'une chaine de Markov sur deux états ($0$: indisponible; $1$: disponible) ayant pour matrice de transition \ref{eq:matricetransition}$p(s_1,s_2)$ est la probabilité de transition entre les états $s_1$ et $s_2$. Tout comme pour la génération des scénarios de demande, on utilise JDistLib \cite{jdistlib} pour générer aléatoirement les valeurs de transition entre chaque période.
\begin{align}
\label{eq:scenarioabsence}
\vec{B}_{e,A} &= \left[ b_{1,1},\ldots,b_{P,1},b_{1,2},\ldots,b_{P,2},\ldots,b_{1,J},\ldots,b_{P,J} \right], &\forall 1 \leq e \leq E_A\\
\label{eq:matricetransition}
M &= \begin{bmatrix}
S &= \begin{bmatrix}
p(0,0)&1-p(0,0)\\
1-p(1,1)&p(1,1)
\end{bmatrix}
@ -168,13 +168,13 @@ On pourra répéter cette procédure plusieurs fois pour obtenir différents sc
Une fois les absences et les nouveaux vecteurs de demande de travail générés dans chacun des horaires initiaux, un algorithme de recouvrement local des horaires est lancé sur chacune des simulations. Celui-ci est semblable à celui utilisé dans des travaux portant sur un problème semblable \cite{hur_real-time_2004, mac-vicar_real-time_2017}. Cette étape permettra de trouver des couts de recouvrement moyens pour chacune des horaires initiaux et ainsi, trouver laquelle correspond au cout de recouvrement le plus faible.
Étant donné que chaque recouvrement influence les recouvrements subséquents en raison des contraintes définies à la section \ref{sec:descriptionrecouvrement}, ce problème est NP-complet. Le nombre de n{\oe}uds de l'arbre de recherche permettant de trouver le cout de recouvrement minimal varie donc de façon exponentielle avec le nombre d'absences et d'augmentation de demande de travail. Pour éviter que le temps de calcul soit trop important pour cette phase de recouvrement, une fouille partielle de l'arbre de recherche est effectuée par des «plonges» successives dans l'arbre de recherche. Le pseudocode associé à cet algorithme est présenté à l'annexe 2. L'algorithme de recouvrement a les caractéristiques suivantes:
Étant donné que chaque recouvrement influence les subséquents en raison des contraintes définies à la section \ref{sec:descriptionrecouvrement}, ce problème est NP-complet. Le nombre de n{\oe}uds de l'arbre de recherche permettant de trouver le cout minimal varie donc de façon exponentielle avec le nombre d'absences et d'augmentation de demande de travail. Pour éviter que le temps de calcul soit trop important pour cette phase de recouvrement, une fouille partielle de l'arbre de recherche est effectuée par des plongées successives dans l'arbre de recherche. Le pseudocode associé à cet algorithme est présenté à l'annexe 2. L'algorithme de recouvrement a les caractéristiques suivantes:
\begin{itemize}
\item Les «plonges» successives sont guidées par une euristique qui choisit l'action de recouvrement ayant le cout minimum à chacun des noeuds. Si plusieurs actions correspondent à ce cout minimum, cette dernière est choisie de façon aléatoire, ce qui permet de mieux explorer l'arbre de recherche.
\item Lors de ces «plonges» successives dans l'arbre de recherche, chaque action de recouvrement, caractérisée par un employé donné recouvrant à une période de travail donné, est marquée dans une matrice de noeuds visités pour éviter de refaire cette action lors d'une «plonge» subséquente.
\item Les plongées successives sont guidées par une euristique qui choisit l'action de recouvrement ayant le cout minimum à chacun des n{\oe}uds. Si plusieurs actions correspondent à ce cout minimum, cette dernière est choisie de façon aléatoire, ce qui permet de mieux explorer l'arbre de recherche.
\item Lors de ces plongées successives dans l'arbre de recherche, chaque action de recouvrement, caractérisée par un employé donné recouvrant à une période de travail donné, est marquée dans une matrice de n{\oe}uds visités pour éviter de refaire celle-ci lors d'une plongée subséquente.
\item Lorsqu'aucune action n'est possible sans que l'horaire ne soit complètement recouvert, on recommence une nouvelle fouille à partir du sommet de l'arbre.
\item Lorsqu'un certain nombre de retours arrière est atteint, on réinitialise la matrice des noeuds visités. L'algorithme permet aussi de s'arrêter après un nombre limite de retours arrière lorsqu'aucune solution n'est trouvée.
\item Lorsqu'un certain nombre de retours arrière est atteint, on réinitialise la matrice des n{\oe}uds visités. L'algorithme permet aussi de s'arrêter après avoir atteint un seuil de retours arrière et qu'aucune solution n'a été trouvée.
\end{itemize}
Bien que l'horaire de recouvrement obtenu par cet algorithme ne conduit pas au cout minimum dans tous les cas, celui-ci s'en approche. Cette façon de procéder a cependant l'avantage d'être beaucoup plus rapide qu'une fouille complète. Cela permet de compenser ce biais par rapport à l'optimum, par un plus grand nombre de simulations effectuées.

View file

@ -2,9 +2,9 @@
\section{Conclusion}
\label{sec:conclusion}
En conclusion, une approche stoechastique a été proposée pour la production d'horaires de travail optimaux. Par rapport à d'autres travaux portant sur un problème semblable, cette étude inclut l'élaboration d'un modèle avec une résolution en deux étapes qui s'est avéré efficace pour la production d'une banque d'horaires avec des ratios de type d'employés différents. Cette banque d'horaires a par la suite été soumise à des simulations, impliquant la génération d'absences et la modification de la demande de travail par une approche probabiliste. Enfin, un algorithme a été utilisé, sur chacune des horaires simulés, afin d'évaluer le coût associé à leur recouvrement. En générant un grand nombre de simulations et en calculant la moyenne des coûts de recouvrement, il a été possible d'évaluer précisément la robustesse des différents horaires face à l'absentéisme et aux variations de la demande de travail. De plus, l'approche proposée permet une grande flexibilité quant au type d'horaires produits et pourrait être adaptée à d'autres impondérables auxquels font face les entreprises.
Dans ce rapport, on propose une approche stochastique pour la production d'horaires de travail optimaux. Par rapport à d'autres travaux qui portent sur un problème semblable, cette étude inclut l'élaboration d'un modèle avec une résolution en deux étapes. Celle-ci s'est avérée efficace pour la production d'une banque d'horaires qui inclut des ratios de type d'employés différents. On a effectué des simulations depuis cette banque d'horaires, impliquant la génération d'absences et la modification de la demande de travail par une approche probabiliste. Enfin, on utilise un algorithme, sur chacune des horaires simulés, afin d'évaluer le cout associé à leur recouvrement. Avec un grand nombre de simulations et en calculant la moyenne des couts de recouvrement, il a été possible d'évaluer précisément la robustesse des différents horaires face à l'absentéisme et aux variations de la demande de travail. De plus, l'approche proposée permet une grande flexibilité quant au type d'horaires produits et pourrait être adaptée à d'autres impondérables auxquels font face les entreprises.
Quelques améliorations pourraient être apportées à l'approche actuelles. Tout d'abord, le principe de production d'horaires initiales en deux étapes aurait pu être étendu pour permettre la production d'horaires ayant des nombres d'employés différents. En effet, il aurait été intéressant de définir d'autres classes d'employés à temps partiel basées sur leur nombre d'heures travaillées (2, 3 ou 4). Ainsi, en ajoutant une étape intermédiaire pour définir un certain nombre d'employés provenant de ces différentes classes, il aurait été possible de jouer sur le nombre d'employés actifs tout en diminuant les tailles des instances à traiter par le solveur. Une autre limitation de cette étude est qu'elle ne prend pas en considération les effets négatifs de changements excessifs aux horaires de travail des différents employés. Ces effets négatifs aurait pu être traduits en coût et ajoutés au calcul du coût de recouvrement. Enfin, les valeurs de certains paramètres de cette étude sont fictifs et auraient pu être basés sur des études de cas réels.
Quelques améliorations pourraient être apportées à l'approche actuelle. Tout d'abord, le principe de production d'horaires initiaux en deux étapes aurait pu être étendu pour permettre la production d'horaires ayant des nombres d'employés différents. En effet, il serait possible de définir d'autres classes d'employés à temps partiel basées sur leur nombre d'heures travaillées. Ainsi, en ajoutant une étape intermédiaire qui tire profit de ces différentes classes, on pourrait modifier le nombre d'employés actifs. Et ce, tout en diminuant les tailles des instances à traiter par le solveur. Une autre limitation de cette étude est qu'elle ne prend pas en considération les effets négatifs de changements excessifs aux horaires de travail des différents employés. Ces effets négatifs auraient pu être quantifiés et ajoutés au calcul du cout de recouvrement. Enfin, les valeurs de certains paramètres de cette étude sont fictives et auraient pu être basées sur des cas réels.
%%% Local Variables:

View file

@ -2,7 +2,7 @@
\section{Protocole d'expérimentation}
\label{sec:demarcheexp}
\subsection{Production des horaires initiales}
\subsection{Production des horaires initiaux}
\label{sec:demarchehorairesinit}
L'instance de base pour la comparaison des différents résultats correspond au problème de satisfiabilité des contraintes de l'horaire initial.
@ -14,25 +14,25 @@ L'instance de base pour la comparaison des différents résultats correspond au
\label{fig:ModelesProposes}
\end{figure}
La première approche explorée est de construire un seul modèle de programmation par contraintes pour l'ensemble du problème. Ce modèle incluait les contraintes sur les horaires ainsi que celles pour tous les types d'employés dans un seul modèle. De plus, le nombre d'employé était aussi une variable qui était modélisée en utilisant la possibilité d'inclure un horaire n'ayant aucune période de travail. Cette approche a permis de confirmer que notre problème était satisfiable, mais qu'il était difficile d'obtenir une variété de solutions, ce qui était nécessaire pour la création des scénarios.
La première approche explorée est de construire un seul modèle de programmation par contraintes pour l'ensemble du problème. Ce modèle incluait les contraintes sur les horaires ainsi que celles pour tous les types d'employés. De plus, le nombre d'employés était aussi une variable par la possibilité d'inclure un horaire n'ayant aucune période de travail. Cette approche a permis de confirmer que notre problème était satisfiable, mais qu'il était difficile d'obtenir une variété de solutions, ce qui était nécessaire pour la création des scénarios.
Une fonction d'optimisation a aussi été proposée, mais la formulation du problème faisait en sorte qu'il est toujours plus efficace de maximiser le nombre d'employés à temps plein. Il a donc été choisi d'instancier le nombre d'employés de chaque type manuellement, de tester la satisfiabilité de l'instance dans chaque cas et ensuite de borner le nombre d'employés de chaque type. Ce choix est devenu notre seconde approche.
On a aussi testé une fonction d'optimisation inspirée des travaux de \cite{chapados_retail_2014}, mais notre formulation du problème faisait en sorte qu'il est toujours plus efficace de maximiser le nombre d'employés à temps plein. La satisfiabilité de l'instance est vérifiée pour différents nombres d'employés dans chaque cas et ensuite, il a pu être borné. Ce choix est devenu notre seconde approche.
Comme les horaires des employés à temps plein et à temps partiel sont complémentaires, il est donc approprié de tenter de couvrir le maximum d'heures avec un nombre fixe d'employés à temps plein, puis de combler les périodes en excédent avec des employés à temps partiel. Le problème a donc été divisé en deux problèmes de satisfaction de contraintes résolus consécutivement.
Il semble donc approprié de tenter de couvrir le maximum d'heures avec un nombre fixe d'employés à temps plein, puis de combler les périodes en excédent avec des employés à temps partiel. S'en suit une division en deux problèmes de satisfaction de contraintes résolus consécutivement.
La contrainte $\mathcal{C}_2$ \eqref{eq:contrsumemployes} est donc relaxée pour la résolution de la premiere étape \eqref{eq:contrsumemployesft}. On enlève ensuite la possibilité d'avoir un horaire vide du tableau de la contrainte $\mathcal{C}_1$ \eqref{eq:contraintetableau}. La seconde étape demeure identique à l'approche précédente, à la seule différence que le tableau $\mathbf{X}_{FT}$ est maintenant instancié.
La contrainte $\mathcal{C}_2$ \eqref{eq:contrsumemployes} est donc relaxée pour la résolution de la première étape \eqref{eq:contrsumemployesft}. On enlève ensuite la possibilité d'avoir un horaire vide du tableau de la contrainte $\mathcal{C}_1$ \eqref{eq:contraintetableau}. La seconde étape demeure semblable à l'approche précédente, sauf que le tableau $\mathbf{X}_{FT}$ est instancié.
\begin{align}
\label{eq:contrsumemployesft}
\mathcal{C}_2^{\prime} &: \sum_{e=1}^{E_a} x_{e,p,j} \leq d_{p,j}
\end{align}
L'utilisation de différentes heuristiques de recherche a été explorée sommairement, mais la construction d'un vecteur contenant toutes les variables du problème étant une condition nécessaire pour l'appel d'heuristiques dans le solveur Choco, il s'est avéré difficile de mettre en oeuvre cette exploration. Il a donc été décidé de conserver l'heuristique de recherche par défaut de Choco. Cette approche nous a permis d'obtenir des solutions variées, permettant la suite du processus de création d'horaires optimales et robustes.
On a exploré l'utilisation de différentes euristiques de recherche sommairement. La construction d'un vecteur qui contient toutes les variables du problème est une condition nécessaire pour l'appel d'autres euristiques dans le solveur Choco. Il s'est donc avéré difficile de mettre en {\oe}uvre cette exploration étant donné la taille de l'instance. L'euristique par défaut est conservée. Cette approche nous a permis d'obtenir des solutions variées, permettant la suite du processus de création d'horaires optimaux et robustes.
\subsection{Scénarios et simulation}
\label{sec:scenariossimulations}
L'approche retenue pour générer les scénarios d'absence consiste à utiliser une chaîne de Markov. Cette approche permet d'inclure une relation de dépendance entre les différentes périodes. Pour la gestion de la demande, il aurait aussi été possible d'utilsier cette approche, mais afin de conserver la possibilité de générer des scénarios où le recouvrement est possible, le choix d'une distribution indépendante pour chaque période a permis de simplifier l'approche.
L'approche retenue pour générer les scénarios d'absence consiste à utiliser une chaine de Markov. Cette approche permet d'inclure une relation de dépendance entre les différentes périodes. Pour la gestion de la demande, il aurait aussi été possible d'utiliser cette approche, mais afin de conserver la capacité de générer des scénarios où le recouvrement est possible, le choix d'une distribution indépendante pour chaque période est plus simple.
%%% Local Variables:
%%% mode: latex

View file

@ -1,15 +1,15 @@
\section{Résultats et Discussion}
\section{Résultats et discussion}
\label{sec:RésultatsDiscussion}
\subsection{Comparaison des approches proposées}
Le problème de référence peut être résolu avec un seul retour arrière. La première approche proposée permet d'obtenir une première solution dans une temps assez court, mais ne parvient pas à offrir d'autres solution par la suite.
Le problème de référence peut être résolu avec un seul retour arrière. La première approche proposée permet d'obtenir une première solution dans un temps assez court, mais ne parvient pas à offrir d'autres solutions par la suite.
\begin{table}[!h]
\centering
\label{table:ststsreference}
\begin{tabular}{|l|lll|}
\hline
Instance & Temps & Noeuds & Retours arrières \\
Instance & Temps & N{\oe}uds & Retours arrière \\
\hline
Référence & 0,627 & 5377 & 1\\
$1^{re}$ approche & 4,039 & 26129 & 43200 \\
@ -25,7 +25,7 @@ La seconde approche permet de constater la structure du problème: la complexit
\label{table:stats-approche2}
\begin{tabular}{|l|lll|}
\hline
$E_{FT}$ & Temps & Noeuds & Retours arrières \\
$E_{FT}$ & Temps & N{\oe}uds & Retours arrière \\
\hline
2 & 13,377 & 122100 & 240832 \\
3 & 0,473 & 4683 & 7125 \\
@ -41,16 +41,18 @@ $E_{FT}$ & Temps & Noeuds & Retours arrières \\
\end{table}
\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 des différentes plages horaires, 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.
À l'aide du modèle de génération en deux phases, on obtient huit horaires qui présentent des ratios \texttt{temps plein / temps partiel} différents (voir annexe 1). Puisque les deux types d'employés ont des contraintes différentes quant au recouvrement des plages horaires, on a pu tester l'effet du taux d'absentéisme et de l'augmentation de la demande. L'effet de ces deux paramètres est présenté au tableau \ref{table:TableauEffetsParametres}. Ces couts de recouvrement sont présentés comme un ratio par rapport au cout de l'horaire optimal, soit un nombre d'employés à temps plein maximal.
\begin{table}[ht]
\centering
\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.}
\caption{Effet de l'absentéisme et de l'augmentation de la demande sur le cout moyen de recouvrement.}
\includegraphics[width=16cm]{Tables/TableaueffetsParametres.png}
\label{table:TableauEffetsParametres}
\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 10\% 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 à l'augmentation des heures travaillées (hausse de la demande), au temps supplémentaire 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 principale raison est une diminution du temps supplémentaire effectué par les employés à temps plein. La Figure \ref{fig:MappingRatioOptimal} montre les ratios de type d'employés à privilégier pour la construction des horaires en fonction des probabilités d'absence et d'augmentation de la demande de travail.
Comme le montre ce tableau, pour une probabilité d'absentéisme nulle, le cout des horaires augmente en fonction du nombre d'employés à temps partiel. Cela est dû au fait que ces employés ont un taux de base 10\% plus élevé que celui des employés à temps plein. De plus, pour tous les ratios de type d'employés, la probabilité d'absentéisme et la probabilité d'augmenter la demande de travail sont corrélées au cout de recouvrement des horaires. Cette augmentation de couts est due à l'augmentation des heures travaillées (hausse de la demande), aux heures supplémentaires des employés à temps plein ainsi que du taux de base supérieur des employés à temps partiel. Ces derniers 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 cout de recouvrement minimal varie selon les deux paramètres testés. Lorsque le nombre d'absences ou la demande de travail supplémentaire augmentent de façon importante, ratio \texttt{temps partiel/temps plein} supérieur permet d'obtenir un horaire au cout de recouvrement le plus faible. La principale raison est une diminution des heures supplémentaires effectuée par les employés à temps plein. La figure \ref{fig:MappingRatioOptimal} montre les ratios à privilégier pour la construction des horaires en fonction des probabilités d'absence et d'augmentation de la demande de travail.
\begin{figure}[ht]
\centering