SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
LA PROGRAMMATION
PAR CONTRAINTES (PPC)
AVEC CHOCO3
ALINE FIGOUREUX
 27 ans
 Ingénieur Telecom Lille
 Développeuse Java/Flex depuis 5 ans
 Passionnée de déco et de bricolage
 Membre des Duchess FR
 afigoureux@gmail.com / @afigoureux
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 2
LES DUCHESS
• Groupe féminin de développement sur la
plateforme Java depuis 2010
• D’autres groupes dans le monde (Suisse, Belgique, Hollande..)
• Antennes à Paris, Lyon, Limoge, Marseille..
• Ouvert à TOUS
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 3
OBJECTIFS DES DUCHESS
• Donner plus de visibilité aux femmes de l’IT
• Aider et encourager celles qui ont des sujets à présenter
• Les encourager à se rencontrer pour coopérer sur des projets
• Etre présentes sur des events tels que Devoxx, Code story,
DevFestWParis, JUGs, Google WomenTechMakers…
www.duchess-france.org
duchessfr@googlegroups.com
@duchessFR
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 4
LA PROGRAMMATION PAR
CONTRAINTES
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 5
Constraint Programming represents (…)
the Holy Grail of programming : the
user states the problem, the computer
solves it.
(E. Freuder, Director of the Cork Constraint Computation Centre)
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 6
OBJECTIFS DE LA PPC
• Résoudre des problèmes très complexes ayant un
grand nombre de contraintes
• Offrir une autre façon de formuler et résoudre des
problèmes combinatoires
• Exemples d’applications :
Sudoku, carré magique, planification, emplois du
temps, séquençage de l’ADN, conception de circuits,
logistique, etc.
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 7
QU’EST CE QU’UN PROBLÈME ?
• Se modélise par un réseau de contraintes, soit :
• un ensemble de variables,
• un ensemble de domaines
• un ensemble de contraintes.
• A chaque variable est associé un domaine.
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 8
EN BREF UN PROBLÈME C’EST :
P est un triplé (X, D, C) avec :
•X={X1, X2, ..., Xn} – l’ensemble des variables
•D={D1, D2, ..., Dn} – l’ensemble des domaines finis
•C={C1, C2, ..., Ce} – l’ensemble des contraintes
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 9
QU’EST CE QU’UNE SOLUTION ?
• C’est l’affectation d’une valeur à chaque variable
telle que les contraintes soient respectées
(ou « pas de solution »)
• Exemple de Problème et de ses solutions :
• 3 variables x, y et z (entières).
• Leurs domaines Dx=[1,3], Dy=[1,3], Dz=[1,3].
• La contrainte x = y + z
• Les solutions sont (2,1,1), (3,1,2), (3,2,1).
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 10
AUTRE EXEMPLE : ORDONNANCEMENT SPORTIF
• n équipes, n-1 semaines, n/2 périodes
• chaque paire d’équipes joue exactement 1 fois
• chaque équipe joue un match chaque semaine
• chaque équipe joue au plus deux fois dans la même période
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X
Semaine 1 Semaine 2 Semaine 3 Semaine 4 Semaine 5 Semaine 6 Semaine 7
Période 1 0 vs 1 0 vs 2 4 vs 7 3 vs 6 3 vs 7 1 vs 5 2 vs 4
Période 2 2 vs 3 1 vs 7 0 vs 3 5 vs 7 1 vs 4 0 vs 6 5 vs 6
Période 3 4 vs 5 3 vs 5 1 vs 6 0 vs 4 2 vs 6 2 vs 7 0 vs 7
Période 4 6 vs 7 4 vs 6 2 vs 5 1vs 2 0 vs 5 3 vs 4 1 vs 3
11
LA PPC PERMET DE :
 Trouver une solution
 Enumérer toutes les solutions
 Trouver la solution optimale
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 12
LES SOLVEURS DE CONTRAINTES (LIBS JAVA)
Libres
• Choco
• Cream
• Google OR-tools
• JaCoP
• Jopt
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X
Propriétaires
• Artelys Kalis
• ILOG CP
13
CHOCO
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 14
INTRODUCTION
• Libre (licence BSD)
• Projet français !
• Lisible et flexible (Conçu pour l’enseignement et la
recherche)
• Efficace et fiable (résout des problèmes concrets)
• Plus de 60 000 téléchargements à travers le monde depuis la
version 1.0 en 2003
• Code : Plus de 700 Classes (> 60 000 lignes)
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 15
L’HISTOIRE DE CHOCO
 1999 - Première implémentation CLAIRE au sein du projet
OCRE (initiative nationale pour un solveur de contraintes
ouvert destiné à la recherche et à l’enseignement)
 2003 - Choco 1.0 : Première implémentation Java
 2008 - Choco 2.0 : Version user-oriented + séparation entre le
Modèle et le Solveur + ajout de nouvelles contraintes
 2013 - Choco 3.0 : Refacto complète du code, easy-to-use,
meilleure maintenabilité
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 16
2013 : CHOCO3
 Complètement différent de Choco2
 Version stable actuelle : 3.1.1
 Nouvelle version Choco-3.2.0 en Mars 2014 (oh wait..)
 Utilisé notamment par :
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 17
APPLICATIONS DE CHOCO3 DANS L’INDUSTRIE
 Entropy, Easyvirt, Hedera : Configuration de data center
