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 bricol...
LES DUCHESS
• Groupe féminin de développement sur la
plateforme Java depuis 2010
• D’autres groupes dans le monde (Suisse,...
OBJECTIFS DES DUCHESS
• Donner plus de visibilité aux femmes de l’IT
• Aider et encourager celles qui ont des sujets à pré...
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...
Constraint Programming represents (…)
the Holy Grail of programming : the
user states the problem, the computer
solves it....
OBJECTIFS DE LA PPC
• Résoudre des problèmes très complexes ayant un
grand nombre de contraintes
• Offrir une autre façon ...
QU’EST CE QU’UN PROBLÈME ?
• Se modélise par un réseau de contraintes, soit :
• un ensemble de variables,
• un ensemble de...
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, ....
QU’EST CE QU’UNE SOLUTION ?
• C’est l’affectation d’une valeur à chaque variable
telle que les contraintes soient respect...
AUTRE EXEMPLE : ORDONNANCEMENT SPORTIF
• n équipes, n-1 semaines, n/2 périodes
• chaque paire d’équipes joue exactement 1 ...
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...
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 ...
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)
•...
L’HISTOIRE DE CHOCO
 1999 - Première implémentation CLAIRE au sein du projet
OCRE (initiative nationale pour un solveur d...
2013 : CHOCO3
 Complètement différent de Choco2
 Version stable actuelle : 3.1.1
 Nouvelle version Choco-3.2.0 en Mars ...
APPLICATIONS DE CHOCO3 DANS L’INDUSTRIE
 Entropy, Easyvirt, Hedera : Configuration de data center
(placement de VM)
 Vab...
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...
LES TYPES DE CONTRAINTES
 Arithmétiques : =, !=, <, <=, >, >=
 Globales:
 AllDifferent  Toutes les variables de la sol...
CONTRAINTES SUR DES INTEGER
Contraintes basiques :
1. Arithmétiques :
 Egalité (v1 == v2, v1 != v2);
 Comparaison (v1 <=...
LES STRATÉGIES DE RECHERCHE
Permettent de définir une manière spécifique de
parcourir l'espace de recherche.
Différentes s...
LES FACTORIES
 VariableFactory
 IntConstraintFactory, SetConstraintFactory et
GraphConstraintFactory…
 IntStrategyFacto...
LE SOLVER
 Le Solver est l’objet central qui doit être
créé en premier :
Solver solver = new Solver();
 Rassemble toutes...
EXEMPLE TRIVIAL
// 1. On crée le solver
Solver solver = new Solver(« mon super problème »);
// 2. On crée les variables à ...
EXEMPLE DE CONTRAINTES BASIQUES SUR DES INT
Model prob = new Model();
IntDomainVar var1 = prob.makeEnumIntVar(“var1”, 2, 5...
EXEMPLE DU CARRÉ MAGIQUE
public class MagicSquare {
public static void main(String[] args) {
int n = 4;
System.out.println...
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 <...
CARRÉ MAGIQUE : LES CONTRAINTES 1/2
// 1ère contrainte : Toutes les cases du carré doivent avoir
des valeurs différentes
f...
CARRÉ MAGIQUE : LES CONTRAINTES 2/2
// 2ème contrainte : La variable « Sum » est liée aux variables de chacune
des lignes ...
CARRÉ MAGIQUE : SOLUTION
>java MagicSquare
Magic Square Problem with n = 4
Pb[17 vars, 129 constr.]
C0_0{16} C0_1{3} C0_2{...
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...
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 ...
MR ET MRS SMITH : LES VARIABLES
String[] x_names = {"Mr Smith","Mrs Smith", "Matt", "John", "Tim"};
BoolVar[] x = Variable...
MR ET MRS SMITH : LES CONTRAINTES
// Si Mr Smith vient, sa femme vient aussi.
solver.post( IntConstraintFactory.arithm( Mr...
MR ET MRS SMITH : DERNIERS DÉTAILS
// On sette la stratégie de recherche
solver.set(IntStrategyFactory.firstFail_InDomainM...
MR ET MRS SMITH : PRETTY OUT
if (solver.isFeasible()) {
int num_sol = 0;
do {
System.out.print(”Ceux qui viendront au Tour...
MR ET MRS SMITH : UNE SEULE SOLUTION
MrSmith = 0
MrsSmith = 0
Matt = 0
John = 1
Tim = 1
“Ceux qui viendront au Tours JUG s...
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 ...
BLOGS
 Jean-Charles Regin/Pierre Schaus: "CP is fun"
http://cp-is-fun.blogspot.com/
 Jacob Feldman: "CP Standardization ...
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
Prochain SlideShare
Chargement dans…5
×

La programmation par contraintes avec Choco3 (Java)

5 211 vues

Publié le

Présentation rapide du concept de programmation par contraintes (Constraint programming) avec la librairie Java Choco3 lors du JUG du 9 Avril 2014 à Tours (France)

Publié dans : Technologie
1 commentaire
2 j’aime
Statistiques
Remarques
  • hello thank you for your presentation i need your help please so my question is Constraint programming in order to solve Pattern Mining Problems: application to the Analytic Customer Relationship Management (CRM)
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
Aucun téléchargement
Vues
Nombre de vues
5 211
Sur SlideShare
0
Issues des intégrations
0
Intégrations
20
Actions
Partages
0
Téléchargements
95
Commentaires
1
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

La programmation par contraintes avec Choco3 (Java)

  1. 1. LA PROGRAMMATION PAR CONTRAINTES (PPC) AVEC CHOCO3
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×