0

I have been tasked with improving my company's rudimentary scheduling process and making it more data driven, efficient, and streamlined. As it stands, we currently simply sum per month, total hours needed for projects & compare this value to possible work hours * number of employees. We compare these results and determine if we need to bring on more help or not.

I would like to be a lot more precise in this process and so I began looking into optimization with resources such as the Stable Marriage Problem. Eventually, I stumbled onto Genetic Algorithms and Simulated Annealing from the Job-Shop Problem, because I believe my problem ends up being a little more complex than a multi-match marriage problem, but I could be wrong.

My basic problem is set up as an optimization task with many limiting criteria.

Workers: John, Jane, Dale, etc.
They all can have multiple roles too (John can be a Manager or a Laborer)

Projects: Project A, Project B, Project C, etc.
Projects have start and end dates.
Ideally, I have sub-start and end dates for different phases of the projects that I would like to limit with, but overall start/end date will do. These sub-dates include hours required for each role type (Manager 8 hours, Laborer 20 hours, etc.)

Hours: No more than 45 hours per employee.

My question is do I actually need to utilize GA or Simulated Annealing or is there a simpler process. Also, I haven't been able to find any pseudocode for either of these processes in R.

Thanks for any and all help and I'm happy to clarify for anyone if more details are necessary!

medavis6
  • 843
  • 10
  • 32

1 Answers1

2

You can try to model it as a Mixed Integer Program, using for example the lpSolve package. You'd have variables like john_manager_project_A_week_1 (number of hours John works on project A as a manager in week 1), which the solver is to determine, and linear constraints like

john_manager_project_A_week_1 + john_manager_project_B_week_1 + ... <= 45
john_manager_project_A_week_1 + jane_manager_project_A_week_1 + ... >= 8

This framework seems somewhat limited, but with some modeling tricks you can also express conditions like "John cannot work both as a manager and as a worker on project A in week 1".

Solving these problems is NP-hard, but solvers tend to be pretty good, and if you have only a few tens of people, projects and time slots it should be solvable. You can even have a linear goal function that is to be optimized (for example, replace "45" above by max_work_hours, and minimize that).

Falk Hüffner
  • 4,942
  • 19
  • 25