I want to write a scheduling algorithm for the following scenario:
There is a set of tasks to complete, each one with a due date, difficulty (easy, normal, hard) and progress on the task. The idea is that the user specifies the amount of daily hours available to work on tasks, so the algorithm can create a weekly schedule so the user can work in the tasks that require most attention, scheduled within the interval of hours (e.g. from 9:00 AM to 1:00 PM) the user decides. I have thought to require the user to specificate an approximate amount of time it needs to be used to complete each of the tasks.
The criteria would be priorizing the tasks with the nearest due date, highest difficulty and lowest progress first, then go for the tasks with nearest due date, highest difficulty and medium progress afterwards and so on.
What came to my mind was to create a function to calculate the value of a specific task, the higher the value, the more importance it has. With that in mind, sort all tasks by due date and by this calculated value using some greedy technique, but the issue here is what amount of time to dedicate on each task per day.
What kind of algorithm would this be? Is there any solution or book reference?