Personal Timetabling – Bachelor’s thesis

Abstract

Despite all the advancements in Artificial Intelligence, we still do not have a broadly available application for automated scheduling of personal activities. The main difficulty in creating such an application is satisfying user’s diverse expectations about time organization. In this study we focused on creating a tool that can help users with organizing their time. We designed a model for describing personal activities with user preferences. We formulated scheduling of personal activities as an optimization problem for which we designed and implemented a solving algorithm, aiming to schedule activities with precision of seconds.

We created a prototype of web-calendar application powered by this model and an algorithm which we designed with the focus on ability to clearly display user’s time and easily insert activities for automated scheduling. The web application is backed by RESTful API which enables implementing application on various platforms.

Preview

Personal Timetabling - adding new request Personal Timetabling - solving Personal Timetabling - example calendar

About

How it works

Instead of placing tasks to fixed time as you can do in classical calendar, here you have to in what time window you want to do that task. This information is then available for all tasks in calendar and so when you want to add new one, it was searched how other tasks can be reorganized in order to make time for the new one. During search it is trying to maintain time of already scheduled tasks.

It uses variation of local search techniques used in artificial intelligence field.

Technologies

I wanted to use the right technology for every part of the software. So user interface is done purelt in JavaScript with use of Backbone.js library. Server interface was build in Ruby on Rails and core algorithms was written in Java. Connection of these technolgies to work together was quite a challenging but I managed to make it.

Download

Personal Timetabling thesis (PDF, in czech)

Project on GitHub