diff --git a/tp/question2.tex b/tp/question2.tex index 159dfa4..3595c0c 100644 --- a/tp/question2.tex +++ b/tp/question2.tex @@ -16,14 +16,14 @@ Plusieurs constantes sont définies par l'énoncé du problème. On définit les \item $MIN_{P}$ = Nombre minimal de période dans le bloc de travail précédant et suivant la pause \item $e_j^{req}$ = Nombre d'employés requis à la période $j \in \lbrace 1,16 \rbrace$. \item $e_j^{souh}$ = Nombre d'employés souhaités à la période $j \in \lbrace 1,16 \rbrace$. -\item $N_P$ = Nombre de périodes dans l'horaire. Constante initialisée à 16. +\item $P$ = Nombre de périodes dans l'horaire. Constante initialisée à 16. \item $V_{PERTE}$ = Valeur de la perte lié à un écart d'un employé par rapport au nombre souhaité. Constante initialisée à 20. \end{itemize} On définit aussi ces constantes supplémentaires pour la création de contraintes, car Choco 4 ne permet pas d'effectuer d'opérations arithmétiques dans une contrainte. \begin{itemize} -\item $MAX_P = MAX_H-MIN_P-1$ = Nombre maximal de périodes dans le bloc de travail précédant et suivant la pause. +\item $MAX_P = MAX_H-MIP-1$ = Nombre maximal de périodes dans le bloc de travail précédant et suivant la pause. \item $MAX_{PR} = MAX_P-MIN_H-1$ = Nombre maximal de périodes dans le bloc de repos débutant ou terminant la journée. \item $MIN_{HT} = MIN_H-1$ = Nombre minimal de périodes travaillées par l'employé, excluant la pause \item $MAX_{HT} = MAX_H-1$ = Nombre maximal de périodes travaillées par l'employé, excluant la pause @@ -32,40 +32,51 @@ On définit aussi ces constantes supplémentaires pour la création de contraint \subsection{Variables} \label{sec:q2variables} -On définit une matrice de variables $E_{N \times N_P}$ où $e_{ij}$ correspondant à une valeur booléenne prenant la valeur $1$ si l'employé $i$ travaille à la période $j$ et $0$ sinon. +On définit une matrice de variables $E_{NP}$ où $e_{ij}$ correspondant à une valeur booléenne prenant la valeur $1$ si l'employé $i$ travaille à la période $j$ et $0$ sinon. \begin{align} - \label{eq:v1} - &e_{ij} & \forall 1 \leq i \leq N, 1 \leq j \leq N_P\\ - &dom(e_{ij}) = \lbrace 0,1 \rbrace & \forall 1 \leq i \leq N, 1 \leq j \leq N_P\nonumber + \label{eq:q2v1} + &e_{ij} &= 1_{\text{Employé }i\text{ travaille à la période j}} \forall 1 \leq i \leq N, 1 \leq j \leq P\\ + dom(e_{ij}) &= \lbrace 0,1 \rbrace \in \theta(1) & \forall 1 \leq i \leq N, 1 \leq j \leq P\nonumber \end{align} Afin de résoudre le problème d'optimisation, on doit définir des variables supplémentaires, car les composantes de la fonction d'optimisation sont aussi exprimées sous forme de contraintes. $e_{j}^{eff}$, le nombre d'employés effectif à la période $j$, et $e_{j}^{dist}$ la différence absolue entre le nombre d'employés effectif et souhaité à la période $j$. + \begin{align} - \label{eq:v2} - e_{j}^{eff} &= \sum_{i=1}^{N} e_{ij} & \forall 1 \leq j \leq N_P\\ - \label{eq:v3} - e_{j}^{dist} &= \lvert e_{j}^{eff} - e_j^{souh} \rvert & \forall 1 \leq j \leq N_P + \label{eq:q2v2} + e_{j}^{eff} &= \sum_{i=1}^{N} e_{ij} & \forall 1 \leq j \leq P\\ + dom(e_{j}^{eff}) &= \lbrace 0,N \rbrace \in \theta(N) & \forall 1 \leq j \leq P\nonumber\\ + \label{eq:q2v3} + e_{j}^{dist} &= \lvert e_{j}^{eff} - e_j^{souh} \rvert & \forall 1 \leq j \leq P\\ + dom(e_{j}^{dist}) &= \lbrace 0,N \rbrace \in \theta(N) & \forall 1 \leq j \leq P\nonumber \end{align} Enfin, nous créons une variable $N_{PERTE}$ représentant le total des unités de perte, équivalant -à la somme des différences absolues. Le nombre total d'unités de perte prend une valeur dans l'intervalle $[0,N \times N_P]$. +à la somme des différences absolues. Le nombre total d'unités de perte prend une valeur entre $0$ et $NP$. + \begin{align} - N_{PERTE} = \sum_{j=1}^{N_P} e_j^{dist} + \label{eq:q2v4} + &N_{PERTE} = \sum_{j=1}^{P} e_j^{dist}\\ + &dom(N_{PERTE}) = \lbrace 0, \ldots, NP \rbrace &\in \theta(NP)\nonumber \end{align} - -\subsubsection{Nombre total de variables} +\subsubsection{Nombre total de variables et de valeurs} \label{sec:q2nbtotvar} -Le nombre total de variables pour les définitions \eqref{eq:v1}, \eqref{eq:v2}, -\eqref{eq:v3} : +Le nombre total de variables pour les définitions \eqref{eq:q2v1}, \eqref{eq:q2v2}, +\eqref{eq:q2v3} et \eqref{eq:q2v4}: \begin{align} \label{eq:vartot} - N \times N_P + N_P + N_P &= (N+2) \times N_p \in \theta(N) + NP + P + P + 1 &= (N+2) \times N_p + 1 \in \theta(NP) +\end{align} + +Le nombre total de valeurs possibles pour ces mêmes définitions est: +\begin{align} + \label{eq:valtot} + NP \times 2 + NP + NP + NP &= 5NP \in \theta(NP) \end{align} \subsection{Contraintes} @@ -74,11 +85,18 @@ Le nombre total de variables pour les définitions \eqref{eq:v1}, \eqref{eq:v2}, \subsubsection{Nombre d'employés requis} \label{sec:nbemployesreq} -La contrainte du nombre d'employés requis s'énonce comme suit: pour chaque période $i$, le nombre d'employés travaillant doit être supérieur ou égal au nombre d'employés minimum requis. Il s'agit d'une contrainte de type \textsc{Sum}. +La contrainte du nombre d'employés requis s'énonce comme suit: pour chaque période $i$, le nombre d'employés travaillant doit être supérieur ou égal au nombre d'employés minimum requis. + +\begin{align} + \label{eq:q2c1eq} + &\sum_{i=1}^{N} e_{ij} \geq e_j^{req} & \forall 1 \leq j \leq P +\end{align} + +Il s'agit d'une contrainte de type \textsc{Sum}: \begin{align} \label{eq:q2c1} - &\sum_{i=1}^{N} e_{ij} \geq e_j^{req} & \forall 1 \leq j \leq N_P + &\textsc{Sum}(\lbrace e_{1j},\ldots,e_{Nj} \rbrace,\geq, e_j^{req}) & \forall 1 \leq j \leq P \end{align} \subsubsection{Motif de la journée de travail} @@ -91,19 +109,19 @@ Dans Choco 4, la contrainte \texttt{model.regular} prend en paramètre une séqu Voici comment nous avons construit l'expression: \begin{itemize} \item On débute par un bloc de repos d'au moins 0 et au plus $MAX_{PR}$ périodes. -\item On a ensuite un bloc de travail d'au moins $MIN_P$ et au plus $MAX_P$ périodes. +\item On a ensuite un bloc de travail d'au moins $MIP$ et au plus $MAX_P$ périodes. \item On a ensuite un bloc de repos d'une durée d'une période. -\item On a ensuite un bloc de travail d'au moins $MIN_P$ et au plus $MAX_P$ périodes. +\item On a ensuite un bloc de travail d'au moins $MIP$ et au plus $MAX_P$ périodes. \item On termine par un bloc de repos d'au moins 0 et au plus $MAX_{PR}$ périodes. \end{itemize} On obtient ainsi un automate fini défini par l'expression régulière suivante: \begin{align} - \label{eq:q2fa} + \label{eq:q2c2eq} {FA} = &0\lbrace 0,MAX_{PR} \rbrace\\ - &1 \lbrace MIN_P,MAX_P \rbrace\nonumber\\ + &1 \lbrace MIP,MAX_P \rbrace\nonumber\\ &0\nonumber\\ - &1 \lbrace MIN_P,MAX_P \rbrace\nonumber\\ + &1 \lbrace MIP,MAX_P \rbrace\nonumber\\ &0\lbrace 0,MAX_{PR} \rbrace\nonumber \end{align} @@ -113,14 +131,22 @@ L'ensemble des contraintes pour le motif d'horaire peut donc s'écrire &\textsc{Regular}(\lbrace e_{i1},\ldots,e_{ij} \rbrace, FA) &\forall 1 \leq i \leq N \end{align} -\subsubsection{Nombre minimum et maximum de périodes travaillées par employé} +\subsubsection{Nombre de périodes travaillées par employé} \label{sec:q2minmax} -On utilise une contrainte \textsc{Sum} pour appliquer le nombre de périodes minimum et maximum devant être travaillées, pour chaque employé. +On définit l'inégalité suivante pour définir la contrainte du nombre minimum et maximum de périodes travaillées par employé. + +\begin{align} + \label{eq:q2c3eq} + &MIN_{HT} \leq \sum_{j=1}^{P} e_{ij} \leq MAX_{HT} & \forall 1 \leq i \leq N +\end{align} + +On utilise deux contraintes \textsc{Sum} pour représenter dans Choco le nombre de périodes minimum et maximum devant être travaillées, pour chaque employé. \begin{align} \label{eq:q2c3} - &MIN_{HT} \leq \sum_{j=1}^{N_P} e_{ij} \leq MAX_{HT} & \forall 1 \leq i \leq N + &\textsc{Sum}(\lbrace e_{i1},\ldots,e_{iP} \rbrace,\geq,MIN_{HT}) & \forall 1 \leq i \leq N\\ + &\textsc{Sum}(\lbrace e_{i1},\ldots,e_{iP} \rbrace,\leq,MAX_{HT}) & \forall 1 \leq i \leq N\nonumber \end{align} \subsubsection{Nombre total de contraintes} @@ -129,7 +155,7 @@ On utilise une contrainte \textsc{Sum} pour appliquer le nombre de périodes min Le nombre total de contraintes pour les définitions \eqref{eq:q2c1}, \eqref{eq:q2c2} et \eqref{eq:q2c3} est: \begin{align} \label{eq:conttot} - N_P + N + N &= N_P + 2N \in \theta(N) + P + N + 2N &= P + 3N \in \theta(N) \end{align} \subsection{Optimisation} @@ -139,25 +165,41 @@ Dans Choco, les contraintes d'optimisation sont crées de la même façon que le Nous implémenterons le nombre de travailleurs effectifs $e_j^{eff}$ à la période $j$ en utilisant une contrainte \textsc{Sum}: \begin{align} - &\textsc{Sum}(e_{1j},\ldots,e_{Nj},e_j^{eff}) & \forall 1 \leq j \leq N_P + \label{q2opc1} + &\textsc{Sum}(\lbrace e_{1j},\ldots,e_{Nj} \rbrace,=,e_j^{eff}) & \forall 1 \leq j \leq P \end{align} Nous implémenterons ensuite la différence entre le nombre de travailleurs effectifs et souhaités $e_j^{dist}$ à la période $j$ en utilisant une contrainte \textsc{Distance}: \begin{align} - &\textsc{Distance}(e_j^{souh},e_j^{eff},e_j^{dist}) & \forall 1 \leq j \leq N_P + \label{q2opc2} + &\textsc{Distance}(e_j^{souh},e_j^{eff},=,e_j^{dist}) & \forall 1 \leq j \leq P \end{align} Enfin, la variable $N_{PERTE}$ est implémentée par une contrainte \textsc{Sum}: \begin{align} - \textsc{Sum}(e_1^{dist},\ldots,e_{N_P}^{dist},N_{PERTE}) + \label{q2opc3} + \textsc{Sum}(\lbrace e_1^{dist},\ldots,e_{P}^{dist} \rbrace,=,N_{PERTE}) \end{align} -\subsection{Paramètres} -\label{sec:q2parametres} +Nous n'incluons pas la valeur en dollars des unités de perte dans le modèle, car elle n'est pas pertinente dans l'élicitation des contraintes. Nous n'aurons qu'à multiplier le résultat obtenu par 20\$. + +Nous avons donc ici $P+P+1 \in \theta(P)$ contraintes d'optimisation. \subsection{Resultats} \label{sec:q2resultats} +Nous avons demandé au solveur Choco de minimiser la perte $N_{PERTE}$ à l'aide de la méthode \texttt{findOptimalSolution}. Nous avons utilisé les heuristiques par défaut car elles permettaient d'obtenir un résultat en moins d'une seconde. Le solveur trouve deux solutions optimales en effectuant 6397 retours arrières en 0,553s. La valeur optimale est de 4 unités de perte, pour une valeur de 80\$. + +La solution optimale retournée est la suivante. + +\begin{verbatim} +Employé 0: 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 +Employé 1: 0 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 +Employé 2: 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 +Employé 3: 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 +Employé 4: 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 +\end{verbatim} + %%% Local Variables: %%% mode: latex