任何人都可以帮助我如何防止日程安排重叠,日程安排在房间分配方面不得重叠
def schedule_variable(self):
for program in self.programs:
for course in self.curriculum[program]:
# Determine the number of intervals (consecutive hours/time slots) based on course type
if self.course_type[course].lower() == 'laboratory':
schedule1_num_of_interval = 3
schedule2_num_of_interval = 2
else:
schedule1_num_of_interval = 2
schedule2_num_of_interval = 1
# Define scheduling variables
schedule1_room = self.model.NewIntVar(0, len(self.rooms) - 1, f'room_{program}_{course}')
schedule2_room = self.model.NewIntVar(0, len(self.rooms) - 1, f'room_{program}_{course}')
schedule1_day = self.model.NewIntVar(0, len(self.days) - 1, f'day_{program}_{course}')
schedule_for_interval_day = self.model.NewIntVar(0, len(self.days) - 1, f'day_{program}_{course}')
schedule2_day = self.model.NewIntervalVar(schedule1_day, 3, schedule_for_interval_day, f'schedule2_{program}_{course}')
schedule_time_start = self.model.NewIntVar(0, len(self.times) - 1, f'start_{program}_{course}')
schedule_time_end = self.model.NewIntVar(0, len(self.times) - 1, f'end_{program}_{course}')
schedule2_time_start = self.model.NewIntVar(0, len(self.times) - 1, f'start_{program}_{course}')
schedule2_time_end = self.model.NewIntVar(0, len(self.times) - 1, f'end_{program}_{course}')
schedule1_time = self.model.NewIntervalVar(schedule_time_start, schedule1_num_of_interval, schedule_time_end, f'schedule1_{program}_{course}')
schedule2_time = self.model.NewIntervalVar(schedule2_time_start, schedule2_num_of_interval, schedule2_time_end, f'schedule2_{program}_{course}')
instructor = self.model.NewIntVar(0, len(self.instructor) - 1, f'end_{program}_{course}')
# Update the schedules dictionary
self.schedules[program, course] = {
'instructor': instructor,
'schedule1': {
'room': schedule1_room,
'day': schedule1_day,
'time': schedule1_time,
},
'schedule2': {
'room': schedule2_room,
'day': schedule2_day,
'time': schedule2_time,
}
}
我尝试过,但它只限制时间
def no_overlap_constraints(self):
for (program, course1), details1 in self.schedules.items():
for (program, course2), details2 in self.schedules.items():
if (program, course1) != (program, course2):
# Constraint for Schedule 1
self.model.AddNoOverlap([details1['schedule1']['time'], details2['schedule1']['time']])
self.model.AddNoOverlap([details1['schedule2']['time'], details2['schedule2']['time']])
这是输出
C:\Users\Admin\project\last>python main.py (0, 0): 导师:0 时间表 1 - 房间:0,日期:0,时间:3-6 时间表 2 - 房间:1,天数:3,时间:0-2 (0, 1): 导师:0 时间表 1 - 房间:1,日期:0,时间:6-8 时间表 2 - 房间:1,天数:3,时间:5-6 (1, 2): 导师:1名 时间表 1 - 房间:0,日期:0,时间:0-3 时间表 2 - 房间:1,天数:3,时间:2-4 (1, 3): 导师:1名 时间表 1 - 房间:1,日期:0,时间:8-10 时间表 2 - 房间:1,天数:3,时间:4-5 (2, 0): 导师:0 时间表 1 - 房间:0,日期:0,时间:3-6 时间表 2 - 房间:1,天数:3,时间:0-2 (2, 1): 导师:0 时间表 1 - 房间:1,日期:0,时间:6-8 时间表 2 - 房间:1,天数:3,时间:5-6 (3, 2): 导师:1名 时间表 1 - 房间:0,日期:0,时间:0-3 时间表 2 - 房间:1,天数:3,时间:2-4 (3, 3): 导师:1名 时间表 1 - 房间:1,日期:0,时间:8-10 时间表 2 - 房间:1,天数:3,时间:4-5