Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

La programmation par contraintes avec Choco3 (Java)

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Prochain SlideShare
ALF 12 - Optimisations
ALF 12 - Optimisations
Chargement dans…3
×

Consultez-les par la suite

1 sur 42 Publicité

La programmation par contraintes avec Choco3 (Java)

Télécharger pour lire hors ligne

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)

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)

Publicité
Publicité

Plus De Contenu Connexe

Les utilisateurs ont également aimé (20)

Publicité

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

Plus récents (20)

Publicité

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

×