Esempio n. 1
0
def _scheduling_satisfiable(casename):
    students, sessions = _open_scheduling_case(casename)
    formula = lab.boolify_scheduling_problem(copy.deepcopy(students),
                                             copy.deepcopy(sessions))
    sched = lab.satisfying_assignment(formula)
    assert sched is not None

    unplaced_students = set(students)

    for var, val in sched.items():
        if val:
            student, session = var.split('_')

            assert student in unplaced_students, "Students should be assigned at most one session."
            unplaced_students.remove(student)

            assert student in students, "This is not a valid student."
            assert session in sessions, "This is not a valid session."

            assert session in students[
                student], "Student should be assigned a desired session."

            assert sessions[session] >= 1, "This session is over-capacity."
            sessions[session] -= 1

    assert not unplaced_students, "Some students were not placed into a section!"
Esempio n. 2
0
    def satisfiable(self, casename):
        students, sessions = self.opencase(casename)
        formula = lab.boolify_scheduling_problem(copy.deepcopy(students),
                                                 copy.deepcopy(sessions))
        sched = lab.satisfying_assignment(formula)
        self.assertIsNotNone(sched)

        unplaced_students = set(students)

        for var, val in sched.items():
            if val:
                student, session = var.split('_')

                self.assertIn(
                    student, unplaced_students,
                    "Students should be assigned at most one session.")
                unplaced_students.remove(student)

                self.assertIn(student, students,
                              "This is not a valid student.")
                self.assertIn(session, students[student],
                              "Student should be assigned a desired session.")

                self.assertIn(session, sessions,
                              "This is not a valid session.")
                self.assertTrue(sessions[session] >= 1,
                                "This session is over-capacity.")
                sessions[session] -= 1

        self.assertEqual(len(unplaced_students), 0)
Esempio n. 3
0
 def test_schedule(self):
     students, sessions = ({'Alice': {'basement', 'penthouse'},
                         'Bob': {'kitchen'},
                         'Charles': {'basement', 'kitchen'},
                         'Dana': {'kitchen', 'penthouse', 'basement'}},
                        {'basement': 1,
                         'kitchen': 2,
                         'penthouse': 4})
     cnf = lab.boolify_scheduling_problem(students, sessions)
     print(lab.satisfying_assignment(cnf))
Esempio n. 4
0
    def satisfiable(self, casename):
        students, sessions = self.opencase(casename)
        formula = lab.boolify_scheduling_problem(copy.deepcopy(students),
                                                 copy.deepcopy(sessions))
        sched = lab.satisfying_assignment(formula)
        self.assertIsNotNone(sched)

        unplaced_students = set(students)

        for var, val in sched.items():
            if val:
                student, session = var.split('_')

                self.assertIn(student, unplaced_students)
                unplaced_students.remove(student)

                self.assertIn(student, students)
                self.assertIn(session, students[student])

                self.assertIn(session, sessions)
                self.assertTrue(sessions[session] >= 1)
                sessions[session] -= 1

        self.assertEqual(len(unplaced_students), 0)
Esempio n. 5
0
 def unsatisfiable(self, casename):
     students, sessions = self.opencase(casename)
     sched = lab.satisfying_assignment(
         lab.boolify_scheduling_problem(copy.deepcopy(students),
                                             copy.deepcopy(sessions)))
     self.assertIsNone(sched)
Esempio n. 6
0
def _scheduling_unsatisfiable(casename):
    students, sessions = _open_scheduling_case(casename)
    sched = lab.satisfying_assignment(
        lab.boolify_scheduling_problem(copy.deepcopy(students),
                                       copy.deepcopy(sessions)))
    assert sched is None