Assignment 2: University Timetable Automation System
Due date: 28/10/24, 08:00
Background: At a university, creating an optimized timetable for lectures, lab sessions,
and tutorials is a time-consuming and challenging task. The process involves scheduling multiple classes across different departments, rooms, and times, while avoiding conflicts for students, lecturers, and rooms. Your task is to create a system that automates the timetable generation process. Problem Description: You need to design and implement a Python system that generates an optimal timetable for a university’s courses, lecturers, and students. The system should ensure that no conflicts occur, and the timetable is distributed evenly to avoid overcrowded schedules. Requirements: 1. Class Design: o Design classes for Course, Lecturer, Room, StudentGroup, and TimetableSlot. Course: Attributes should include course_code, course_name, lecturer, student_groups, duration, preferred_time_slots, etc. Lecturer: Attributes should include lecturer_id, name, courses, available_timeslots, etc. Room: Attributes should include room_id, capacity, available_timeslots, etc. StudentGroup: Attributes should include group_id, students, courses, etc. TimetableSlot: Attributes should include course, lecturer, room, start_time, and end_time. 2. Input Data: o The system should take the following input data: List of courses (with their respective duration, lecturer, and student groups). List of lecturers (with their respective available time slots and preferred times). List of rooms (with room capacities and available time slots). List of student groups (which courses they are enrolled in). 3. Constraints: o No Conflicts: Ensure that no student group, lecturer, or room is double- booked at the same time. o Room Capacity: Ensure that the room assigned to a class is large enough to accommodate all the students in the group. o Lecturer Preferences: Where possible, assign classes to lecturers based on their preferred time slots (e.g., a lecturer might prefer to teach between 9:00 AM and 2:00 PM). o Minimized Gaps: The system should minimize gaps in both lecturers' and students' timetables (i.e., avoid scheduling classes far apart unless necessary). o Max Workload: Ensure lecturers do not exceed a predefined maximum workload per day (e.g., 6 hours of teaching per day). 4. Scheduling Algorithm: o Implement an algorithm (such as backtracking, greedy, genetic algorithms, or simulated annealing) to assign courses to time slots while satisfying all constraints. o The system should aim to generate an optimal timetable, considering the constraints and preferences. 5. Output: o The system should output a detailed timetable for each course, lecturer, room, and student group, showing the assigned time slots. o If conflicts are unsolvable, the system should flag them and suggest potential manual fixes or relaxation of constraints. 6. Edge Cases: o Handle cases where there are more courses than available time slots and rooms. o Ensure that small student groups are not assigned to large rooms unnecessarily. o Handle overlapping courses or labs that require the same student group but must be scheduled in different slots. Example Input: Expected Output: A timetable for each course, lecturer, room, and student group showing when and where classes will be held, like this:
Extra Credit (Optional):
1. Implement a graphical user interface (GUI) that allows the university admin to input data (courses, lecturers, rooms, etc.) and visualize the generated timetable. 2. Allow the system to support changes in the middle of the semester (e.g., a lecturer becomes unavailable) and automatically reschedule the affected classes. 3. Implement a feature where users can export the timetable in various formats (PDF, CSV, etc.).