Is there a market-based solution to this human preference problem?

First I’ll describe the system. Then I’ll describe what I’d like a market to do for me.

Each day is divided into three shifts: night (midnight-8am), day (8am-4pm), evening (4pm-midnight). There is a pool of about 100 workers to fill these shifts (one worker per shift), but shift-filling is not their actual job. Filling these shifts is sort of obligatory volunteer work, if you will, on top of their normal daily activities. But everybody’s got to pitch in and take shifts, or the world ends. Participation is enforced via sufficiently strong stink-eye from co-workers and bosses.

It’s harder to get people to fill weekend shifts and night shifts then it is to get them to fill evening shifts. Day shifts are less popular than evening shifts because there is more to do (interacting with outside companies, etc.) The point is: each person has their favorite shifts and their least favorite shifts. It is not a good assumption that everyone has the same preference space. (Night owls like night shifts. 60-year-olds like day shifts (since they’re up early anyway), etc.)

Assume that Monday-Thursday evening shifts are the most popular, generally. These get signed up for quickly and well in advance. For less popular shifts, it tougher to get people to take them. One solution is to make the shifts “worth” different amounts (with regard to the weight you’re pulling.) That is, you could make a night shift worth twice as much as an evening shift, so that taking one gets you twice the street cred. You could optimize the credit you receive for the different shifts such that all shifts become equally popular, given a particular pool of workers. If you asked everyone to deliver to you their preference space, you could even solve for an optimal set of credit values.

My question: Is there a way to set up a market system to achieve this dynamically (namely, to make each shift as equally fillable as possible).

I don’t know if this market would have the concept of money, or if there would be actual real-time trading, or if you could have “shift debt”, or if you could profit from transactions, etc. But, I feel like one could construct a dynamic system wherein people are automatically maximizing personal and global utility through the action of the market. I haven’t yet come up with anything that actually works, though. (Inflation is a cute outcome of everything I’ve tried.)

This is quite possible very underspecified, partly because many of the details don’t matter, so long as it becomes equally easy to get any given shift filled. But, it may become obvious that I have to set additional requirements for us to get anywhere, in which case I will.

You can only get a definite, single answer to this problem if the preferences of individual workers stay constant and knowable, and your workforce is similarly constant. From there, it’s easy. Otherwise, it’s impossible to truly optimize the situation, since changing preferences (“Can’t do it this weekend, my brother’s wedding!” etc) will throw it off.

Which is why I’m looking for a market, which can adjust with people’s adjusting preferences. A fixed-credit system would require what you state, but a dynamic system can hopefully be, well, dynamic. (“Can’t do it this weekend. Oh, you’ll trade that shift to me for a million points?! Well, I don’t really like my brother that much.”)

ETA: Can you present a market solution even given a constant-worker/constant-preference situation? That would be a pretty good start.

Two ideas:

What about queuing and a market for time? For example, people who really care what shift they get for the next work period will stand in line to get the shift they want. People who don’t care will get stuck with the undesirable shifts.

Or, what about varying the lengths of shifts? For example, I will work 2am to 4am to avoid having a long shift, someone else will work a long shift to avoid working nights?

The initial set-up you’re describing sounds a lot like restaurant work. Based on my experience in the field, I think one variable you’re overlooking is seniority. Where I worked, the guys who’d been there the longest got the first choice of shifts: day for family guys, night for party animals. One of the advantages of staying at a restaurant for a long time was the opportunity to get better shifts. After all, every time a new guy would be hired, there was a chance to push less desirable shifts onto him. Experience and loyalty result in privileges (in this context, at least), and I’m not sure the workers in your system would be willing to forgo these.

One simple dynamic system is auctioning off the time slots. This is the simplest way to come close to optimization, but it requires that you actually have some identifiable currency to “sell” the time slots off for.
Imagine a system where you pay people “points” for taking given time slots. If no one takes the points you are offering, they ramp up, and continue to increase until you’ve got a taker. So M-Th would sell quickly, possibly even for zero points, by people who want those slots. Weekends would sell for more points, until you overcome people’s preferences. That way, Weekend Wedding Guy eventually gets offered enough points that he comes in - he gets to a million points at some point.

Sure, if the workers’ preferences are definite and knowable, then this is a fairly simple calculus problem.

