Advertisement
tiberiup

Planificare evenimente - A*

Dec 11th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.86 KB | None | 0 0
  1.  
  2.  
  3. class Nod:
  4. def __init__(self, numarStare, parinte, eveniment, indiceEveniment, sala):
  5. self.numarStare=numarStare
  6. self.parinte=parinte
  7. self.eveniment=eveniment
  8. self.indiceEveniment=indiceEveniment
  9. self.sala=sala
  10. if self.sala!=None and self.eveniment!=None:
  11. self.locuriNefolosite=self.sala.locuri-self.eveniment.participanti
  12.  
  13. def potPlanifica(self, eveniment, sala):
  14. if eveniment.tip!=sala.tip or eveniment.participanti>sala.locuri:
  15. return False
  16.  
  17. nodCurent=self
  18. while nodCurent.parinte!=None:
  19. if sala==nodCurent.sala and eveniment.interval.suprapuneCu(nodCurent.eveniment.interval):
  20. return False
  21. nodCurent=nodCurent.parinte
  22.  
  23. return True
  24.  
  25.  
  26. class Sala:
  27. def __init__(self, numar, locuri, tip):
  28. self.numar=numar
  29. self.locuri=locuri
  30. self.tip=tip
  31.  
  32. class Interval:
  33. def __init__(self, oraInceput, minuteInceput, oraSfarsit, minuteSfarsit):
  34. self.oraInceput=oraInceput
  35. self.minuteInceput=minuteInceput
  36. self.oraSfarsit=oraSfarsit
  37. self.minuteSfarsit=minuteSfarsit
  38.  
  39. def suprapuneCu(self, interval):
  40. m1=self.oraInceput*60+self.minuteInceput
  41. m2=self.oraSfarsit*60+self.minuteSfarsit
  42. m3=interval.oraInceput*60+interval.minuteInceput
  43.  
  44. if m1<=m3 and m3<=m2:
  45. return True
  46. return False
  47.  
  48. class Eveniment:
  49. def __init__(self, interval, participanti, tip):
  50. self.interval=interval
  51. self.participanti=participanti
  52. self.tip=tip
  53.  
  54. def initializareDate():
  55. sali=[]
  56. sali.append(Sala(1, 21, "Videoconferinta"))
  57. sali.append(Sala(2, 34, "Videoconferinta"))
  58. sali.append(Sala(3, 15, "Videoconferinta"))
  59. sali.append(Sala(4, 50, "Scena"))
  60. sali.append(Sala(5, 24, "Scena"))
  61. sali.append(Sala(6, 35, "Scena"))
  62. sali.append(Sala(7, 14, "Masa rotunda"))
  63. sali.append(Sala(8, 25, "Masa rotunda"))
  64. sali.append(Sala(9, 18, "Masa rotunda"))
  65. sali.append(Sala(10, 24, "Videoconferinta"))
  66.  
  67. evenimente=[]
  68. evenimente.append(Eveniment(Interval(12,40,13,20), 24, "Videoconferinta"))
  69. evenimente.append(Eveniment(Interval(12,40,13,20), 15, "Videoconferinta"))
  70. evenimente.append(Eveniment(Interval(14,40,15,20), 20, "Masa rotunda"))
  71. evenimente.append(Eveniment(Interval(12,40,13,20), 15, "Masa rotunda"))
  72. evenimente.append(Eveniment(Interval(9,50,11,40), 18, "Videoconferinta"))
  73. evenimente.append(Eveniment(Interval(8,40,9,40), 8, "Videoconferinta"))
  74. evenimente.append(Eveniment(Interval(12,40,13,20), 30, "Videoconferinta"))
  75. evenimente.append(Eveniment(Interval(8,40,9,40), 11, "Masa rotunda"))
  76. evenimente.append(Eveniment(Interval(12,40,13,20), 25, "Masa rotunda"))
  77. evenimente.append(Eveniment(Interval(12,40,13,20), 40, "Scena"))
  78. evenimente.append(Eveniment(Interval(9,40,10,20), 15, "Scena"))
  79. evenimente.append(Eveniment(Interval(10,40,13,20), 20, "Scena"))
  80. evenimente.append(Eveniment(Interval(14,20,14,50), 15, "Masa rotunda"))
  81. evenimente.append(Eveniment(Interval(9,40,10,20), 17, "Masa rotunda"))
  82. evenimente.append(Eveniment(Interval(12,40,13,20), 34, "Scena"))
  83. evenimente.append(Eveniment(Interval(10,40,12,30), 27, "Scena"))
  84. evenimente.append(Eveniment(Interval(10,40,12,30), 27, "Videoconferinta"))
  85.  
  86. return sali, evenimente
  87.  
  88. def adaugareFrontiera(nod, frontiera):
  89. if len(frontiera)==0:
  90. frontiera.insert(0,nod)
  91. else:
  92. for i in range(0,len(frontiera)):
  93. if nod.indiceEveniment>frontiera[i].indiceEveniment or nod.locuriNefolosite<frontiera[i].locuriNefolosite:
  94. frontiera.insert(i,nod)
  95. break
  96.  
  97. def gasitSolutie(nod, numarEvenimente):
  98. return nod.indiceEveniment==numarEvenimente
  99.  
  100. def afisareSolutie(nod):
  101. nodCurent=nod
  102. while nodCurent.parinte!=None:
  103. print ("Evenimentul {} va avea loc in sala {}.".format(nodCurent.indiceEveniment+1, nodCurent.sala.numar))
  104. nodCurent=nodCurent.parinte
  105.  
  106.  
  107. def Cautare():
  108. frontiera=[]
  109. teritoriu=[]
  110.  
  111. sali, evenimente=initializareDate()
  112.  
  113. frontiera.append(Nod(1, None, None, -1, None))
  114.  
  115. while True:
  116. if len(frontiera)==0:
  117. print("Insucces")
  118. return 0
  119.  
  120. nodCurent=frontiera.pop(0)
  121.  
  122. if gasitSolutie(nodCurent,len(evenimente)-1):
  123. print("Succes")
  124. afisareSolutie(nodCurent)
  125. return 1
  126.  
  127. teritoriu.append(nodCurent)
  128. evenimentCurent=evenimente[nodCurent.indiceEveniment+1]
  129.  
  130. for sala in sali:
  131. if nodCurent.potPlanifica(evenimentCurent,sala):
  132. nod=Nod(len(frontiera)+len(teritoriu)+1,nodCurent,evenimentCurent,nodCurent.indiceEveniment+1,sala)
  133. adaugareFrontiera(nod, frontiera)
  134.  
  135. Cautare()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement