def test_system2(self): # Test building correct schedule t1 = time.time() data = [Lesson(time=1, lecture_name=(1, TUTORIAL), group=3, day=2, auditorium=1, faculty=3), Lesson(time=1, lecture_name=(1, LAB), group=3, day=2, auditorium=1, faculty=2), Lesson(time=1, lecture_name=(1, LECTURE), group=3, day=2, auditorium=1, faculty=1), Lesson(time=1, lecture_name=(4, TUTORIAL), group=3, day=2, auditorium=1, faculty=3), Lesson(time=1, lecture_name=(4, LAB), group=3, day=2, auditorium=1, faculty=2), Lesson(time=1, lecture_name=(4, LECTURE), group=3, day=2, auditorium=1, faculty=1), Lesson(time=1, lecture_name=(2, TUTORIAL), group=2, day=2, auditorium=1, faculty=3), Lesson(time=1, lecture_name=(2, LAB), group=2, day=2, auditorium=1, faculty=2), Lesson(time=1, lecture_name=(2, LECTURE), group=2, day=2, auditorium=1, faculty=1), Lesson(time=1, lecture_name=(3, TUTORIAL), group=1, day=2, auditorium=1, faculty=4), Lesson(time=1, lecture_name=(3, LECTURE), group=1, day=2, auditorium=1, faculty=1), Lesson(time=1, lecture_name=(3, LAB), group=1, day=2, auditorium=1, faculty=4), ] uniconf = {"auditorium_size": [30, 30, 30, 30, 30, 30], "group_size": [10, 20, 15, 20], "number_of_auditoriums": 5, "number_of_timeslots": 5, "number_of_days": 2, } set_uniconf(uniconf) pop = GeneticSchedule.create_initial(lessons=data) best = GeneticSchedule.run(pop, uniconf) self.assertEqual(best.fitness, 0) self.assert_no_intersections(best)
def test_fitness4(self): # Good Schedule set_uniconf({ "auditorium_size": [30, 30, 30], "group_size": [10, 20, 15] }) data = [ Lesson(time=0, lecture_name=(2, LECTURE), group=2, day=2, auditorium=2, faculty=2), Lesson(time=1, lecture_name=(2, TUTORIAL), group=2, day=2, auditorium=1, faculty=1), Lesson(time=2, lecture_name=(2, LAB), group=2, day=2, auditorium=0, faculty=1), ] s = Schedule(lessons=data).fitness self.assertEqual(s, 0)
def test_fitness2(self): # Tutorial before Lecture set_uniconf({ "auditorium_size": [30, 30, 30], "group_size": [10, 20, 15] }) data = [ Lesson(time=1, lecture_name=(2, TUTORIAL), group=1, day=2, auditorium=2, faculty=1), Lesson(time=2, lecture_name=(2, LECTURE), group=1, day=2, auditorium=1, faculty=2), Lesson(time=3, lecture_name=(4, LAB), group=1, day=2, auditorium=0, faculty=3), ] s = Schedule(lessons=data).fitness self.assertEqual(s, config["penalty"])
def test_fitness3(self): # Two intersections - one extra lecture for professor & one extra # lecture for same group per time slot set_uniconf({ "auditorium_size": [30, 30, 30], "group_size": [10, 20, 15] }) data = [ Lesson(time=2, lecture_name=(2, TUTORIAL), group=2, day=2, auditorium=2, faculty=2), Lesson(time=2, lecture_name=(3, LECTURE), group=1, day=2, auditorium=1, faculty=2), Lesson(time=2, lecture_name=(4, LAB), group=1, day=2, auditorium=0, faculty=1), ] s = Schedule(lessons=data).fitness self.assertEqual(s, config['penalty'] * 2)
def test_fitness1(self): # One auditorium is small set_uniconf({ "auditorium_size": [10, 20, 15], "group_size": [100, 20, 15] }) data = [ Lesson(time=1, lecture_name=(2, 0), group=2, day=2, auditorium=2, faculty=1), Lesson(time=1, lecture_name=(3, 0), group=1, day=2, auditorium=1, faculty=2), Lesson(time=1, lecture_name=(4, 0), group=0, day=2, auditorium=0, faculty=3), ] s = Schedule(lessons=data).fitness self.assertEqual(s, config["penalty"])