The data: Students which have varying availability at certain timestamps (hourly) throughout the week.
The challenge: Creating a schedule based on the data above, where a single faculty member can meet with each student once that week, without any overlap between students.
What I have tried so far
- Creating a filter that checks which students have the least availability and prioritizing them
- Distributing based on days where more/fewer students are available
However, none of my attempts even came close to what I need, and I struggle to understand the mathematics of it all. How can I best create such a scheduling tool above?
Create a bipartite graph with one vertex per student and one vertex per timestamp. A student is connected to a timestamp by an edge if and only if this student is available at that timestamp.
Then search for a maximum matching in this bipartite graph. This is also called the assignment problem, and can be solved for instance with the Hungarian algorithm.
Note that this makes the assumption that timestamps are discrete. This might not correspond to the reality. But it's still a good place to start.