The seniority idea doesn’t work here, though I agree that it is a good real-world solution in general. For this problem, everyone essentially begins employment at the same time, and the shift-filling need only lasts for a few years.

Harriet the Spry’s note made me realize that I didn’t specify an aspect of the system which could be canned if needed, but it’s nice to have. The shift-filling/shift-taking cycle is continuous rather than periodic. The calendar will show that shifts are mostly assigned for the next week or so, which a gap or two, and then there’s a smattering of slots taken out for several months. (Presumably those are pickier folks with well-known schedules.) People can sign up as they please and, perhaps in the market, trade up as they please, with no rigid time schedule for the process. Anyway, this fluidity would be nice to keep, but having a “sign-up period” is not out of the question. (The fluidity is nice, too, for out-of-town workers who must fly in to take their shifts.)

Managers are responsible for assigning shifts for individual workers. Workers are responsible to work assigned shifts or seek alternative employment. There should be a reasonable amount of accomodation for occasional employee needs. A rotating schedule is likely the only fair way to do this unless employee preferences are evenly spread among the shifts, which I assume is not.

Am I missing something here? Was shiftwork not part of the original employment agreement?

Yes, I alluded to this in the (albeit lengthy) OP. They aren’t knowable, though, which is the problem. (They could be knowable if one polled everyone, but that’s not what I’m after.)

I should add: This problem is academic. Shift work has been around for ages, and there are many ways of approaching it, and that’s fine. But this is a math/economics problem, not a managerial problem. Thus, a complete rescoping of the shift-filling approach isn’t interesting (in this thread, at least.) In fact, the solution here need not even be particularly practical, just mathematically sound.

Right, the gut of the problem is that we don’t know what the workers’ preferences are. So, the solution will be something that approximates what their preferences are. Auctioning does that in a crude but effective way.

I don’t particularly advocate this idea, but I thought I should bring it up - what if you randomly assigned shifts, and then let people trade as they wanted?

On a separate note, I think any sort of point system would work better if points were positive - that is, people get some points every week (perhaps even different numbers of points based on seniority if you want to work that angle in) and each time slot is “auctioned” off. People can buy a time slot for a certain number of points, or they can buy themselves out of a time slot for a certain number of points. The drawback is that in the end, you’ll probably have to cash unused points for something tangible (e.g. money, PTO).

I have a lot of experience with designing & implementing automated scheduling of shiftwork with very complex schedule structuring rules & very complex worker preference functions across thousands of workers, using seniority as the bidding currency.

What you describe is missing one key component, the currency. By definition, it has to be something the workers possess, value, and can trade with the house during teh scheduling process. You can sometimes improve the game if the currency can be traded between workers in-game, and optionally, out-of-game.

There have been experiments done by other organizations in that industry wherein seniority as currency was replaced by a quality-of-life metric attached to each shift and workers were issued X currency units to consume over the coming year. In some cases X was slightly biased for seniroty, worker quality, etc. Trading within the bidding system was prohibited, or at least didn’t result is tradable currency units.

Generally this system was met with significant dissatisfaction because inevitably the quality-of-life metric chosen will undervalue some folks’ interests and overvalue others’ interests. e.g. it’s great to be the guy who likes the 3am-10am shift because those are officially sucky & so he can spend all his points on desired days off.

If seniority is not appropriate for your situation, the next best thing is to issue currency, let them bid as you auction off the shifts, and let inflation fall where it may. That also assumes you have the power to compel attendance at undesired & un-bid-for shifts.

A critical requirement to controlling inflation is to have bidding by period, eg monthly, rather than a continuous rolling process. All scrip issued for January is useless for February, etc. You can make periods as short as a week (administratively difficult), or as long as 3 months. Practical experience has pretty well settled on either 4 calendar weeks or 1 calendar month as the best options.

Do NOT make the mistake of assuming the individuals, much less the group, have/has a stable preference function. Don’t even make the mistake of thinking the preference function is knowable; it isn’t. The group function mapped to the current shift schedule is discoverable by executing the auction, but don’t look for deeper meaning or predictive power. Sorta like quantum uncertainty, deeper meaning just ain’t there.

Your bit about it being an academic problem wasn’t there when I started writing the post above.

As an FYI …

The particular method we used was to provide the workers with a wide variety of parametric functions used to describe various aspects of the shifts. Each worker would attach weights & parameters to those functions they cared about. In that way they attempted to describe their personal preference function. This function changed from month to month, but any one worker usually had key recurring themes.

