fork download
  1. from optapy import problem_fact, planning_id, planning_entity, planning_variable, planning_solution, planning_score
  2. from optapy import planning_entity_collection_property, problem_fact_collection_property, value_range_provider
  3. from optapy.score import HardSoftScore
  4. from datetime import datetime
  5. import uuid
  6.  
  7. @problem_fact
  8. class Seat:
  9. def __init__ (self, seat_id=None, room_id=None, team_id=None, created_on=None, position_x=None, position_y=None, code=None):
  10. self.seat_id=seat_id
  11. self.room_id=room_id
  12. self.team_id=team_id
  13. self.created_on=created_on
  14. self.position_x=position_x
  15. self.position_y=position_y
  16. self.code=code
  17. @planning_id
  18. def get_id (self):
  19. return self.seat_id
  20. def __str__ (self):
  21. return f'Seat {self.seat_id} in room {self.room_id} for team {self.team_id} code: {self.code}'
  22. def to_dict (self):
  23. return {
  24. 'seat_id': self.seat_id,
  25. 'room_id': self.room_id,
  26. 'team_id': self.team_id,
  27. 'created_on': self.created_on,
  28. 'code': self.code
  29. }
  30.  
  31. @problem_fact
  32. class DateSlot:
  33. def __init__(self, id, date=None):
  34. self.id=id
  35. self.date=date
  36. @planning_id
  37. def get_id (self):
  38. return self.id
  39. def __str__ (self):
  40. return f'Dateslot {self.id} for {self.date}'
  41. def to_dict(self):
  42. return {
  43. 'id': self.id,
  44. 'date': self.date
  45. }
  46.  
  47. @problem_fact
  48. class Employee:
  49. def __init__ (self, uuid, prenom=None, nom=None, photo_principale=None,
  50. lastupd_date=None, pos_city=None, pos_country=None,
  51. date_entre=None, fonction=None, date_fin=None, idc=None,
  52. nouvelle_recrute=None, idequipe=None, date_naissance=None, presentation=None,
  53. video_principale=None, ambassadeur=None, id_emplacement_pref=None):
  54. self.uuid=uuid
  55. self.prenom=prenom
  56. self.nom=nom
  57. self.photo_principale=photo_principale
  58. self.lastupd_date=lastupd_date
  59. self.pos_city=pos_city
  60. self.pos_country=pos_country
  61. self.date_entre=date_entre
  62. self.fonction=fonction
  63. self.date_fin=date_fin
  64. self.idc=idc
  65. self.nouvelle_recrute=nouvelle_recrute
  66. self.idequipe=idequipe
  67. self.date_naissance=date_naissance
  68. self.presentation=presentation
  69. self.video_principale=video_principale
  70. self.ambassadeur=ambassadeur
  71. self.id_emplacement_pref=id_emplacement_pref
  72. @planning_id
  73. def get_id (self):
  74. return self.uuid
  75. def __str__ (self):
  76. return f'Employee(name = {self.prenom} {self.nom} in team {self.idequipe} prefered_seat {self.id_emplacement_pref})'
  77. def to_dict (self):
  78. return {
  79. 'uuid': self.uuid,
  80. 'prenom': self.prenom,
  81. 'nom': self.nom,
  82. 'photo_principale': self.photo_principale,
  83. 'lastupd_date': self.lastupd_date.isoformat(),
  84. 'pos_city': self.pos_city,
  85. 'pos_country': self.pos_country,
  86. 'date_entre': self.date_entre,
  87. 'fonction': self.fonction,
  88. 'date_fin': self.date_fin,
  89. 'idc': self.idc,
  90. 'nouvelle_recrute': self.nouvelle_recrute,
  91. 'idequipe': self.idequipe,
  92. 'date_naissance': self.date_naissance,
  93. 'presentation': self.presentation,
  94. 'video_principale': self.video_principale,
  95. 'ambassadeur': self.ambassadeur,
  96. 'id_emplacement_pref': self.id_emplacement_pref
  97. }
  98.  
  99. @planning_entity
  100. class Reservation:
  101. def __init__ (self, reservation_id, date: DateSlot=None, employee: Employee=None, seat: Seat=None):
  102. self.reservation_id=reservation_id
  103. self.date=date
  104. self.employee=employee
  105. self.seat=seat
  106. @planning_id
  107. def get_id(self):
  108. return self.reservation_id
  109. @planning_variable(Employee, value_range_provider_refs=['employeeRange'])
  110. def get_employee(self):
  111. return self.employee
  112. def set_employee(self, employee):
  113. self.employee=employee
  114.  
  115. @planning_variable(Seat, value_range_provider_refs=['seatRange'])
  116. def get_seat(self):
  117. return self.seat
  118. def set_seat(self, seat):
  119. self.seat=seat
  120.  
  121. @planning_variable(DateSlot, value_range_provider_refs=['dateRange'])
  122. def get_dateslot(self):
  123. return self.date
  124. def set_dateslot(self, date):
  125. self.date=date
  126.  
  127. def __str__ (self):
  128. return f'Reservation(reservation_id = {self.reservation_id} for employee {self.employee} on {self.date} at {self.seat})'
  129.  
  130. def to_dict(self):
  131. return {
  132. 'reservation_id': self.reservation_id,
  133. 'date': self.date,
  134. 'employee': self.employee,
  135. 'seat': self.seat
  136. }
  137.  
  138. def format_list(a_list):
  139. return ',\n'.join(map(str, a_list))
  140.  
  141. @planning_solution
  142. class ReservationSchedule:
  143. def __init__ (self, employee_list, seat_list, reservation_list, dates, score=None):
  144. self.employee_list=employee_list
  145. self.seat_list=seat_list
  146. self.reservation_list=reservation_list
  147. self.dates=dates
  148. self.score=score
  149. @problem_fact_collection_property(Employee)
  150. @value_range_provider('employeeRange')
  151. def get_employee_list (self):
  152. return self.employee_list
  153.  
  154. @problem_fact_collection_property(Seat)
  155. @value_range_provider('seatRange')
  156. def get_seat_list (self):
  157. return self.seat_list
  158.  
  159. @problem_fact_collection_property(DateSlot)
  160. @value_range_provider('dateRange')
  161. def get_dateslot_list (self):
  162. return self.dates
  163.  
  164. @planning_entity_collection_property(Reservation)
  165. def get_reservation_list (self):
  166. return self.reservation_list
  167.  
  168. @planning_score(HardSoftScore)
  169. def get_score (self):
  170. return self.score
  171. def set_score (self, newScore):
  172. self.score=newScore
  173. def __str__(self):
  174. return f"ReservationSchedule(employee_list = {format_list(self.employee_list)},\n seat_list = {format_list(self.seat_list)}, \n reservation_list = {format_list(self.reservation_list)}, \n dates = {format_list(self.dates)}, \n {str(self.score.toString()) if self.score is not None else 'None'})"
  175.  
  176. def generate_problem():
  177.  
  178. seat_list=[
  179. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=1, created_on=datetime.now(), position_x=1, position_y=1, code='A1'),
  180. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=2, created_on=datetime.now(), position_x=2, position_y=1, code='A2'),
  181. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=1, created_on=datetime.now(), position_x=3, position_y=1, code='A3'),
  182. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=2, created_on=datetime.now(), position_x=4, position_y=1, code='A4'),
  183. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=1, created_on=datetime.now(), position_x=1, position_y=2, code='B1'),
  184. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=2, created_on=datetime.now(), position_x=2, position_y=2, code='B2'),
  185. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=1, created_on=datetime.now(), position_x=3, position_y=2, code='B3'),
  186. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=1, created_on=datetime.now(), position_x=4, position_y=2, code='B4'),
  187. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=2, created_on=datetime.now(), position_x=1, position_y=3, code='C1'),
  188. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=1, created_on=datetime.now(), position_x=2, position_y=3, code='C2'),
  189. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=1, created_on=datetime.now(), position_x=3, position_y=3, code='C3'),
  190. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=2, created_on=datetime.now(), position_x=4, position_y=3, code='C4'),
  191. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=3, created_on=datetime.now(), position_x=1, position_y=4, code='D1'),
  192. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=3, created_on=datetime.now(), position_x=2, position_y=4, code='D2'),
  193. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=3, created_on=datetime.now(), position_x=3, position_y=4, code='D3'),
  194. Seat(seat_id=uuid.uuid4(), room_id=uuid.uuid4(), team_id=3, created_on=datetime.now(), position_x=4, position_y=4, code='D4')
  195. ]
  196.  
  197. employee_list=[
  198. Employee(uuid.uuid4(), prenom='Karim', nom='test', idequipe=1, id_emplacement_pref=seat_list[4].seat_id),
  199. Employee(uuid.uuid4(), prenom='Sara', nom='test', idequipe=2, id_emplacement_pref=seat_list[5].seat_id),
  200. Employee(uuid.uuid4(), prenom='John', nom='test', idequipe=1, id_emplacement_pref=seat_list[6].seat_id),
  201. Employee(uuid.uuid4(), prenom='Jane', nom='test', idequipe=1, id_emplacement_pref=seat_list[7].seat_id),
  202. Employee(uuid.uuid4(), prenom='Ons', nom='test', idequipe=1, id_emplacement_pref=seat_list[0].seat_id),
  203. Employee(uuid.uuid4(), prenom='Maha', nom='test', idequipe=1, id_emplacement_pref=seat_list[2].seat_id),
  204. Employee(uuid.uuid4(), prenom='Salma', nom='test', idequipe=2, id_emplacement_pref=seat_list[3].seat_id),
  205. Employee(uuid.uuid4(), prenom='Mahdi', nom='test', idequipe=2, id_emplacement_pref=seat_list[1].seat_id),
  206. Employee(uuid.uuid4(), prenom='Manuel', nom='test', idequipe=2, id_emplacement_pref=seat_list[8].seat_id),
  207. Employee(uuid.uuid4(), prenom='Jack', nom='test', idequipe=3, id_emplacement_pref=seat_list[12].seat_id),
  208. Employee(uuid.uuid4(), prenom='Jill', nom='test', idequipe=3, id_emplacement_pref=seat_list[14].seat_id),
  209. Employee(uuid.uuid4(), prenom='Jana', nom='test', idequipe=1, id_emplacement_pref=seat_list[9].seat_id),
  210. Employee(uuid.uuid4(), prenom='Jasmine', nom='test', idequipe=1, id_emplacement_pref=seat_list[10].seat_id),
  211. Employee(uuid.uuid4(), prenom='Jasmin', nom='test', idequipe=3, id_emplacement_pref=seat_list[15].seat_id),
  212. Employee(uuid.uuid4(), prenom='Joseph', nom='test', idequipe=2, id_emplacement_pref=seat_list[11].seat_id),
  213. Employee(uuid.uuid4(), prenom='José', nom='test', idequipe=3, id_emplacement_pref=seat_list[13].seat_id)
  214. ]
  215.  
  216. dates = []
  217. for i in range (1, 4):
  218. dates.append(DateSlot(i, datetime(2020, 1, i)))
  219.  
  220. reservation_list = []
  221. for i in range (1, len(seat_list) + 1):
  222. reservation_list.append(Reservation(i))
  223. reservation = reservation_list[0]
  224. reservation.set_dateslot(dates[0])
  225. reservation.set_employee(employee_list[0])
  226. reservation.set_seat(seat_list[4])
  227.  
  228. return ReservationSchedule(dates=dates, seat_list=seat_list, reservation_list=reservation_list, employee_list=employee_list)
  229.  
Runtime error #stdin #stdout #stderr 0.16s 23236KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 1, in <module>
ModuleNotFoundError: No module named 'optapy'