(placement de VM)
 Vaberlin, GSD lab : Développement logiciel, génération de
code
 Safran, Dassault Aviation : Plannings de missions
 KLS Optim, Optilogistic : Planning de chargement de
camions et de palettes
 Biotrial, Maif : Planning du personnel
 Kosmos : Emplois du temps pour des lycées
 PSA : Prototype de configuration de voiture online
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 18
EN BREF :
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 19
LES TYPES DE VARIABLES
 Integer (IntVar)
 Boolean (BoolVar)
 Set (SetVar)
 Graph (GraphVar)
 Real (RealVar)
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 20
LES TYPES DE CONTRAINTES
 Arithmétiques : =, !=, <, <=, >, >=
 Globales:
 AllDifferent  Toutes les variables de la solution doivent être !=
 GlobalCardinality  Impose un nombre d’occurrences min et max pour chaque variable
 Nvalue  Le nombre de valeurs distinctes utilisées dans un ensemble de
variables doit être = à N
 Scalar  Le produit scalaire de l’ensemble des variables avec un autre
ensemble de valeurs doit être égal à un nombre donné.
 Cumulative, Din, Occurrence, Element, Regular, Circuit, etc . . .
 Exclusives: Tree, CostRegular, Ibex . .
 Réifiées : and, or, not, implies, ifOnlyIf
 80 contraintes disponibles en tout
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 21
CONTRAINTES SUR DES INTEGER
Contraintes basiques :
1. Arithmétiques :
 Egalité (v1 == v2, v1 != v2);
 Comparaison (v1 <= v2, v1 < v2);
 Différence, combinaisons linéaires; produits de
variables, …
2. Expressions complexes
 Sur les expressions : plus, minus, mult, …
 Sur les variables : times, scalar, sum, …
3. Autres
 max, min, abs , …
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 22
LES STRATÉGIES DE RECHERCHE
Permettent de définir une manière spécifique de
parcourir l'espace de recherche.
Différentes stratégies :
 IntStrategyFactory.inputOrder_InDomainMin
 IntStrategyFactory.inputOrder_InDomainMax
 IntStrategyFactory.firstFail_InDomainMin
 …
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 23
LES FACTORIES
 VariableFactory
 IntConstraintFactory, SetConstraintFactory et
GraphConstraintFactory…
 IntStrategyFactory, SetStrategyFactory et
GraphStrategyFactory…
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 24
LE SOLVER
 Le Solver est l’objet central qui doit être
