I would like to create an algorithm that advises a student when they should work on certain assignments given the expected time each assignment will take, and the due date of each assignment.
Say that for a students' weekly schedule, there are class times and events that must be attended. With the remaining time slots in the week, how can I assign times to work on each assignment so that the recommended assignment time is fulfilled before the due date.
This is very similar to single-machine scheduling problems, and usually a greedy algorithm of closest-due-date-first would work, but I want to implement constraints based on human factors. For example: don't work on one assignment for more than 2 hours in a row, don't schedule a study time right after a class, etc.
How would I go about including these human factor constraints within my algorithm?