From c0cd31fe326b887b5b9b02cd03c665069a19eff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Pelletier?= Date: Wed, 7 Feb 2018 19:13:13 -0500 Subject: [PATCH] ajout de documentation constraintes optimisation --- tp/code/execution-20180204.txt | 54 ++++++++++++++++++++++++++++++++++ tp/code/makefile | 10 +++++++ tp/question2.tex | 24 +++++++++++++-- 3 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 tp/code/execution-20180204.txt create mode 100644 tp/code/makefile diff --git a/tp/code/execution-20180204.txt b/tp/code/execution-20180204.txt new file mode 100644 index 0000000..9861e2a --- /dev/null +++ b/tp/code/execution-20180204.txt @@ -0,0 +1,54 @@ +-*- mode: compilation; default-directory: "~/git/tpIFT7020/tp/code/" -*- +Compilation started at Mon Feb 5 00:07:51 + +make run +javac -cp .:choco-solver-4.0.6-with-dependencies.jar ProductionHoraire.java +java -cp .:choco-solver-4.0.6-with-dependencies.jar ProductionHoraire instance.txt +### Debut Validation Lecture Instance ### +N=5 +MIN_H=10 +MAX_H=14 +MIN_PERIODE=3 +nbEmployesRequis=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2] +nbEmployesSouhaite=[1, 2, 3, 4, 5, 4, 2, 3, 4, 3, 5, 5, 4, 3, 3, 3] +### Fin Validation Lecture Instance ### +### Création: contrainte du nombre requis d'employés ### +### Création: contrainte du motif d'horaire ### +Expression régulière:0{0,5}1{3,10}01{3,10}0{0,5} +### Création: Optimisation ### +### Création: Solveur ### +### Résolution ### +### Meilleure Solution ### +Employé 0: 0 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 +Employé 1: 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 +Employé 2: 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 +Employé 3: 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 +Employé 4: 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 + +Employés Totaux + 1 2 3 4 5 4 2 5 4 5 5 5 4 3 3 3 +Employés Souhaités + 1 2 3 4 5 4 2 3 4 3 5 5 4 3 3 3 + +Perte optimale:80$ + +### Statistiques ### +** Choco 4.0.6 (2017-11) : Constraint Programming Solver, Copyleft (c) 2010-2017 +- Model[Production Horaire] features: + Variables : 133 + Constraints : 64 + Building time : 0,790s + User-defined search strategy : yes + Complementary search strategy : no +- Complete search - 2 solution(s) found. + Model[Production Horaire] + Solutions: 2 + MINIMIZE perte = 4, + Building time : 0,790s + Resolution time : 0,567s + Nodes: 3 052 (5 380,5 n/s) + Backtracks: 6 052 + Fails: 3 000 + Restarts: 2 + +Compilation finished at Mon Feb 5 00:07:53 diff --git a/tp/code/makefile b/tp/code/makefile new file mode 100644 index 0000000..ac3b856 --- /dev/null +++ b/tp/code/makefile @@ -0,0 +1,10 @@ +all: ProductionHoraire.class + +%.class: %.java + javac -cp .:choco-solver-4.0.6-with-dependencies.jar $< + +run: ProductionHoraire.class + java -cp .:choco-solver-4.0.6-with-dependencies.jar ProductionHoraire instance.txt + +clean: + rm *.class diff --git a/tp/question2.tex b/tp/question2.tex index dfcbfdc..159dfa4 100644 --- a/tp/question2.tex +++ b/tp/question2.tex @@ -50,6 +50,13 @@ $e_{j}^{eff}$, le nombre d'employés effectif à la période $j$, et $e_{j}^{dis e_{j}^{dist} &= \lvert e_{j}^{eff} - e_j^{souh} \rvert & \forall 1 \leq j \leq N_P \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]$. +\begin{align} + N_{PERTE} = \sum_{j=1}^{N_P} e_j^{dist} +\end{align} + + \subsubsection{Nombre total de variables} \label{sec:q2nbtotvar} @@ -125,12 +132,25 @@ Le nombre total de contraintes pour les définitions \eqref{eq:q2c1}, \eqref{eq: N_P + N + N &= N_P + 2N \in \theta(N) \end{align} - - \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. +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 +\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 +\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}) +\end{align} \subsection{Paramètres} \label{sec:q2parametres}