créé en premier :
Solver solver = new Solver();
 Rassemble toutes les informations
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 25
EXEMPLE TRIVIAL
// 1. On crée le solver
Solver solver = new Solver(« mon super problème »);
// 2. On crée les variables à l’aide de la factory
IntVar x = VariableFactory.bounded("X", 0, 5, solver);
IntVar y = VariableFactory.bounded("Y", 0, 5, solver);
// 3. On crée une contrainte et on la poste dans le solver
solver.post(IntConstraintFactory.arithm(x, "+", y, "<", 5));
// 4. On définit la stratégie de recherche
solver.set(IntStrategyFactory.inputOrder_InDomainMin(new IntVar[]));
// 5. On lance le proccessus de résolution
solver.findSolution();
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 26
EXEMPLE DE CONTRAINTES BASIQUES SUR DES INT
Model prob = new Model();
IntDomainVar var1 = prob.makeEnumIntVar(“var1”, 2, 5);
IntDomainVar var2 = prob.makeEnumIntVar(“var2”, 1, 10);
IntDomainVar var3 = prob.makeEnumIntVar(“var3”, 5, 10);
IntDomainVar var4 = prob.makeEnumIntVar(“var4”, 1, 10);
Constraint c1 = prob.gt(var2,var1);
Constraint c2 = prob.leq(var1,var3);
IntExp var5Exp = prob.minus(var4, var1);
Constraint c3 = prob.neq(var5Exp,var3);
prob.post(c1); prob.post(c2); prob.post(c3);
[1..10]
[2..5]
[5..10]
[1..10]
c1
c2
[-4..8]
c3
var1 var2
var3
var4
var5ex
p
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 27
EXEMPLE DU CARRÉ MAGIQUE
public class MagicSquare {
public static void main(String[] args) {
int n = 4;
System.out.println(
"Magic Square with n = " + n);
}
}
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X
34
34
34
34
34
34 34
34
34
34
28
CARRÉ MAGIQUE : ON CRÉE LES VARIABLES
IntVar[] vars = new IntVar[n * n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
vars[i * n + j] = VariableFactory.bounded(
"C" + i + "_" + j, 1, n * n, solver );
}
}
IntVar sum = VariableFactory.bounded ( "S", 1, n * n * (n * n + 1) / 2,
solver );
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X
n = 4
29
CARRÉ MAGIQUE : LES CONTRAINTES 1/2
// 1ère contrainte : Toutes les cases du carré doivent avoir
des valeurs différentes
for (int i = 0; i < n * n; i++) {
for (int j = 0; j < i; j++) {
solver.post( IntConstraintFactory.arithm( vars[i], “!=“,
vars[j] ) );
}
}
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 30
CARRÉ MAGIQUE : LES CONTRAINTES 2/2
// 2ème contrainte : La variable « Sum » est liée aux variables de chacune
des lignes et colonnes du carré
int[] coeffs = new int[n];
for (int i = 0; i < n; i++) {
coeffs[i] = 1;
}
for (int i = 0; i < n; i++) {
IntVar[] col = new IntVar[n];
IntVar[] row = new IntVar[n];
for (int j = 0; j < n; j++) {
col[j] = vars[i * n + j];
row[j] = vars[j * n + i];
}
solver.post( IntConstraintFactory.scalar( coeffs, row, sum ) );
solver.post( IntConstraintFactory.scalar( coeffs, col, sum ) );
} L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X
On utilise un produit scalaire avec un
coefficient de 1 pour s’assurer que la
somme de chaque ligne et de chaque
colonne sera égale à la même valeur
31
CARRÉ MAGIQUE : SOLUTION
>java MagicSquare
Magic Square Problem with n = 4
Pb[17 vars, 129 constr.]
C0_0{16} C0_1{3} C0_2{2} C0_3{13}
C1_0{5} C1_1{10} C1_2{12} C1_3{8}
C2_0{9} C2_1{6} C2_2{7} C2_3{12}
C3_0{4} C3_1{15} C3_2{14} C3_3{1}
S{34}
-- solve => 1 solutions
-- 172[+0] millis.
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 32
LA FAMILLE SMITH
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 33
EXEMPLE DE MR ET MRS SMITH
La famille Smith et leurs 3 enfants veulent nous rendre
visite au Tours JUG mais ils n’ont pas tous les même
contraintes de temps :
 Si Mr Smith vient, sa femme vient aussi
 Au moins un des deux enfants Matt et John viendront
 Mrs Smith ou Tim viendront, mais pas les deux
 Tim et John viendront, ou aucun des deux
 Si Matt vient, alors John et son père viendront aussi
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 34
MR ET MRS SMITH : LES VARIABLES
String[] x_names = {"Mr Smith","Mrs Smith", "Matt", "John", "Tim"};
BoolVar[] x = VariableFactory.boolArray("x", 5, solver);
BoolVar MrSmith = x[0];
BoolVar MrsSmith = x[1];
BoolVar Matt = x[2];
BoolVar John = x[3];
BoolVar Tim = x[4];
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X
0  ne vient pas au Tours JUG
1  vient au Tours JUG
35
MR ET MRS SMITH : LES CONTRAINTES
// Si Mr Smith vient, sa femme vient aussi.
solver.post( IntConstraintFactory.arithm( MrSmith, “-", MrsSmith, "<=", 0 ) );
// Au moins un des deux enfants Matt et John viendront.
solver.post( IntConstraintFactory.arithm( Matt, "+", John, ">=", 1 ) );
// Mrs Smith ou Tim viendront, mais pas les deux.
solver.post( IntConstraintFactory.arithm( MrsSmith, "+", Tim, "=", 1 ) );
// Tim et John viendront, ou aucun des deux.
solver.post( IntConstraintFactory.arithm( Tim, "=", John ) );
// Si Matt vient, alors John et son père viendront aussi.
BoolVar JohnAndMrSmith = VariableFactory.bool( "JohnAndMrSmith", solver );
solver.post( IntConstraintFactory.times( John, MrSmith, JohnAndMrSmith ) );
solver.post( IntConstraintFactory.arithm( Matt, "-", JohnAndMrSmith, "<=", 0 ) );
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 36
MR ET MRS SMITH : DERNIERS DÉTAILS
// On sette la stratégie de recherche
solver.set(IntStrategyFactory.firstFail_InDomainMin(x));
// On lance le processus de résolution
solver.findSolution();
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 37
MR ET MRS SMITH : PRETTY OUT
if (solver.isFeasible()) {
int num_sol = 0;
do {
System.out.print(”Ceux qui viendront au Tours JUG sont : ");
for (int i = 0; i < n; i++) {
if (x[i].getValue() == 1) {
System.out.print(x_names[i] + " ");
}
}
num_sol++;
} while (solver.nextSolution() == Boolean.TRUE);
System.out.println(”Il y a " + num_sol + " solution(s).");
} else {
System.out.println(”Pas de solution.");
}
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 38
MR ET MRS SMITH : UNE SEULE SOLUTION
MrSmith = 0
MrsSmith = 0
Matt = 0
John = 1
Tim = 1
“Ceux qui viendront au Tours JUG sont : John Tim
Il y a : 1 solution(s).”
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 39
github.com/chocoteam/choco3
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 40
BLOGS
 Jean-Charles Regin/Pierre Schaus: "CP is fun"
http://cp-is-fun.blogspot.com/
 Jacob Feldman: "CP Standardization Blog"
http://cpstandard.wordpress.com/
 Helmut Simonis: "CP Applications Blog"
http://hsimonis.wordpress.com/
 Hakan Kjellerstrand: My Constraint Programming Blog
http://www.hakank.org/constraint_programming_blog/
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 41
MERCI !
L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C
C H O C O 3 - A L I N E F I G O U R E U X 42

Contenu connexe

Tendances

Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zinebZineb ELGARRAI
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: TableauInforMatica34
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaAziz Darouichi
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
HTML 5 - intro - en francais
HTML 5 - intro - en francaisHTML 5 - intro - en francais
HTML 5 - intro - en francaisVlad Posea
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Testing Spring Boot application in post-JUnit 4 world
Testing Spring Boot application in post-JUnit 4 worldTesting Spring Boot application in post-JUnit 4 world
Testing Spring Boot application in post-JUnit 4 worldYura Nosenko
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage CFahad Golra
 
Exercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeExercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeWajihBaghdadi1
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 

Tendances (20)

Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
cloud.pdf
cloud.pdfcloud.pdf
cloud.pdf
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: Tableau
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
HTML 5 - intro - en francais
HTML 5 - intro - en francaisHTML 5 - intro - en francais
HTML 5 - intro - en francais
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Testing Spring Boot application in post-JUnit 4 world
Testing Spring Boot application in post-JUnit 4 worldTesting Spring Boot application in post-JUnit 4 world
Testing Spring Boot application in post-JUnit 4 world
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage C
 
C++
C++C++
C++
 
Exercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeExercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrige
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 

En vedette

Programmation par contraintes
Programmation par contraintesProgrammation par contraintes
Programmation par contraintesOrochi Krizalid
 
Implémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En JavaImplémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En JavaRached Krim
 
Le CSP en IT, est-ce une solution adaptée ?
Le CSP en IT, est-ce une solution adaptée ?Le CSP en IT, est-ce une solution adaptée ?
Le CSP en IT, est-ce une solution adaptée ?itSMF France
 
Classroom scheduler update
Classroom scheduler updateClassroom scheduler update
Classroom scheduler updateJennifer Polack
 
Leveraging social relevance: Using social networks to enhance literature acce...
Leveraging social relevance: Using social networks to enhance literature acce...Leveraging social relevance: Using social networks to enhance literature acce...
Leveraging social relevance: Using social networks to enhance literature acce...Lamjed Ben Jabeur
 
Implementazione di un vincolo table su un CSP solver GPU-based
Implementazione di un vincolo table su un CSP solver GPU-basedImplementazione di un vincolo table su un CSP solver GPU-based
Implementazione di un vincolo table su un CSP solver GPU-basedTommaso Campari
 
Sommaire Mini Projet Implémentation de l’algorithme du Simplexe En Java
Sommaire Mini Projet Implémentation de l’algorithme du Simplexe En JavaSommaire Mini Projet Implémentation de l’algorithme du Simplexe En Java
Sommaire Mini Projet Implémentation de l’algorithme du Simplexe En JavaRached Krim
 
Cours9 programmation linéaire
Cours9 programmation linéaireCours9 programmation linéaire
Cours9 programmation linéaireAroussia Othmen
 
Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)Mohammed TAMALI
 
Numerical analysis dual, primal, revised simplex
Numerical analysis  dual, primal, revised simplexNumerical analysis  dual, primal, revised simplex
Numerical analysis dual, primal, revised simplexSHAMJITH KM
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLwebreaker
 
Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...
Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...
Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...Corinne Gangloff
 
6008 5438 yves allard - prmia conference may 29 french_presentation
6008 5438 yves allard - prmia conference may 29 french_presentation6008 5438 yves allard - prmia conference may 29 french_presentation
6008 5438 yves allard - prmia conference may 29 french_presentationRon Cheshire
 
08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]
08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]
08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]olivierdj
 

En vedette (20)

Programmation par contraintes
Programmation par contraintesProgrammation par contraintes
Programmation par contraintes
 
Implémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En JavaImplémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En Java
 
Le CSP en IT, est-ce une solution adaptée ?
Le CSP en IT, est-ce une solution adaptée ?Le CSP en IT, est-ce une solution adaptée ?
Le CSP en IT, est-ce une solution adaptée ?
 
Classroom scheduler update
Classroom scheduler updateClassroom scheduler update
Classroom scheduler update
 
Leveraging social relevance: Using social networks to enhance literature acce...
Leveraging social relevance: Using social networks to enhance literature acce...Leveraging social relevance: Using social networks to enhance literature acce...
Leveraging social relevance: Using social networks to enhance literature acce...
 
Implementazione di un vincolo table su un CSP solver GPU-based
Implementazione di un vincolo table su un CSP solver GPU-basedImplementazione di un vincolo table su un CSP solver GPU-based
Implementazione di un vincolo table su un CSP solver GPU-based
 
Sommaire Mini Projet Implémentation de l’algorithme du Simplexe En Java
Sommaire Mini Projet Implémentation de l’algorithme du Simplexe En JavaSommaire Mini Projet Implémentation de l’algorithme du Simplexe En Java
Sommaire Mini Projet Implémentation de l’algorithme du Simplexe En Java
 
Cours9 programmation linéaire
Cours9 programmation linéaireCours9 programmation linéaire
Cours9 programmation linéaire
 
Programmation linéaire
Programmation linéaireProgrammation linéaire
Programmation linéaire
 
Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)
 
