Correction apportées au rapport.
This commit is contained in:
parent
0ae3c9be77
commit
791e88acfe
9 changed files with 53 additions and 54 deletions
|
@ -3,64 +3,64 @@
|
|||
\label{sec:AnnexeHoraires}
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule1.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.11.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule1.png}
|
||||
\label{fig:InitialSchedule1}
|
||||
\end{table}
|
||||
|
||||
\clearpage
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule2.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.17.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule2.png}
|
||||
\label{fig:InitialSchedule2}
|
||||
\end{table}
|
||||
|
||||
\clearpage
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule3.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.22.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule3.png}
|
||||
\label{fig:InitialSchedule3}
|
||||
\end{table}
|
||||
|
||||
\clearpage
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule4.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.28.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule4.png}
|
||||
\label{fig:InitialSchedule4}
|
||||
\end{table}
|
||||
|
||||
\clearpage
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule5.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.33.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule5.png}
|
||||
\label{fig:InitialSchedule5}
|
||||
\end{table}
|
||||
|
||||
\clearpage
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule6.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.39.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule6.png}
|
||||
\label{fig:InitialSchedule6}
|
||||
\end{table}
|
||||
|
||||
\clearpage
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule7.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.44.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule7.png}
|
||||
\label{fig:InitialSchedule7}
|
||||
\end{table}
|
||||
|
||||
\clearpage
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule8.png}
|
||||
\caption{Horaire initiale ayant un ratio employés temps plein / employés temps partiel de 0.50.}
|
||||
\includegraphics[width=25cm]{Tables/InitialSchedule8.png}
|
||||
\label{fig:InitialSchedule8}
|
||||
\end{table}
|
||||
|
||||
|
|
|
@ -2,27 +2,26 @@
|
|||
\label{sec:AnnexePseudo}
|
||||
\begin{algorithm}
|
||||
\DontPrintSemicolon
|
||||
\KwData{nbEmployees, maxBacktrack, nbRecoveryActions, alreadyPerformedMatrix=False, currentRecoveredSchedule, solutionFound=0}
|
||||
\KwData{nbEmployees, maxBacktrack, nbRecoveryActions, alreadyPerformedMatrix $\leftarrow$ False, currentRecoveredSchedule, solutionFound $\leftarrow$ 0}
|
||||
\KwResult{currentRecoveredSchedule}
|
||||
\While{$\neg$solutionFound $\wedge$ nbBacktrack $<$ maxBacktrack}{
|
||||
\If{nbAvailRecoveryActions $>$ 0}{
|
||||
Choose minimum cost recoveryAction\;
|
||||
\For{Employee and Work period}{
|
||||
Perform recoveryAction on currentRecoveredSchedule\;
|
||||
Mark recoveryAction as performed in alreadyPerformed matrix\;
|
||||
nbRecoveryActions-1\;
|
||||
}
|
||||
recoveryAction $\leftarrow$ Choose minimum cost recoveryAction\;
|
||||
Perform recoveryAction on currentRecoveredSchedule\;
|
||||
Mark recoveryAction as performed in alreadyPerformed matrix\;
|
||||
nbRecoveryActions - -\;
|
||||
}
|
||||
\Else{
|
||||
Update currentRecoveredSchedule\;
|
||||
nbBacktrack+1\;
|
||||
Erase changes made on currentRecoveredSchedule\;
|
||||
nbBacktrack++\;
|
||||
}
|
||||
\If{nbAvailRecoveryActions = 0}{
|
||||
solutionFound $\leftarrow$ True\;
|
||||
}
|
||||
\If{nbAvailRecoveryActions=0}{
|
||||
solutionFound=True\;
|
||||
\If{nbBacktrack mod nbEmployees = 0}{
|
||||
\ElseIf{nbBacktrack mod nbEmployees = 0}{
|
||||
Erase changes made on currentRecoveredSchedule\;
|
||||
initialize alreadyPerformedMatrix\;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
\caption{Algorithme de recouvrement}
|
||||
\end{algorithm}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
\section{Approche proposée}
|
||||
\label{sec:approcheproposee}
|
||||
|
||||
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.
|
||||
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 d'horaires de travail \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]
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\label{fig:etapes}
|
||||
\includegraphics[]{etapes}
|
||||
\caption{Étapes de la production d'horaires optimaux et robustes}
|
||||
\label{fig:etapes}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Paramètres}
|
||||
|
@ -23,7 +23,7 @@ L'horaire a une durée de $J$ jours de $P$ périodes d’ $\frac{24}{P}$ heures
|
|||
|
||||
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 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}:
|
||||
Le nombre d'employés total est variable selon la demande de travail. En tentant de résoudre le problème de satisfiabilité avec un nombre différent de chaque type d'employés, on peut estimer des bornes inférieure et supérieure à ce nombre. On peut calculer le maximum d'employés par type par les ratios suivants \eqref{eq:eftept}:
|
||||
|
||||
\begin{align}
|
||||
\label{eq:eftept}
|
||||
|
@ -55,7 +55,7 @@ On définit l'horaire de l'employé $e$ de type $a$ par la matrice $X_{e,a}$\eqr
|
|||
\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é 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}.
|
||||
Afin de réduire la taille du problème, les listes des horaires quotidiens valides pour les deux types d'employés sont générées. 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}$. 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}.
|
||||
|
||||
|
@ -104,7 +104,7 @@ Enfin, en effectuant le produit tensoriel de la matrice des horaires sur deux se
|
|||
\subsection{Contraintes}
|
||||
\label{sec:contraintes}
|
||||
|
||||
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}.
|
||||
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'établir, 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 être valide (section \ref{sec:hora
|
|||
\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 augmenter par une quantité de demande excédentaire, représentée par une variable aléatoire $D_{p,j}^{(exc)}$ où \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.
|
||||
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)}$, où \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}
|
||||
|
@ -166,18 +166,18 @@ On pourra répéter cette procédure plusieurs fois pour obtenir différents sc
|
|||
\subsection{Recouvrement des horaires}
|
||||
\label{sec:Recouvrement}
|
||||
|
||||
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.
|
||||
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 coûts de recouvrement moyens pour chacune des horaires initiaux et ainsi, trouver laquelle correspond au coût de recouvrement le plus faible.
|
||||
|
||||
É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:
|
||||
É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 coût 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 jusqu'à ce qu'une solution soit trouvée. Le pseudocode associé à cet algorithme est présenté à l'annexe 2. L'algorithme de recouvrement a les caractéristiques suivantes:
|
||||
|
||||
\begin{itemize}
|
||||
\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 Les plongées successives sont guidées par une euristique qui choisit l'action de recouvrement ayant le coût minimum à chacun des n{\oe}uds. Si plusieurs actions correspondent à ce coût 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 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.
|
||||
\item Lorsqu'un certain nombre de retours arrière est atteint, on réinitialise la matrice des n{\oe}uds visités et on recommence le processus. L'algorithme permet aussi de s'arrêter après avoir atteint un certain seuil de retours arrière.
|
||||
\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.
|
||||
Bien que l'horaire de recouvrement obtenu par cet algorithme ne conduit pas au coût 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. Cette plus grande rapidité permet de compenser ce biais par rapport à l'optimum, par un plus grand nombre de simulations effectuées.
|
||||
|
||||
%%% Local Variables:
|
||||
%%% mode: latex
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
\section{Conclusion}
|
||||
\label{sec:conclusion}
|
||||
|
||||
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.
|
||||
Dans ce rapport, une approche stochastique pour la production d'horaires de travail optimaux est proposé. 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. Depuis cette banque d'horaires, des simulations impliquant la génération d'absences et la modification de la demande de travail par une approche probabiliste ont été effectuées. Enfin, un algorithme ets utilisé, sur chacune des horaires simulés, afin d'évaluer le coût associé à leur recouvrement. Avec 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 problèmes, impliquant des impondérables, auxquels font face les entreprises.
|
||||
|
||||
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.
|
||||
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 pour fixer un certain nombre d'employés appartenant à ces différentes classes, il serait possible de modifier le nombre d'employés actifs. Par le fait même, les tailles des instances à traiter par le solveur diminueraient de façon considérable. Une autre limitation de cette étude est qu'elle ne prend pas en considération les effets négatifs de changements excessifs apportés aux horaires de travail des différents employés. Ces effets négatifs auraient pu être quantifiés et ajoutés au calcul du coût 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:
|
||||
|
|
|
@ -10,27 +10,27 @@ Nous présentons un problème de planification d'horaires de travail optimaux et
|
|||
\subsubsection{Horaire initial}
|
||||
\label{sec:descriptioninitial}
|
||||
|
||||
On considère la planification d'un horaire de travail initial sur un cycle de 14 jours. Chaque journée est composée de six périodes de travail, d'une durée de quatre heures chacune. Il y a deux types d'employés: à temps plein ($FT$) qui travaillent 80 heures régulières par cycle et à temps partiel ($PT$) qui travaillent entre 32 et 80 heures par cycle. Un niveau de demande de base sur deux périodes est établi à deux pour la matinée, quatre pour le milieu de la journée et trois pour la soirée, et ce pour la durée du cycle.
|
||||
On considère la planification d'un horaire de travail initial sur un cycle de 14 jours. Chaque journée est composée de six périodes de travail, d'une durée de quatre heures chacune. Il y a deux types d'employés: à temps plein ($FT$) qui travaillent 80 heures régulières par cycle et à temps partiel ($PT$) qui travaillent entre 32 et 80 heures par cycle. La demande de travail quotidienne, soit le nombre d'employés requis par période de travail, est définie par le vecteur 2-2-4-4-3-3. Ainsi, le nombre d'employés requis est de deux pour la matinée, quatre pour le milieu de la journée et trois pour la soirée et ce, pour toute la durée du cycle.
|
||||
|
||||
Tous les employés, lorsqu'ils effectuent une journée de travail, sont présents durant deux périodes consécutives, pour une durée totale de huit heures. Les employés à temps plein débutent soit à la première, la troisième ou la cinquième période. Une période de repos minimale de 12 heures est requise entre deux séquences de travail. De plus, les employés travaillent une fin de semaine sur deux, mais jamais plus de 5 journées consécutives. Ceux à temps partiel travaillent le même nombre de jours du lundi au vendredi.
|
||||
Tous les employés, lorsqu'ils effectuent une journée de travail, sont présents durant deux périodes consécutives, pour une durée totale de huit heures. Les employés à temps plein débutent soit à la première, la troisième ou la cinquième période. Une période de repos minimale de 12 heures est requise entre deux séquences de travail. De plus, les employés à temps plein travaillent une fin de semaine sur deux et jamais plus de 5 journées consécutives. Ceux à temps partiel travaillent le même nombre de jours du lundi au vendredi.
|
||||
|
||||
Les employés ont un salaire de base de 10\$/h. On ajoute 1\$/h pour ceux à temps partiel afin de compenser une plus faible productivité. Les employés à temps plein ont un salaire de 15\$/h pour les heures supplémentaires. De plus, tous engagent des frais fixes de 50\$ par cycle.
|
||||
Les employés ont un salaire de base de 10\$/h. On ajoute 1\$/h pour ceux à temps partiel afin de compenser une plus faible productivité. Les employés à temps plein ont un salaire de 15\$/h pour les heures supplémentaires. De plus, le calcul du coût pour un cycle donné inclut des frais fixes de gestion de 50\$ par employé peu importe son type.
|
||||
|
||||
\subsubsection{Incertitude}
|
||||
\label{sec:descriptionincertitude}
|
||||
|
||||
On considère deux sources d'incertitude: les absences des employés et l'accroissement de la demande. Cette approche s'inspire des travaux de \cite{parisio_two-stage_2015}. La fréquence d'absence, à chaque période, variant entre $0$ et $0.1$. De plus, leur probabilité de retour à la période suivante, advenant une absence, est comprise dans l'ensemble . La probabilité associée à l'augmentation de la demande en employés est comprise dans l'ensemble $\lbrace 0, 0.25, 0.5, 0.75, 1 \rbrace$ pour un employé. On la multiplie par 0,2 pour deux employés et 0,04 pour trois employés supplémentaires. 10 scénarios d'augmentation sont générés et 100 d'absences le sont ensuite pour chacun, pour un total de 1000 simulations.
|
||||
On considère deux sources d'incertitude: les absences des employés et l'accroissement de la demande. Cette approche s'inspire des travaux de \cite{parisio_two-stage_2015}. La fréquence d'absence, à chaque période, variant entre $0$ et $0.1$. De plus, si une absence se produit durant la première période de travail d'un quart, la probabilité de retour à la période suivante est de 0.5. La probabilité associée à l'augmentation de la demande en employés est comprise dans l'ensemble $\lbrace 0, 0.25, 0.5, 0.75, 1 \rbrace$ pour une hausse d'un employé. On multiplie cette dernière probabilité par 0,2 pour obtenir la probabilité d'une hausse de deux employés et par 0,04 pour obtenir celle associée à trois employés supplémentaires. 10 scénarios d'augmentation de la demande de travail sont d'abord générés basés sur ces dernières probabilité. Pour chacun de ces scénarios, 100 horaires modifiés avec la génération d'absences sont ensuite obtenus, pour un total de 1000 simulations par horaire initial.
|
||||
|
||||
\subsubsection{Recouvrement}
|
||||
\label{sec:descriptionrecouvrement}
|
||||
|
||||
Une fois les scénarios d'incertitude générés pour chaque horaire initial, on appliquera les règles de recouvrement suivantes, en considérant des périodes de quatre heures:
|
||||
Une fois les scénarios d'incertitude générés pour chaque horaire initial, on appliquera les règles de recouvrement suivantes, en considérant des périodes de travail de quatre heures:
|
||||
|
||||
\begin{itemize}
|
||||
\item Un maximum de trois périodes par quart de travail.
|
||||
\item Un minimum de trois périodes de repos entre les quarts de travail.
|
||||
\item Pour chaque horaire, un maximum de 20 périodes de travail après recouvrement des employés à temps partiel et de 30, pour ceux à temps plein.
|
||||
\item Les employés à temps plein ont droit aux heures supplémentaires pour chaque recouvrement effectué. De plus, ces derniers sont payés au salaire horaire de base en cas d'absence. Par contre, les employés à temps partiel n'ont pas ces deux avantages.
|
||||
\item Les employés à temps plein ont droit aux heures supplémentaires pour chaque recouvrement effectué. De plus, ces derniers sont payés au salaire horaire de base en cas d'absence. Par contre, les employés à temps partiel n'ont pas droit à ces deux avantages.
|
||||
\end{itemize}
|
||||
|
||||
%%% Local Variables:
|
||||
|
|
|
@ -14,9 +14,9 @@ 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. 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.
|
||||
Les deux approches explorées pour la production des horaires initiaux sont présentés à la Figure \ref{fig:ModelesProposes}. La première approche explorée 1) a été de construire un seul modèle de programmation par contraintes pour l'ensemble du problème. Ce modèle rendait possible l'obtention de différents nombres d'employés par la possibilité d'inclure un horaire sans période de travail. Ce modèle incluait aussi les contraintes sur les horaires pour tous les deux types d'employés. Cette approche a permis de confirmer que notre problème était satisfiable avec les paramètres de l'instance choisis. Cependant, il était difficile d'obtenir une grande variété de solutions de façon efficace, ce qui était nécessaire pour choisir des horaires optimaux basés sur leur robustesse face à l'absentéisme et à l'augmentation de la demande.
|
||||
|
||||
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.
|
||||
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 2).
|
||||
|
||||
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.
|
||||
|
||||
|
@ -27,7 +27,7 @@ La contrainte $\mathcal{C}_2$ \eqref{eq:contrsumemployes} est donc relaxée pour
|
|||
\mathcal{C}_2^{\prime} &: \sum_{e=1}^{E_a} x_{e,p,j} \leq d_{p,j}
|
||||
\end{align}
|
||||
|
||||
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.
|
||||
L'utilisation de différentes heuristiques de recherche a été exploré sommairement. La construction d'un vecteur qui contient toutes les variables du problème est une condition nécessaire pour l'appel d'autres heuristiques 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'heuristique 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}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
\section{Introduction}
|
||||
\label{sec:Introduction}
|
||||
|
||||
La planification d'horaires de travail est un enjeu important pour plusieurs entreprises et organisations publiques. Si elle est inadéquate, elle peut entrainer 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, on dénombre les restrictions complexes de la loi sur les normes du travail, une variabilité saisonnière des besoins en main-d'oeuvre et une incertitude liée au taux d'absentéisme. Les horaires produits doivent permettre le rajustement selon les deux facteurs précédents, tout en minimisant le cout des salaires.
|
||||
La planification d'horaires de travail est un enjeu important pour plusieurs entreprises et organisations publiques. Si elle est inadéquate, elle peut entrainer 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, on dénombre les restrictions complexes de la loi sur les normes du travail, une variabilité saisonnière des besoins en main-d'oeuvre et une incertitude liée au taux d'absentéisme. Les horaires produits doivent permettre le rajustement selon les deux facteurs précédents, tout en minimisant le coût des salaires.
|
||||
|
||||
Le présent rapport propose une approche stochastique pour la production d'horaires robustes en fonction du taux d'absentéisme et de la variabilité de la demande de travail. Une banque d'horaires valides est d'abord générée avec le solveur Choco de manière efficace et en prenant soin d'obtenir des différences importantes quant aux types d'employés (temps plein ou partiel). Par la suite, ces horaires variés sont soumis à une fonction qui génère des absences et des augmentations ponctuelles de la demande de travail. On utilise ensuite un algorithme de recouvrement pour combler les différentes périodes en déficit de main-d'{\oe}uvre. Les couts de recouvrement moyens de ces différents horaires modifiés serviront à évaluer la robustesse des horaires face aux probabilités d'absentéisme et d'augmentation de la demande. Enfin, des résultats montreront que cette méthode permet d'évaluer le ratio \texttt{temps plein / temps partiel} optimal en fonction de ces facteurs.
|
||||
Le présent rapport propose une approche stochastique pour la production d'horaires robustes en fonction du taux d'absentéisme et de la variabilité de la demande de travail. Une banque d'horaires valides est d'abord générée avec le solveur Choco de manière efficace et en prenant soin d'obtenir des différences importantes quant aux types d'employés (temps plein ou partiel). Par la suite, ces horaires variés sont soumis à une fonction qui génère des absences et des augmentations ponctuelles de la demande de travail. On utilise ensuite un algorithme de recouvrement pour combler les différentes périodes en déficit de main-d'{\oe}uvre. Les coûts de recouvrement moyens de ces différents horaires modifiés serviront à évaluer la robustesse des horaires face aux probabilités d'absentéisme et d'augmentation de la demande. Enfin, des résultats montreront que cette méthode permet d'évaluer le ratio d'employés \texttt{temps plein / temps partiel} optimal en fonction de ces facteurs.
|
||||
|
||||
%%% Local Variables:
|
||||
%%% mode: latex
|
||||
|
|
Binary file not shown.
|
@ -6,6 +6,7 @@
|
|||
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
|
||||
\caption{Statistiques, référence et première approche}
|
||||
\label{table:ststsreference}
|
||||
\begin{tabular}{|l|lll|}
|
||||
\hline
|
||||
|
@ -15,13 +16,13 @@ Référence & 0,627 & 5377 & 1\\
|
|||
$1^{re}$ approche & 4,039 & 26129 & 43200 \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\caption{Statistiques, référence et première approche}
|
||||
\end{table}
|
||||
|
||||
La seconde approche permet de constater la structure du problème: la complexité de celui-ci tient au niveau des horaires des employés à temps partiel. Lorsque le nombre d'employés à temps plein augmente, la taille de l'instance diminue considérablement.
|
||||
La seconde approche permet de constater la structure du problème: la complexité de celui-ci est davantage influencée par la résolution des horaires des employés à temps partiel. Lorsque le nombre d'employés à temps plein augmente, la taille de l'instance diminue considérablement.
|
||||
|
||||
\begin{table}[!h]
|
||||
\centering
|
||||
\caption{Statistiques, seconde approche}
|
||||
\label{table:stats-approche2}
|
||||
\begin{tabular}{|l|lll|}
|
||||
\hline
|
||||
|
@ -37,22 +38,21 @@ $E_{FT}$ & Temps & N{\oe}uds & Retours arrière \\
|
|||
9 & 0,021 & 825 & 890 \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\caption{Statistiques, seconde approche}
|
||||
\end{table}
|
||||
|
||||
\subsection{Résultats de l'étude de cas}
|
||||
À 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.
|
||||
À l'aide du modèle de génération en deux phases (approche 2), il est possible d'obtenir huit horaires qui présentent des ratios \texttt{temps plein / temps partiel} différents (voir annexe 1), mais un nombre d'employés total constant. Puisque les deux types d'employés ont des contraintes différentes quant au recouvrement des plages horaires, les effets du taux d'absentéisme et de l'augmentation de la demande ont pu être testés. Les effets de ces deux paramètres 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 optimal, soit celui associé à un horaire avec un nombre d'employés à temps plein maximal.
|
||||
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\caption{Effet de l'absentéisme et de l'augmentation de la demande sur le cout moyen de recouvrement.}
|
||||
\caption{Effet de l'absentéisme et de l'augmentation de la demande sur le coût 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, 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.
|
||||
Comme le montre ce tableau, pour une probabilité d'absentéisme nulle, le coût 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 coût de recouvrement des horaires. Cette augmentation des coûts 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.
|
||||
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. Lorsque le nombre d'absences ou la demande de travail supplémentaire augmentent de façon importante, un ratio \texttt{temps partiel/temps plein} supérieur permet d'obtenir un horaire au coût de recouvrement le plus faible. La principale raison est une diminution des heures supplémentaires effectuées 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
|
||||
|
|
Loading…
Reference in a new issue