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"])