Numerical analysis dual, primal, revised simplex
Numerical analysis  dual, primal, revised simplexNumerical analysis  dual, primal, revised simplex
Numerical analysis dual, primal, revised simplex
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
RapportComplet
RapportCompletRapportComplet
RapportComplet
 
RapportComplet
RapportCompletRapportComplet
RapportComplet
 
Herramientas de gimp 2
Herramientas de gimp 2Herramientas de gimp 2
Herramientas de gimp 2
 
Draft teasing identite numerique
Draft teasing identite numeriqueDraft teasing identite numerique
Draft teasing identite numerique
 
10ideasclave evaluar
10ideasclave evaluar10ideasclave evaluar
10ideasclave evaluar
 
Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...
Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...
Animation Numérique de Territoire, une nouvelle dynamique grâce à l'action de...
 
6008 5438 yves allard - prmia conference may 29 french_presentation
6008 5438 yves allard - prmia conference may 29 french_presentation6008 5438 yves allard - prmia conference may 29 french_presentation
6008 5438 yves allard - prmia conference may 29 french_presentation
 
08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]
08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]
08 les 4 animaux necessaires dans la vie des femmes [mode de compatibilité]
 

Similaire à La programmation par contraintes avec Choco3 (Java)

Electronique-Numérique-TD-7.pdf
Electronique-Numérique-TD-7.pdfElectronique-Numérique-TD-7.pdf
Electronique-Numérique-TD-7.pdfYassine Sabri
 
