Artificial Intelligence and Automatic Scheduling
Scheduling can get quite complicated. It is fundamentally programming to find a solution given constraints. One approach would be to use MiniZinc, and here is a scheduling example. You can use other plain programming approaches such as Python and so on, but Minizinc is highly optimized and might well reward time invested in learning by finding a better solution more quickly.