diff --git a/tp/makefile b/tp/makefile index 17ee7e1..06cc7c3 100644 --- a/tp/makefile +++ b/tp/makefile @@ -9,7 +9,7 @@ rapport.bbl: rapport.tex bibtex rapport.aux run: rapport.pdf - evince rapport.pdf + evince rapport.pdf & clean: rm *.aux @@ -18,4 +18,4 @@ clean: rm *.lof rm *.log rm *.out - rm *.toc \ No newline at end of file + rm *.toc diff --git a/tp/question1.tex b/tp/question1.tex index bdd801f..10d6b14 100644 --- a/tp/question1.tex +++ b/tp/question1.tex @@ -1,108 +1,115 @@ -\section{Problème 1} - -Modélisation et résolution du problème des quatre cubes avec le solveur Choco \cite{chocoSolver}. - -\subsection{Constantes} -\label{sec:q1constantes} - -Deux constantes sont définies dans l'énoncé du problème. Il s'agit du nombre de cubes (N) ainsi que du nombre de faces (F) sur le prisme rectangualaire. Ces deux constantes sont fixées à 4. - -\subsection{Variables} -\label{sec:q1variables} - -On définit une matrice de variables $facesCubes_{NF}$ où $facesCubes_{ij}$ correspondant aux couleurs que prennent chacun des 4 cubes sur les 4 faces du prisme rectangulaire. Les valeurs 1 à 4 servent respectivement à identifier le rouge, le vert, le bleu et le jaune. - -\begin{align} - \label{eq:q1v1} - &facesCubes_{ij} &= 1_{\text{Cube }i\text{ - face rectangulaire j = rouge}} \forall 1 \leq i \leq N, 1 \leq j \leq F\\ - dom(facesCubes_{ij}) &= \lbrace 1,2,3,4 \rbrace \in \theta(1) & \forall 1 \leq i \leq N, 1 \leq j \leq F\nonumber -\end{align} - -\subsubsection{Nombre total de variables et de valeurs} -\label{sec:q1nbtotvar} - -Le nombre total de variables pour la définition \eqref{eq:q1v1}: - -\begin{align} - \label{eq:vartot} - NF \in \theta(NF) -\end{align} - -Le nombre total de valeurs possibles pour ces mêmes définitions est: -\begin{align} - \label{eq:valtot} - NF \times 4 &= 4NF \in \theta(NF) -\end{align} - -\subsection{Contraintes} -\label{sec:q1contraintes} - -\subsubsection{Tableaux des couleurs} -\label{sec:tableauCouleurs} - -La contrainte du tableau des couleurs s'énonce comme suit: pour chaque cube $i$, un tableau doit être construit dans lequel seront énumérées toutes les séquences possibles des couleurs apparaissant sur les 4 faces du prisme. Pour chacun des 4 cubes, il y a 24 combinaisons (6 faces pointant dans une direction x 4 orientations par face) possibles. Si certaines combinaisons se répètent, ces doublons seront pris en charge par le solveur. - -\bigskip - -Il s'agit d'une contrainte de type \textsc{tableau} qui s'écrit de la façon suivante : - -\begin{align} -\label{eq:q1c1} -&Tableau(facesCubes_{11} , ... , facesCubes_{1F} , T) -\end{align} -\begin{center} -... \\ -$Tableau(facesCubes_{N1} , ... , facesCubes_{NF} , T)$ -\end{center} - -\subsubsection{Couleurs différentes sur les 4 faces} -\label{sec:couleur4faces} - -Le problème des 4 cubes consiste à trouver un agencement de ces cubes permettant d'obtenir chacune des 4 couleurs sur les 4 faces rectangulaires du prisme créé. - -\bigskip - -Il s'agit d'une contrainte de type \textsc{AllDifferent} qui s'écrit de la façon suivante: - -\begin{align} -\label{eq:q1c2} -&facesCubes_{11} \neq ... \neq facesCubes_{1F} -\end{align} -\begin{center} -... \\ -$facesCubes_{N1} \neq ... \neq facesCubes_{NF}$ -\end{center} - -\subsubsection{Nombre total de contraintes} -\label{sec:q1totcontr} - -Le nombre total de contraintes pour les définitions \eqref{eq:q1c1} et \eqref{eq:q1c2} est: -\begin{align} -\label{eq:conttot} -N \text{contraintes «tableau»} + \frac{4*N(N-1)}{2} \text{contraintes de différence} &= 2N^{2}-N \in \theta(N^{2}) -\end{align} -\begin{center} -De plus, chaque tableau contient au plus 24 $\in$ O(24) entrées. -\end{center} - -\subsection{Resultats} -\label{sec:q1resultats} - -Nous avons demandé au solveur Choco de trouver une solution au problème des 4 cubes à l'aide de la méthode \texttt{findSolution}. Nous avons utilisé les heuristiques par défaut car elles permettaient d'obtenir un résultat en moins d'une seconde. Le solveur trouve une seule solution en effectuant 0 retour arrière et ce, en 0,038s. - -\bigskip -La solution retournée par le solveur est la suivante : - -\begin{verbatim} - Cube 0 Cube 1 Cube 2 Cube 3 -Face 0 R B V J -Face 1 V J B R -Face 2 V R J B -Face 3 J B R V -\end{verbatim} - - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "rapport" +\section{Problème 1} + +Modélisation et résolution du problème des quatre cubes avec le solveur Choco 4 \cite{chocoSolver}. + +\subsection{Constantes} +\label{sec:q1constantes} + +Deux constantes sont définies dans l'énoncé du problème. Il s'agit du nombre de cubes $N$ ainsi que du nombre de faces $F$ sur le prisme rectangulaire. Ces deux constantes sont fixées à 4. + +Afin de faciliter la création des contraintes dans le solveur Choco, on définit une application: l'ensemble de nombres $\lbrace 1,2,3,4 \rbrace$ sert à représenter l'ensemble de quatre couleurs $\lbrace rouge, vert, bleu, jaune \rbrace$, dans cet ordre \eqref{eq:q1mapping}. + +\begin{align} + \label{eq:q1mapping} + \left \{ + \begin{array}{lll} + 1 & \mapsto &\text{Rouge} \\ + 2 & \mapsto &\text{Vert} \\ + 3 & \mapsto &\text{Bleu} \\ + 4 & \mapsto &\text{Jaune} + \end{array} + \right \} +\end{align} + +\subsection{Variables} +\label{sec:q1variables} + +On définit une matrice $FC$ de taille $N \times F$ où chaque variable $fc_{ij}$ correspond à la couleur que présente le cube $i$ sur la face $j$ du prisme rectangulaire. + +\begin{align} + \label{eq:q1v1} + fc_{ij} &\in \lbrace 1,2,3,4 \rbrace & \forall 1 \leq i \leq N, 1 \leq j \leq F\\ + dom(fc_{ij}) &= \lbrace 1,2,3,4 \rbrace \in \theta(1) & \forall 1 \leq i \leq N, 1 \leq j \leq F\nonumber +\end{align} + +\subsubsection{Nombre total de variables et de valeurs} +\label{sec:q1nbtotvar} + +Le nombre total de variables pour la définition \eqref{eq:q1v1}: + +\begin{align} + \label{eq:q1vartot} + NF \in \theta(NF) +\end{align} + +Le nombre total de valeurs possibles pour ces mêmes définitions est: +\begin{align} + \label{eq:q1valtot} + NF \times 4 &= 4NF \in \theta(NF) +\end{align} + +\subsection{Contraintes} +\label{sec:q1contraintes} + +\subsubsection{Tableaux des couleurs} +\label{sec:tableauCouleurs} + +La contrainte du tableau des couleurs s'énonce comme suit: pour chaque cube $i$, un tableau doit être construit dans lequel seront énumérées toutes les séquences possibles des couleurs apparaissant sur les 4 faces du prisme. Pour chacun des 4 cubes, il y a 24 combinaisons (6 faces pointant dans une direction $\times$ 4 orientations par face) possibles. Si certaines combinaisons se répètent, ces doublons seront pris en charge par le solveur. + +Il s'agit d'une contrainte de type \textsc{Tableau} qui s'écrit de la façon suivante : + +\begin{align} + \label{eq:q1c1} + &\textsc{Tableau}(\lbrace fc_{i1},\dots,fc_{iF} \rbrace, T) & \forall 1 \leq i \leq N +\end{align} + +\subsubsection{Couleurs différentes sur les 4 faces} +\label{sec:couleur4faces} + +Le problème des 4 cubes consiste à trouver un agencement de ces cubes permettant d'obtenir chacune des 4 couleurs sur les 4 faces rectangulaires du prisme créé. Ce qui équivaut à ne pas avoir une paire de couleurs identiques sur une face latérale du prisme \eqref{eq:q1c2eq}. + +\begin{align} + \label{eq:q1c2eq} + &fc_{ij_1} \neq fc_{ij_2} & \forall 1 \leq i \leq N, 1 \leq j_1 < j_2 \leq F\\ +\end{align} + +Il s'agit d'une contrainte de type \textsc{AllDifferent} \eqref{eq:q1c2} pour chaque face latérale du prisme. + +\begin{align} +\label{eq:q1c2} + \textsc{AllDifferent}(\lbrace fc_{i1},\ldots, fc_{iF} \rbrace ) & \forall 1 \leq i \leq N +\end{align} + +\subsubsection{Nombre total de contraintes} +\label{sec:q1totcontr} + +Le nombre total de contraintes pour les définitions \eqref{eq:q1c1} et \eqref{eq:q1c2} est: +\begin{align} +\label{eq:conttot} +N \text{contraintes «tableau»} + \frac{4*N(N-1)}{2} \text{contraintes de différence} &= 2N^{2}-N \in \theta(N^{2}) +\end{align} +\begin{center} +De plus, chaque tableau contient au plus 24 $\in O(24)$ entrées. +\end{center} + +\subsection{Résultats} +\label{sec:q1resultats} + +Nous avons demandé au solveur Choco de trouver une solution au problème des 4 cubes à l'aide de la méthode \texttt{findSolution}. Nous avons utilisé les euristiques par défaut, car elles permettaient d'obtenir un résultat en moins d'une seconde. Le solveur trouve une seule solution en n'effectuant aucun retour arrière, et ce en 0,038s. + +\subsubsection{Solution} +La solution retournée par le solveur est la suivante : + +\begin{verbatim} + Cube 0 Cube 1 Cube 2 Cube 3 +Face 0 R B V J +Face 1 V J B R +Face 2 V R J B +Face 3 J B R V +\end{verbatim} + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "rapport" %%% End: \ No newline at end of file diff --git a/tp/question2.tex b/tp/question2.tex index 3595c0c..14c3dbb 100644 --- a/tp/question2.tex +++ b/tp/question2.tex @@ -13,17 +13,17 @@ Plusieurs constantes sont définies par l'énoncé du problème. On définit les \item $N$ = Nombre d'employés disponibles \item $MIN_H$ = Nombre minimal de périodes travaillées par l'employé, incluant la pause \item $MAX_H$ = Nombre maximal de périodes travaillées par l'employé, incluant la pause -\item $MIN_{P}$ = Nombre minimal de période dans le bloc de travail précédant et suivant la pause +\item $MIN_{P}$ = Nombre minimal de périodes 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 $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. +\item $V_{PERTE}$ = Valeur de la perte liée à 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-MIP-1$ = Nombre maximal de périodes dans le bloc de travail précédant et suivant la pause. +\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_{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 @@ -102,16 +102,16 @@ Il s'agit d'une contrainte de type \textsc{Sum}: \subsubsection{Motif de la journée de travail} \label{sec:q2automatefini} -Afin de représenter le motif correspondant à une journée de travail alternant les périodes de travail et celles de repos, on utilisera une contrainte de type \textsc{Regular} qui est paramétrée par un automate fini, c'est à dire une chaîne de caractère formant une expression régulière qui valide plusieurs contraintes définies par l'énoncé du problème. +Afin de représenter le motif correspondant à une journée de travail alternant les périodes de travail et celles de repos, on utilisera une contrainte de type \textsc{Regular} qui est paramétrée par un automate fini, c'est-à-dire une chaine de caractère formant une expression régulière qui valide plusieurs contraintes définies par l'énoncé du problème. -Dans Choco 4, la contrainte \texttt{model.regular} prend en paramètre une séquence de variables entières à valider, et un automate fini défini par la classe \texttt{FiniteAutomaton}. Pour construire une instance de cette classe, on doit construire l'expression régulière en n'utilisant que des nombres comme valeurs. Comme nous avons choisi de représenter les différents états d'un employé par une variable boolenne, cette condition est satisfaite. +Dans Choco 4, la contrainte \texttt{model.regular} prend en paramètre une séquence de variables entières à valider, et un automate fini défini par la classe \texttt{FiniteAutomaton}. Pour construire une instance de cette classe, on doit construire l'expression régulière en n'utilisant que des nombres comme valeurs. Comme nous avons choisi de représenter les différents états d'un employé par une variable boolienne, cette condition est satisfaite. 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 $MIP$ et au plus $MAX_P$ 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 repos d'une durée d'une période. -\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 travail d'au moins $MIN_{P}$ 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} @@ -119,9 +119,9 @@ On obtient ainsi un automate fini défini par l'expression régulière suivante: \begin{align} \label{eq:q2c2eq} {FA} = &0\lbrace 0,MAX_{PR} \rbrace\\ - &1 \lbrace MIP,MAX_P \rbrace\nonumber\\ + &1 \lbrace MIN_{P},MAX_P \rbrace\nonumber\\ &0\nonumber\\ - &1 \lbrace MIP,MAX_P \rbrace\nonumber\\ + &1 \lbrace MIN_{P},MAX_P \rbrace\nonumber\\ &0\lbrace 0,MAX_{PR} \rbrace\nonumber \end{align} @@ -161,7 +161,7 @@ Le nombre total de contraintes pour les définitions \eqref{eq:q2c1}, \eqref{eq: \subsection{Optimisation} \label{sec:q2optimisation} -Dans Choco, les contraintes d'optimisation sont crées de la même façon que les contraintes de satisfaction. Cependant, une des variables ne sera pas une constante, mais un intervalle dans lequel la fonction d'optimisation va effectuer sa recherche. +Dans Choco, les contraintes d'optimisation sont créées de la même façon que les contraintes de satisfaction. Cependant, une des variables ne sera pas une constante, mais un intervalle dans lequel la fonction d'optimisation va effectuer sa recherche. Nous implémenterons le nombre de travailleurs effectifs $e_j^{eff}$ à la période $j$ en utilisant une contrainte \textsc{Sum}: \begin{align} @@ -185,10 +185,10 @@ Nous n'incluons pas la valeur en dollars des unités de perte dans le modèle, c Nous avons donc ici $P+P+1 \in \theta(P)$ contraintes d'optimisation. -\subsection{Resultats} +\subsection{Résultats} \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\$. +Nous avons demandé au solveur Choco de minimiser la perte $N_{PERTE}$ à l'aide de la méthode \texttt{findOptimalSolution}. Nous avons utilisé les euristiques 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ère 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. diff --git a/tp/rapport.pdf b/tp/rapport.pdf index c568a13..419df68 100644 Binary files a/tp/rapport.pdf and b/tp/rapport.pdf differ diff --git a/tp/rapport.tex b/tp/rapport.tex index 8c14a7e..ca1d06a 100644 --- a/tp/rapport.tex +++ b/tp/rapport.tex @@ -6,8 +6,8 @@ \usepackage{setspace} \usepackage{datetime} \usepackage[margin=2.5cm]{geometry} % Précise les marges du document -\title{IFT-7020 - Travail pratique}% N'affecte pas la page titre, mais défini le nom de votre projet -\author{François Pelletier et François Bérubé} % N'affecte pas la page titre, mais défini le nom de l'auteur(e) du projet +\title{IFT-7020 Optimisation combinatoire - Travail pratique}% N'affecte pas la page titre, mais défini le nom de votre projet +\author{François Bérubé et François Pelletier} % N'affecte pas la page titre, mais défini le nom de l'auteur(e) du projet %Bibliographie %---------------------------------------------------------------- @@ -25,15 +25,15 @@ %Informations destinées à la page de présentation %---------------------------------------------------------------- \newcommand{\titre}{Travail pratique} -\newcommand{\auteurs}{François Pelletier et François Bérubé} -\newcommand{\matricules}{908144032, 900226407} +\newcommand{\auteurs}{François Bérubé et François Pelletier} +\newcommand{\matricules}{900226407, 908144032} \newcommand{\destinataire}{Claude-Guy Quimper} \newcommand{\cours}{IFT-7020 Optimisation combinatoire} %---------------------------------------------------------------- %Autres packages et commandes utiles %---------------------------------------------------------------- -\usepackage{amsmath,amsthm,amssymb,amsfonts} % Pour pouvoir inclure certains symboles et environnements mathématiques +\usepackage{amsmath,amsthm,amssymb,amsfonts,calc} % Pour pouvoir inclure certains symboles et environnements mathématiques \usepackage[ left = \flqq,% right = \frqq,% @@ -41,6 +41,7 @@ rightsub = \frqq% ]{dirtytalk} \newtheorem{definition}{Définition} +\usepackage{array} \usepackage{lscape} \usepackage{enumerate} % Pour mieux gérer la commande enumerate dans les sections \usepackage{graphicx} % Pour inclure des images