Pouknouki

Constraint programming

May 10th, 2016
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.54 KB | None | 0 0
  1. from constraint import *
  2. def D(matiere): #returns the length of a subject
  3.     if matiere == "Anglais":
  4.         return 4
  5.     if matiere == "Francais":
  6.         return 2
  7.     if matiere == "Physique":
  8.         return 3
  9.     if matiere == "Maths":
  10.         return 3
  11. problem = Problem() #new problem
  12. #code generated from C# begins here
  13. problem.addVariable("E1Anglais", range(1, 25-D("Anglais"))) #add the first exam of the first student (Student 1, English exam)
  14. #Contraintes une epreuve a la fois
  15. problem.addConstraint(lambda E1Anglais, E1Francais: E1Anglais <= E1Francais and E1Anglais + D("Anglais") < E1Francais or E1Francais <= E1Anglais and E1Francais + D("Francais") < E1Anglais, ("E1Anglais", "E1Francais")) #this should guarantee it doesn't overlap with the French exam
  16. problem.addConstraint(lambda E1Anglais, E1Physique: E1Anglais <= E1Physique and E1Anglais + D("Anglais") < E1Physique or E1Physique <= E1Anglais and E1Physique + D("Physique") < E1Anglais, ("E1Anglais", "E1Physique"))#this should guarantee it doesn't overlap with the physics exam
  17. problem.addConstraint(lambda E1Anglais, E1Maths: E1Anglais <= E1Maths and E1Anglais + D("Anglais") < E1Maths or E1Maths <= E1Anglais and E1Maths + D("Maths") < E1Anglais, ("E1Anglais", "E1Maths"))#this should guarantee it doesn't overlap with the math exam
  18. #Contraintes un candidat par prof
  19. problem.addConstraint(lambda E1Anglais, E2Anglais: E1Anglais <= E2Anglais and E1Anglais + D("Anglais") <= E2Anglais or E2Anglais <= E1Anglais and E2Anglais + D("Anglais") <= E1Anglais, ("E1Anglais", "E2Anglais")) #this should guarantee it doesn't overlap with other students' exams
  20. problem.addVariable("E1Francais", range(1, 25-D("Francais"))) #add the French exam for the first student variable
  21. #Contraintes une epreuve a la fois
  22. problem.addConstraint(lambda E1Francais, E1Physique: E1Francais <= E1Physique and E1Francais + D("Francais") < E1Physique or E1Physique <= E1Francais and E1Physique + D("Physique") < E1Francais, ("E1Francais", "E1Physique")) #as you can see, I have one subject less for which I have to constraint the overlap since it's already been done in the constraints of the said subject, here we don't add the English hour variable
  23. problem.addConstraint(lambda E1Francais, E1Maths: E1Francais <= E1Maths and E1Francais + D("Francais") < E1Maths or E1Maths <= E1Francais and E1Maths + D("Maths") < E1Francais, ("E1Francais", "E1Maths"))
  24. #Contraintes un candidat par prof
  25. problem.addConstraint(lambda E1Francais, E2Francais: E1Francais <= E2Francais and E1Francais + D("Francais") <= E2Francais or E2Francais <= E1Francais and E2Francais + D("Francais") <= E1Francais, ("E1Francais", "E2Francais"))
  26. problem.addVariable("E1Physique", range(1, 25-D("Physique")))
  27. #Contraintes une epreuve a la fois
  28. problem.addConstraint(lambda E1Physique, E1Maths: E1Physique <= E1Maths and E1Physique + D("Physique") < E1Maths or E1Maths <= E1Physique and E1Maths + D("Maths") < E1Physique, ("E1Physique", "E1Maths"))
  29. #Contraintes un candidat par prof
  30. problem.addConstraint(lambda E1Physique, E2Physique: E1Physique <= E2Physique and E1Physique + D("Physique") <= E2Physique or E2Physique <= E1Physique and E2Physique + D("Physique") <= E1Physique, ("E1Physique", "E2Physique"))
  31. problem.addVariable("E1Maths", range(1, 25-D("Maths")))
  32. #Contraintes une epreuve a la fois
  33. #Contraintes un candidat par prof
  34. problem.addConstraint(lambda E1Maths, E2Maths: E1Maths <= E2Maths and E1Maths + D("Maths") <= E2Maths or E2Maths <= E1Maths and E2Maths + D("Maths") <= E1Maths, ("E1Maths", "E2Maths"))
  35.  
  36. solutions = problem.getSolutions()
  37. print(solutions)
Advertisement
Add Comment
Please, Sign In to add comment