- Courses: (Required) CSV data with following headers
Section;Course_Code;Course_Name;Number_of_Students;Course_Environment;T+U;AKTS;Class;Depertmant;Lecturer
- Classroom: (Required) CSV data with following headers
floor_number;classroom_id;capacity;available_days
- Busy: (Required) CSV data with following headers
Lecturer;Busy_Day
- Conflict: (Required) CSV data with following headers
Department1;Course_Code1;Department2;Course_Code2
- Mandatory: (Required) CSV data with following headers
Course_Code
- Reserved: (Required) CSV data with following headers
Department;Course_Code;Day;Starting_Time
- Split: (Required) CSV data with following headers
Department;Course_Code;Half_Duration
- External: (Required) CSV data with following headers
Section;Course_Code;Course_Name;Number_of_Students;Course_Environment;T+U;AKTS;Class;Department;Lecturer;Starting_Time;Day
- Schedule: CSV data with following headers
course_code,day,time,duration,classrooms,class,department,course_name
Assume we have two states, the soft iteration limit defined as iterSoftLimit and the upper iteration limit defined as iterUpperLimit.
stateCount = 2
iterSoftLimit = 2000
iterUpperLimit = iterSoftLimit + 4999
- 0 - iterSoftLimit: Neighbouring compulsory courses conflict probabilistically (State:0) (Ideal case)
- iterSoftLimit - iterUpperLimit: Neighbouring compulsory courses conflict (State:1) (Worst case)
Starting Slot of the week day is 9:30.
If a department has 11 or more 4th class elective courses active, then that department is marked as congested and some special treatments are applied...
If a course belongs to a congested department and is of 4th class, then that course is placed at 8:30.
If a course already exists in the morning hours, then we try to place the remaining courses in the afternoon...
If the course's duration is 3 hours, then it is placed at 14:30; Otherwise 13:30 and 15:30 if necessary.
- Err00 - Failed to open file - File not found
- Err01 - Failed to read from file
- Err02 - Failed to open file - File not found - Could not create file
- Err03 - Failed to write to file
- Err04 - Invalid input String formatting error in Reserved data
- Err05 - Invalid input data error in Reserved data
- Err06 - Err04 or Err05 or both
- Err07 - Invalid input String formatting error in T+U Course data
- Err08 - Invalid iteration state - Malleable Constraints
We try to keep One day of the Week free of Compulsory courses whenever possible
- State 0: Placement Probability starts from 10% and ends at 60% by the next state transition
- State 1: Placement Probability is always 100% as State 1 is the Worst case
We try to limit the number of courses existing in a day to distribute the load across the week
- If congested and Compulsory, 4
- If congested and Elective, 5
- Otherwise 3
congested means that a department has 11 or more elective courses in its 4th year.
Additionally, we try to spread out the courses across the week evenly by having a soft AKTS limit for each day that is ignored when it is exceeded on all days of the week.
Data classes are located under pkg/model/
Resource files are located under res/private/
I/O handlers are located under internal/csvio/
Scheduler related source files are located under internal/scheduler/
CLI Main executable is located under cmd/cli/
Server Main executable and realted handlers are located under cmd/server/
Step - 1: Read classrooms csv
Step - 2: Read courses csv and related restriction csv(s)
Step - 3: Repeat until valid schedule
Step - 4: Initialize classrooms oriented schedule
Step - 5: Assign stateful course properties and shuffle around courses vector
Step - 6: Initialize empty weekly schedule
Step - 7: Insert reserved courses
Step - 8: Insert courses
Step - 9: Check for schedule validity
Step - 10: Break out if schedule is valid
Step - 11: Update optimal schedule
Step - 11: Export schedule to disk