|
|
|
|
|
by TimeWeSp
1113 days ago
|
|
Oh, you're going way farther in optimizing the schedule, than I know how to collect data to do. If I could collect detailed info about how each oncall rotation members feels about every single shift, I could use a model like what you describe. I remember these models from school... But that was a long time ago. I'd have a lot of reading to do. What I built now, is pretty simple, but I think it solves the problem pretty elegantly:
* Each user has a set of credits. You get credits when you get a shift assigned. You pay credits to other people who are assigned shifts.
* You can self-assign shifts (which makes you earn credits).
* You can bid credits to avoid getting scheduled for certain dates/holidays(e.g. Memorial Day)/importantEvents(e.g. Super Bowl Sunday).
* Shifts which nobody has self-assigned are auto-allocated up to a given time horizon in the future. The auto-allocation of the next shift, assigns it to the person with the lowest value of "currentCredits + bidsToAvoidThisShift * rotationMemberCount / 2".
- The exact algorithm isn't that important. But what it does is: it gives a shift to the person with the least credits (and they'll then get a bunch of credits), but it avoids giving shifts to people who have bid to avoid that specific shift. The real value is that there is an algorithm doing the assigning. That makes this feel FAIR to all involved. If you didn't bid to avoid working on Christmas, don't complain about working then. But you'll also get more credits to work on Christmas, because you get everything that others bid to avoid working on Christmas (which means you will work fewer shifts in total over the year). |
|
> The real value is that there is an algorithm doing the assigning. That makes this feel FAIR to all involved.
You're right, that is very important. I think convincing people the schedule is fair is the hardest part, and indeed having a decision process everyone understands makes it easier.