Generates a timetable for study sessions based on current modules using a genetic algorithm.
The problem statement for this project was as follows:
Design a program that will generate a valid timetable of study sessions given certain, variable constraints.
When I began researching ways of addressing the timetabling problem, I came across Genetic Algorithms as a viable solution. I began reading several sources, such as academic papers, on this topic while preparing to start this project. This became my first SLP (Structured-Learning Project). The project centered around using Genetic Algorithms to solve constraint-based scheduling/timetabling problems.
This program takes a set of modules, which each have required lectures and study hours, as input. It also takes the start time of a working day, and the number of (hour-long) periods which can be assigned events.
First, the program removes time-slots that would clash with lectures. Then, it generates a list of study-sessions for each module.
The genetic algorithm creates a population of timetables ranked by fitness. The fitness of the timetable is measured by the number of constraints broken and the number of times a constraint is broken.
Currently, the program outputs the final solution to the console. I plan to add a GUI for this program to make setup and output more convenient and visual. I plan to output an .ics file for the study sessions, so you can add them directly to your calendar app of choice.
Windows, OS X & Linux:
Install Java (1.8 or later).
This project was designed in IntelliJ.
Alternatively, you can copy the source code files into another IDE and compile them.
Note: Will need JavaFX for GUI when it is completed.
Note: CommandLineIO package uses ANSI escape codes that are more linux/unix friendly -> though an OS check if performed
- Additional constraints: preferences for time-of-day (morning, day, evening); even distribution of work per day
- Full Command Line input/output with coloured input/output (through ANSI Escape Codes).
- Additional constraints such as preferences for time-of-day (morning/day/evening)
- .ics export file format for study sessions
- Grouping of study sessions
- Adding preference for study sessions to be placed as close as possible to the lecture
- Multiple types of study sessions: lecture review, exam preparation, etc.
- 0.1.0
- First release version - user-defined inputs, command line I/O packaged and completed, code modularised, additional constraints added.
- 0.0.1
- Working first version - console based output, hard-coded inputs.
Evan Spendlove
Distributed under the MIT license. See LICENSE
for more information.
https://github.com/evanSpendlove/studyTimetabler
- Fork it (https://github.com/evanSpendlove/studyTimetabler/fork)
- Create your feature branch (
git checkout -b feature/fooBar
) - Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request