Présentation Dataquitaine 2023.pdf
Présentation Dataquitaine 2023.pdfPrésentation Dataquitaine 2023.pdf
Présentation Dataquitaine 2023.pdfVIA INNO
 
Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...
Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...
Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...jchaine
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfadeljaouadi
 
FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"
FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"
FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"Flupa
 
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Arthur Lutz
 
PPC-Licence3 Programmation par contraints.pdf
PPC-Licence3 Programmation par contraints.pdfPPC-Licence3 Programmation par contraints.pdf
PPC-Licence3 Programmation par contraints.pdfabiidisame
 
Les patrons de conception du composant Form
Les patrons de conception du composant FormLes patrons de conception du composant Form
Les patrons de conception du composant FormVladyslav Riabchenko
 
Programmation lineaire algorithme_du_simplexe
Programmation lineaire algorithme_du_simplexeProgrammation lineaire algorithme_du_simplexe
Programmation lineaire algorithme_du_simplexeJiijishady
 
Logique floue application
Logique floue application Logique floue application
Logique floue application Arrow Arrow
 
SkillValue Master Class NodeJS 101
SkillValue Master Class NodeJS 101SkillValue Master Class NodeJS 101
SkillValue Master Class NodeJS 101Benoit Fillon
 
RapportdeStage_CNAM_RousselKevin2016
RapportdeStage_CNAM_RousselKevin2016RapportdeStage_CNAM_RousselKevin2016
RapportdeStage_CNAM_RousselKevin2016DreamWonder
 
Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014Yves Caseau
 
DevExp 2012 methodes agiles SCRUM jesnault
DevExp 2012 methodes agiles SCRUM jesnaultDevExp 2012 methodes agiles SCRUM jesnault
DevExp 2012 methodes agiles SCRUM jesnaultJérôme Esnault
 
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?cyrilpicat
 
La recherche approchée de motifs : théorie et applications
La recherche approchée de motifs : théorie et applications La recherche approchée de motifs : théorie et applications
La recherche approchée de motifs : théorie et applications Ibrahim Chegrane
 

Similaire à La programmation par contraintes avec Choco3 (Java) (20)

Electronique-Numérique-TD-7.pdf
Electronique-Numérique-TD-7.pdfElectronique-Numérique-TD-7.pdf
Electronique-Numérique-TD-7.pdf
 
MyCv
MyCv MyCv
MyCv
 
Présentation Dataquitaine 2023.pdf
Présentation Dataquitaine 2023.pdfPrésentation Dataquitaine 2023.pdf
Présentation Dataquitaine 2023.pdf
 
Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...
Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...
Les "nouveaux" challenge de l'UX Agile / Jeremie Chaine / FLUPA UX DAY / Pari...
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdf
 
FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"
FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"
FLUPA UX-Day 2013 : Jérémie Chaine "Les nouveaux challenges de l’UX Agile"
 
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
 
PPC-Licence3 Programmation par contraints.pdf
PPC-Licence3 Programmation par contraints.pdfPPC-Licence3 Programmation par contraints.pdf
PPC-Licence3 Programmation par contraints.pdf
 
Generalites econometrie
Generalites econometrieGeneralites econometrie
Generalites econometrie
 
Les patrons de conception du composant Form
Les patrons de conception du composant FormLes patrons de conception du composant Form
Les patrons de conception du composant Form
 
Programmation lineaire algorithme_du_simplexe
Programmation lineaire algorithme_du_simplexeProgrammation lineaire algorithme_du_simplexe
Programmation lineaire algorithme_du_simplexe
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
Cours1.pptx
Cours1.pptxCours1.pptx
Cours1.pptx
 
Logique floue application
Logique floue application Logique floue application
Logique floue application
 
SkillValue Master Class NodeJS 101
SkillValue Master Class NodeJS 101SkillValue Master Class NodeJS 101
SkillValue Master Class NodeJS 101
 
RapportdeStage_CNAM_RousselKevin2016
RapportdeStage_CNAM_RousselKevin2016RapportdeStage_CNAM_RousselKevin2016
RapportdeStage_CNAM_RousselKevin2016
 
Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014
 
DevExp 2012 methodes agiles SCRUM jesnault
DevExp 2012 methodes agiles SCRUM jesnaultDevExp 2012 methodes agiles SCRUM jesnault
DevExp 2012 methodes agiles SCRUM jesnault
 
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
 
