I initially built this tool to help schedule our school's Endersession, where students can choose from a variety of activities to do over a week. The goal was to enable students to indicate preferences both for what they wanted to do and what friends they hoped to be with, and then use a weighted matching algorithm to try to satisfy as many of those preferences as possible.
The concept is that if you can express what your preferences are for a schedule in terms of a scoring system, we will be able to use a scoring system to optimize a schedule, first trying a variety of heuristics and then using genetic algorithms to try to broaden the exploration of the solution space.
We use Worker Threads to do the heavy lifting so that we can run multiple threaded trials in parallel in the browser. Depending on the size of the schedule, the user can run a schedule quickly or leave it exploring solutions for a longer period of time.
The tool also can work for peer-only assignments, such as assigning hotel rooms or cabins for a school trip based on weighted peer preferences.
We can handle other constraints like peers who can't be together by simply assigning negative scores.