Beispiel #1
0
 def compute_student_same_attendees(self,
                                    list_of_class_ids: List[int]) -> int:
     nr_class = 0
     for i, c1 in enumerate(list_of_class_ids):
         for c2 in list_of_class_ids[(i + 1):]:
             tupla = self.problem.id_to_time[self.get_id_time(c1)]
             c1_start = int(tupla[0])
             c1_length = int(tupla[1])
             c1_end = c1_start + c1_length
             c1_days = int(tupla[2], 2)
             c1_weeks = int(tupla[3], 2)
             id_room_class1 = self.get_id_room(c1)
             tupla = self.problem.id_to_time[self.get_id_time(c2)]
             c2_start = int(tupla[0])
             c2_length = int(tupla[1])
             c2_end = c2_start + c2_length
             c2_days = int(tupla[2], 2)
             c2_weeks = int(tupla[3], 2)
             id_room_class2 = self.get_id_room(c2)
             travel_room = None
             if id_room_class1:
                 travel_room = self.problem.times_travel_rooms.get(
                     (id_room_class1, id_room_class2))
             room_travel_value = travel_room if travel_room else 0
             if not Constraint.same_attendees(
                     c1_start, c1_end, c2_start, c2_end, c1_days, c2_days,
                     c1_weeks, c2_weeks, room_travel_value):
                 nr_class += 1
     return nr_class
Beispiel #2
0
 def compute_soft_max_days(self, list_of_class_ids, d):
     list_of_class_days = []
     for c in list_of_class_ids:
         tupla = self.problem.id_to_time[self.classes_solution[c].id_time]
         c_days = int(tupla[2], 2)
         list_of_class_days.append(c_days)
     number_of_non_zero_bits = Constraint.max_days_soft(
         list_of_class_days, self.problem)
     return max(number_of_non_zero_bits - d, 0)
Beispiel #3
0
 def compute_soft_different_room(self, list_of_class_ids: List[int]) -> int:
     nr_class = 0
     for i, c1 in enumerate(list_of_class_ids):
         for c2 in list_of_class_ids[(i + 1):]:
             c1_room = self.get_id_room(c1)
             c2_room = self.get_id_room(c2)
             if not Constraint.different_room(c1_room, c2_room):
                 nr_class += 1
     return nr_class
Beispiel #4
0
 def compute_hard_max_breaks(self, list_of_class_ids, r, s):
     aux_list_of_class_ids = []
     for c in list_of_class_ids:
         aux_list_of_class_ids.append(c)
     number_of_breaks_exceeded = Constraint.max_breaks_soft(
         aux_list_of_class_ids, r, s, self.problem, self)
     if number_of_breaks_exceeded > 0:
         for c in aux_list_of_class_ids:
             self.classes_not_assigned.append(c)
     return number_of_breaks_exceeded
Beispiel #5
0
 def compute_hard_different_room(self, list_of_class_ids: List[int]) -> int:
     nr_class = 0
     for i, c1 in enumerate(list_of_class_ids):
         for c2 in list_of_class_ids[(i + 1):]:
             c1_room = self.get_id_room(c1)
             c2_room = self.get_id_room(c2)
             if not Constraint.different_room(c1_room, c2_room):
                 if c1 not in self.conflicts_in_hard_constraints:
                     self.conflicts_in_hard_constraints.append(c1)
                 if c2 not in self.conflicts_in_hard_constraints:
                     self.conflicts_in_hard_constraints.append(c2)
                 nr_class += 1
     return nr_class
Beispiel #6
0
 def compute_soft_max_breaks(self, list_of_class_ids, r, s):
     aux_list_of_class_ids = []
     for c in list_of_class_ids:
         aux_list_of_class_ids.append(c)
     return Constraint.max_breaks_soft(aux_list_of_class_ids, r, s,
                                       self.problem, self)
Beispiel #7
0
 def compute_soft_max_day_load(self, list_of_class_ids, s):
     return Constraint.max_day_load_soft(list_of_class_ids, s, self.problem,
                                         self)