Wolfson Scheduler

by Botos Csabi
[code] [demo]

The Wolfson Scheduler is a tool developed to help the colleges organize rowing outings. The scheduler helps by drafting the weekly schedule of outings, accommodating the preferences and skill levels of the rowers, and the scheduling policies of the coaches and captains. This project is open-source and available on GitHub. The demo works through the interface of Google Sheets, meaning that no installation or programming knowledge is required to use it.

How to use?

How does it work?

The scheduler works by utilizing the power of parallelism. For every outing we have a set of boats, and a set of rowers (let's assume that everyone is available for simplicity). In the first stage, the scheduler enumerates all possible ways to assign rowers to boats per outing. Followed by that, the weekly schedules are generated by combining the possible assignments for each outing. Once a weekly schedule is ready, the scheduler calculates a weighted score for it, where preferences of the rowers and the coaches are taken into account. In our example the scores (white is less favourable, green is more favourable) are just randomly assigned, but in reality one can optimize for lowest variance of skill levels in each boat, least number of overassignments, etc. The evaluation scheme is fairly flexible, and can be adjusted to the needs of the college. Finally, the scheduler ranks every evaluated weekly schedule and returns the best one.

Once we have a wide population of scored weekly schedules, we can easily rank them, and select the best one. Depending on the preferences and the given circumstances (e.g which people were available, which boats were available, etc.), we will have a different distribution of scores. An example distribution of scores generated with the scheduler is shown in the figure below (left). As we can see, the distribution is not uniform, and only with very low frequency we get a very good schedule. However, we can easily generate some more scores by making small adjustments around the best performing schedule. This is a very simple and effective way to improve the schedule under 100 iterations (right).

The Wolfson Scheduler is a very simple tool, however the success of it lies in the efficiency. From this small example we can see that the number of possible combinations grows rapidly. Namely, if we have $N$ number of outings and $K$ number of combination for each day, then the total number of weekly schedules is $K^N$. While the problem grows exponentially with the number of outings, the point of this visual aid is to show that the evaluation has a very neat structure that we can exploit. When we formalize the assignemnts and evaluations as matrix operations, we can use the parallelism of GPUs to speed up the computation. This is the main idea behind the Wolfson Scheduler, because we can trade off not using a more sophisticated optimization algorithm, with brute force evaluation of a large portion of the possible schedules. After some extensive stress-testing on a customer grade GPU (RTX 4090 - with 24GB of VRAM), I have gathered the optimal memory-usage and performance characteristics of the scheduler. These results are illustrated below: the baseline of the performance under different scenarios, peaking at 4.5 Billion $\frac{\textrm{schedule}}{\textrm{sec}}$:

The wholesome stuff...

This project was made out of pure fun, as it was a breath of fresh air from the AI research everyone is doing these days. I hope this can help improve the quality of the rowing outings, and make the lives of the captains and coaches easier. There's a lot of room for improvement, and I hope that this project will inspire others to contribute to it. Also, I can just imagine that there's a hint of a possibility that this project can be used for other purposes as well - if you happen to know any, get in touch. Finally, it goes without saying, this project would not have been possible without the support of Ms. G. B. Hanna, the discussions with Peter Koepernik and the tremendous feedback from:

Mantas Drelingas


Ben Hardin


Rory Copus

Head Coach