La recherche approchée de motifs : théorie et applications
La recherche approchée de motifs : théorie et applications La recherche approchée de motifs : théorie et applications
La recherche approchée de motifs : théorie et applications
 

La programmation par contraintes avec Choco3 (Java)

  • 2. ALINE FIGOUREUX  27 ans  Ingénieur Telecom Lille  Développeuse Java/Flex depuis 5 ans  Passionnée de déco et de bricolage  Membre des Duchess FR  afigoureux@gmail.com / @afigoureux L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 2
  • 3. LES DUCHESS • Groupe féminin de développement sur la plateforme Java depuis 2010 • D’autres groupes dans le monde (Suisse, Belgique, Hollande..) • Antennes à Paris, Lyon, Limoge, Marseille.. • Ouvert à TOUS L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 3
  • 4. OBJECTIFS DES DUCHESS • Donner plus de visibilité aux femmes de l’IT • Aider et encourager celles qui ont des sujets à présenter • Les encourager à se rencontrer pour coopérer sur des projets • Etre présentes sur des events tels que Devoxx, Code story, DevFestWParis, JUGs, Google WomenTechMakers… www.duchess-france.org duchessfr@googlegroups.com @duchessFR L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 4
  • 5. LA PROGRAMMATION PAR CONTRAINTES L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 5
  • 6. Constraint Programming represents (…) the Holy Grail of programming : the user states the problem, the computer solves it. (E. Freuder, Director of the Cork Constraint Computation Centre) L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 6
  • 7. OBJECTIFS DE LA PPC • Résoudre des problèmes très complexes ayant un grand nombre de contraintes • Offrir une autre façon de formuler et résoudre des problèmes combinatoires • Exemples d’applications : Sudoku, carré magique, planification, emplois du temps, séquençage de l’ADN, conception de circuits, logistique, etc. L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 7
  • 8. QU’EST CE QU’UN PROBLÈME ? • Se modélise par un réseau de contraintes, soit : • un ensemble de variables, • un ensemble de domaines • un ensemble de contraintes. • A chaque variable est associé un domaine. L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 8
  • 9. EN BREF UN PROBLÈME C’EST : P est un triplé (X, D, C) avec : •X={X1, X2, ..., Xn} – l’ensemble des variables •D={D1, D2, ..., Dn} – l’ensemble des domaines finis •C={C1, C2, ..., Ce} – l’ensemble des contraintes L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 9
  • 10. QU’EST CE QU’UNE SOLUTION ? • C’est l’affectation d’une valeur à chaque variable telle que les contraintes soient respectées (ou « pas de solution ») • Exemple de Problème et de ses solutions : • 3 variables x, y et z (entières). • Leurs domaines Dx=[1,3], Dy=[1,3], Dz=[1,3]. • La contrainte x = y + z • Les solutions sont (2,1,1), (3,1,2), (3,2,1). L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 10
  • 11. AUTRE EXEMPLE : ORDONNANCEMENT SPORTIF • n équipes, n-1 semaines, n/2 périodes • chaque paire d’équipes joue exactement 1 fois • chaque équipe joue un match chaque semaine • chaque équipe joue au plus deux fois dans la même période L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X Semaine 1 Semaine 2 Semaine 3 Semaine 4 Semaine 5 Semaine 6 Semaine 7 Période 1 0 vs 1 0 vs 2 4 vs 7 3 vs 6 3 vs 7 1 vs 5 2 vs 4 Période 2 2 vs 3 1 vs 7 0 vs 3 5 vs 7 1 vs 4 0 vs 6 5 vs 6 Période 3 4 vs 5 3 vs 5 1 vs 6 0 vs 4 2 vs 6 2 vs 7 0 vs 7 Période 4 6 vs 7 4 vs 6 2 vs 5 1vs 2 0 vs 5 3 vs 4 1 vs 3 11
  • 12. LA PPC PERMET DE :  Trouver une solution  Enumérer toutes les solutions  Trouver la solution optimale L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 12
  • 13. LES SOLVEURS DE CONTRAINTES (LIBS JAVA) Libres • Choco • Cream • Google OR-tools • JaCoP • Jopt L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X Propriétaires • Artelys Kalis • ILOG CP 13
  • 14. CHOCO L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 14
  • 15. INTRODUCTION • Libre (licence BSD) • Projet français ! • Lisible et flexible (Conçu pour l’enseignement et la recherche) • Efficace et fiable (résout des problèmes concrets) • Plus de 60 000 téléchargements à travers le monde depuis la version 1.0 en 2003 • Code : Plus de 700 Classes (> 60 000 lignes) L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 15
  • 16. L’HISTOIRE DE CHOCO  1999 - Première implémentation CLAIRE au sein du projet OCRE (initiative nationale pour un solveur de contraintes ouvert destiné à la recherche et à l’enseignement)  2003 - Choco 1.0 : Première implémentation Java  2008 - Choco 2.0 : Version user-oriented + séparation entre le Modèle et le Solveur + ajout de nouvelles contraintes  2013 - Choco 3.0 : Refacto complète du code, easy-to-use, meilleure maintenabilité L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 16
  • 17. 2013 : CHOCO3  Complètement différent de Choco2  Version stable actuelle : 3.1.1  Nouvelle version Choco-3.2.0 en Mars 2014 (oh wait..)  Utilisé notamment par : L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 17
  • 18. APPLICATIONS DE CHOCO3 DANS L’INDUSTRIE  Entropy, Easyvirt, Hedera : Configuration de data center (placement de VM)  Vaberlin, GSD lab : Développement logiciel, génération de code  Safran, Dassault Aviation : Plannings de missions  KLS Optim, Optilogistic : Planning de chargement de camions et de palettes  Biotrial, Maif : Planning du personnel  Kosmos : Emplois du temps pour des lycées  PSA : Prototype de configuration de voiture online L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 18
  • 19. EN BREF : L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 19
  • 20. LES TYPES DE VARIABLES  Integer (IntVar)  Boolean (BoolVar)  Set (SetVar)  Graph (GraphVar)  Real (RealVar) L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 20
  • 21. LES TYPES DE CONTRAINTES  Arithmétiques : =, !=, <, <=, >, >=  Globales:  AllDifferent  Toutes les variables de la solution doivent être !=  GlobalCardinality  Impose un nombre d’occurrences min et max pour chaque variable  Nvalue  Le nombre de valeurs distinctes utilisées dans un ensemble de variables doit être = à N  Scalar  Le produit scalaire de l’ensemble des variables avec un autre ensemble de valeurs doit être égal à un nombre donné.  Cumulative, Din, Occurrence, Element, Regular, Circuit, etc . . .  Exclusives: Tree, CostRegular, Ibex . .  Réifiées : and, or, not, implies, ifOnlyIf  80 contraintes disponibles en tout L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 21
  • 22. CONTRAINTES SUR DES INTEGER Contraintes basiques : 1. Arithmétiques :  Egalité (v1 == v2, v1 != v2);  Comparaison (v1 <= v2, v1 < v2);  Différence, combinaisons linéaires; produits de variables, … 2. Expressions complexes  Sur les expressions : plus, minus, mult, …  Sur les variables : times, scalar, sum, … 3. Autres  max, min, abs , … L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 22
  • 23. LES STRATÉGIES DE RECHERCHE Permettent de définir une manière spécifique de parcourir l'espace de recherche. Différentes stratégies :  IntStrategyFactory.inputOrder_InDomainMin  IntStrategyFactory.inputOrder_InDomainMax  IntStrategyFactory.firstFail_InDomainMin  … L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 23
  • 24. LES FACTORIES  VariableFactory  IntConstraintFactory, SetConstraintFactory et GraphConstraintFactory…  IntStrategyFactory, SetStrategyFactory et GraphStrategyFactory… L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 24
  • 25. LE SOLVER  Le Solver est l’objet central qui doit être créé en premier : Solver solver = new Solver();  Rassemble toutes les informations L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 25
  • 26. EXEMPLE TRIVIAL // 1. On crée le solver Solver solver = new Solver(« mon super problème »); // 2. On crée les variables à l’aide de la factory IntVar x = VariableFactory.bounded("X", 0, 5, solver); IntVar y = VariableFactory.bounded("Y", 0, 5, solver); // 3. On crée une contrainte et on la poste dans le solver solver.post(IntConstraintFactory.arithm(x, "+", y, "<", 5)); // 4. On définit la stratégie de recherche solver.set(IntStrategyFactory.inputOrder_InDomainMin(new IntVar[])); // 5. On lance le proccessus de résolution solver.findSolution(); L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 26
  • 27. EXEMPLE DE CONTRAINTES BASIQUES SUR DES INT Model prob = new Model(); IntDomainVar var1 = prob.makeEnumIntVar(“var1”, 2, 5); IntDomainVar var2 = prob.makeEnumIntVar(“var2”, 1, 10); IntDomainVar var3 = prob.makeEnumIntVar(“var3”, 5, 10); IntDomainVar var4 = prob.makeEnumIntVar(“var4”, 1, 10); Constraint c1 = prob.gt(var2,var1); Constraint c2 = prob.leq(var1,var3); IntExp var5Exp = prob.minus(var4, var1); Constraint c3 = prob.neq(var5Exp,var3); prob.post(c1); prob.post(c2); prob.post(c3); [1..10] [2..5] [5..10] [1..10] c1 c2 [-4..8] c3 var1 var2 var3 var4 var5ex p L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 27
  • 28. EXEMPLE DU CARRÉ MAGIQUE public class MagicSquare { public static void main(String[] args) { int n = 4; System.out.println( "Magic Square with n = " + n); } } L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 34 34 34 34 34 34 34 34 34 34 28
  • 29. CARRÉ MAGIQUE : ON CRÉE LES VARIABLES IntVar[] vars = new IntVar[n * n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { vars[i * n + j] = VariableFactory.bounded( "C" + i + "_" + j, 1, n * n, solver ); } } IntVar sum = VariableFactory.bounded ( "S", 1, n * n * (n * n + 1) / 2, solver ); L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X n = 4 29
  • 30. CARRÉ MAGIQUE : LES CONTRAINTES 1/2 // 1ère contrainte : Toutes les cases du carré doivent avoir des valeurs différentes for (int i = 0; i < n * n; i++) { for (int j = 0; j < i; j++) { solver.post( IntConstraintFactory.arithm( vars[i], “!=“, vars[j] ) ); } } L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 30
  • 31. CARRÉ MAGIQUE : LES CONTRAINTES 2/2 // 2ème contrainte : La variable « Sum » est liée aux variables de chacune des lignes et colonnes du carré int[] coeffs = new int[n]; for (int i = 0; i < n; i++) { coeffs[i] = 1; } for (int i = 0; i < n; i++) { IntVar[] col = new IntVar[n]; IntVar[] row = new IntVar[n]; for (int j = 0; j < n; j++) { col[j] = vars[i * n + j]; row[j] = vars[j * n + i]; } solver.post( IntConstraintFactory.scalar( coeffs, row, sum ) ); solver.post( IntConstraintFactory.scalar( coeffs, col, sum ) ); } L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X On utilise un produit scalaire avec un coefficient de 1 pour s’assurer que la somme de chaque ligne et de chaque colonne sera égale à la même valeur 31
  • 32. CARRÉ MAGIQUE : SOLUTION >java MagicSquare Magic Square Problem with n = 4 Pb[17 vars, 129 constr.] C0_0{16} C0_1{3} C0_2{2} C0_3{13} C1_0{5} C1_1{10} C1_2{12} C1_3{8} C2_0{9} C2_1{6} C2_2{7} C2_3{12} C3_0{4} C3_1{15} C3_2{14} C3_3{1} S{34} -- solve => 1 solutions -- 172[+0] millis. L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 32
  • 33. LA FAMILLE SMITH L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 33
  • 34. EXEMPLE DE MR ET MRS SMITH La famille Smith et leurs 3 enfants veulent nous rendre visite au Tours JUG mais ils n’ont pas tous les même contraintes de temps :  Si Mr Smith vient, sa femme vient aussi  Au moins un des deux enfants Matt et John viendront  Mrs Smith ou Tim viendront, mais pas les deux  Tim et John viendront, ou aucun des deux  Si Matt vient, alors John et son père viendront aussi L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 34
  • 35. MR ET MRS SMITH : LES VARIABLES String[] x_names = {"Mr Smith","Mrs Smith", "Matt", "John", "Tim"}; BoolVar[] x = VariableFactory.boolArray("x", 5, solver); BoolVar MrSmith = x[0]; BoolVar MrsSmith = x[1]; BoolVar Matt = x[2]; BoolVar John = x[3]; BoolVar Tim = x[4]; L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 0  ne vient pas au Tours JUG 1  vient au Tours JUG 35
  • 36. MR ET MRS SMITH : LES CONTRAINTES // Si Mr Smith vient, sa femme vient aussi. solver.post( IntConstraintFactory.arithm( MrSmith, “-", MrsSmith, "<=", 0 ) ); // Au moins un des deux enfants Matt et John viendront. solver.post( IntConstraintFactory.arithm( Matt, "+", John, ">=", 1 ) ); // Mrs Smith ou Tim viendront, mais pas les deux. solver.post( IntConstraintFactory.arithm( MrsSmith, "+", Tim, "=", 1 ) ); // Tim et John viendront, ou aucun des deux. solver.post( IntConstraintFactory.arithm( Tim, "=", John ) ); // Si Matt vient, alors John et son père viendront aussi. BoolVar JohnAndMrSmith = VariableFactory.bool( "JohnAndMrSmith", solver ); solver.post( IntConstraintFactory.times( John, MrSmith, JohnAndMrSmith ) ); solver.post( IntConstraintFactory.arithm( Matt, "-", JohnAndMrSmith, "<=", 0 ) ); L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 36
  • 37. MR ET MRS SMITH : DERNIERS DÉTAILS // On sette la stratégie de recherche solver.set(IntStrategyFactory.firstFail_InDomainMin(x)); // On lance le processus de résolution solver.findSolution(); L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 37
  • 38. MR ET MRS SMITH : PRETTY OUT if (solver.isFeasible()) { int num_sol = 0; do { System.out.print(”Ceux qui viendront au Tours JUG sont : "); for (int i = 0; i < n; i++) { if (x[i].getValue() == 1) { System.out.print(x_names[i] + " "); } } num_sol++; } while (solver.nextSolution() == Boolean.TRUE); System.out.println(”Il y a " + num_sol + " solution(s)."); } else { System.out.println(”Pas de solution."); } L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 38
  • 39. MR ET MRS SMITH : UNE SEULE SOLUTION MrSmith = 0 MrsSmith = 0 Matt = 0 John = 1 Tim = 1 “Ceux qui viendront au Tours JUG sont : John Tim Il y a : 1 solution(s).” L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 39
  • 40. github.com/chocoteam/choco3 L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 40
  • 41. BLOGS  Jean-Charles Regin/Pierre Schaus: "CP is fun" http://cp-is-fun.blogspot.com/  Jacob Feldman: "CP Standardization Blog" http://cpstandard.wordpress.com/  Helmut Simonis: "CP Applications Blog" http://hsimonis.wordpress.com/  Hakan Kjellerstrand: My Constraint Programming Blog http://www.hakank.org/constraint_programming_blog/ L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 41
  • 42. MERCI ! L A P R O G R A M M A T I O N P A R C O N T R A I N T E S A V E C C H O C O 3 - A L I N E F I G O U R E U X 42