Across all the workers we clearly saw that it takes all kinds to make a horse race. Which was the original premise of creating the process; that by granting enough power & flexibility in expressing preferences, we could improve overall staff quality of life by maximizing the fit of schedule to worker.
The shifts and the preference functions were dropped into a standard linear optimizer & the whole thing stewed until complete. The overridingly important function was to assign all the work to somebody (less a pre-approved slop factor), and after that each workers’ preference function was applied in seniorty order to assign work to workers. I say “in seniorty order”, but that’s only in a conceptual sense; the whole problem was stewed at once, with workers’ preference function getting an additional rule to cause seniorty to be respected.

It was some pretty heavy duty math & some serious CPU heating took place.

Care had to be used in designing the available parametric functions to ensure a convex preference function was guaranteed.
What I don’t understand about your OP is you appear want a mechanism that assigns work without explicilty or implicitly polling the workers. That seems like a square circle to me.

Can you explain what you’re after one more time; maybe my practical experience is preventing me from seeing the cystalline thought experiment you’re trying to achieve.

It’s not terribly crystalline, I’ll admit.

I’d like the system to learn the preferences of the workers through their actions in the market. A dumb analogy would be the actual stock market: I could ask everyone for their probability distribution functions for tomorrow’s prices of commodity X and commodity Y, and then I could optimize prices to sell these… or I could just open a market, and people’s p.d.f.'s would steer the prices on their own. If there are ways to increase global expectation, trades will occur, until eventually everyone stays pat.

This all started from a situation in which night/day/evening shifts were assigned static values of 3/1/2 (+1 for weekend). One could optimize these point values by polling (although that situation allows for gaming the system, which would be nice to avoid), or one could open a market (??) and let the preferences speak for themselves through trade or whatnot.

The auction idea mentioned first by WoodenTaco is on the right track, I think, although initially I was envisioning a system which involved currency, shift purchase, and shift trade. One weird aspect of the system is that the commodities in question are liabilities, not assets. That might just be a question of shifting the zero point of the problem.

Here’s a (broken) train of thought, to maybe give you an idea of where I’m trying to get. Make every shift worth 100 units, and give everyone 1000 units of purchasing power. People could spend all their dough to buy their 10 favorite shifts, or they could hang on to their cash. I decide that I don’t really want next Tuesday(night), and I’ll get rid of it for 8 units if someone likes it, so I offer it up to the market. Alternately, I’d rather take Monday(day), so I offer to buy that for 14 units. (Perhaps the seller gets profit here – maybe I buy it under the condition that I only get 10 of the points for me, and 4 of the points go to the seller.) Or something.

I think any solution that has currency will have a subtly (or not-so-subtly) different type of currency than one is used to. (Perhaps one can’t have a debt, or else that makes shifts go unfilled. Or perhaps inflation breaks things, so the currency is self-normalizing based on global assets.)

I think you have it backwards. Instead of getting people to pay units to get the shifts they want, pay them units to take the shifts they don’t want. It’s a subtle difference, but behaviorally and psychologically, it discourages inflation as people compete like crazy for time slots. Also, then you can make the currency more simple - it can just be the wages that the employer pays for a given time slot.

Why not just use a good old fashioned shift differential? You get paid an extra X% to work at night and Y% to work weekends. Tweak X and Y a bit to even out peoples’ preferences, and voila.

I think they’re equivalent, up to a minus sign. The missing bit in the above quote (that the market is to fill in) is how much to pay them for the time slots.

Because I’m interested in the academic question of whether a market can be used here to do the tweaking. See post #9.

Not psychologically, oddly enough. But for the most part, you are right.

Yeah. What’s wrong with auctioning to do so?

It seems to me that this should be simple. Start off with everyone randomly assigned shifts. Then, let people trade shifts as they will. They might do this via money: “I’ll pay you $5 to take my Monday morning shift”. They may do it via other valuables: “I’ll give you a cow if you take my Monday morning shift”. If nothing else is available, they may even do it via other shifts: “I’ll take your Tuesday afternoon and Thursday night shifts if you take my Monday morning shift”. Assuming enough time is available for trades before the time the shift has to be filled, and assuming that everyone can communicate with everyone else, what more needs to be done?