For a recent event, Ganesh Ramakrishna asked me what advice I would give to supply chain modelers to help them maximize their impact.
It was a well-timed question.
I’ve been thinking about this while teaching: What makes a good model?1
Ian Wright’s recent LinkedIn post (and thoughtful comments from many experts) inspired an important question: How can good models stir conversations and thinking about different objectives and nuances in strategic models?
Also, in the back of my mind, as solver speeds have improved exponentially decade after decade, I’ve wondered: how modelers should use this extra solver horsepower?
Ganesh’s question (how can you build better supply chain models?) helped me combine these ideas. My short answer is to create more conflict2 in your models. In other words, model more trade-offs.
Modeling trade-offs is not new. However, as solver speeds have increased, I suspect engineers and analytics people tend to add more details to the models.
So, my longer answer is to not waste the extra solver horsepower by adding more details. Don’t use this speed to disaggregate customers and products or to model trivial parts of the supply chain. Instead, use the horsepower to create more conflict.
Here are some examples of modeling conflicts:
Model multiple objectives.
Creating multiple objectives obviously introduces conflict. But, in strategic studies, you don’t want to come up with a single weight for the objectives. Instead, you want to test a range of weights and build a trade-off curve.
To take advantage of this capability, you want to go beyond the traditional objectives of total cost, service, and number of facilities. The more creative you are with different objectives, the more you’ll capture hidden nuances and spur better conversations.
Some creative objectives that I’ve seen include total investment budget (to address capex concerns), excess capacity or flexibility (to address risk and robustness), number of changes (see below), cost just within a division (to address internal political issues), carbon emissions (for sustainability goals), or transportation versus manufacturing costs (to address concerns with data accuracy).
There are many more possibilities for additional objectives, and some may be difficult to set up. Be creative.
Use hierarchical optimization
Hierarchical optimization is a close cousin of multi-objective. I’m defining this as running different objectives in sequence, allowing the earlier objectives to be relaxed.
For example, in the picture below, the first objective is to minimize cost. That gives a map with some overlapping lines. The second objective is to maximize service (get customers as close to warehouses as possible). We allow the total cost to increase by up to 0.5% (you can pick whatever number you want). In this case, the second objective cleaned up the map.
Like multi-objective optimization, hierarchical optimization can use any additional objectives. It works best when you have clearly defined primary and secondary goals.
In addition, I like hierarchical optimization because it emulates how most managers think. There are always multiple objectives, and managers are willing to give up a small amount of a primary objective (for example, 1% higher costs) to get more of a secondary objective (for example, 20% better service).
I’ve often thought that if you want to automate a decision with optimization, you should consider hierarchical optimization to make it more human-like.
Set up a binary variable to indicate if a decision is a change.
About twenty years ago, I heard a strategic network design talk by Henrik Danford-Klein. In the talk, he mentioned that the optimization had suggested 100s of changes to save money. But, 20% of those changes captured 80% of the savings. This is another application of the 80/20 rule.
This has been hard to model directly. But with the increase in solver speeds, the time may be now (or soon).
Here is how you model it: You add a binary (0 or 1) variable to each “change” that your model could consider. This could be whether you add a new site, make or store a product at a new location, serve a customer from a different site, or anything else.
Then, with this new variable, you make this another objective (trade-off savings with the number of changes), add it to the hierarchical optimization (minimize changes while keeping costs within 2% of optimal), or add a constraint (give me the best ten changes).
This is not easy to set up— you have to define what counts as a change and there will likely be many. You may even need categories for big and small changes. And the run times will grow— you are adding a lot of binary variables. But, the time may be near on this3.
Other ideas:
In addition, there are other conflicts you can create by looking at adding time-phased transition variables (how do we get from the current state to the future state like Walmart did), linking decisions together (if we add capacity here, we have to remove capacity somewhere else), modeling economies of scale (if we get enough volume, the costs go down), and many others.
Use your solver horsepower wisely and create more conflict.
If you ask my students, I’m probably erring on the side of covering too much! But I’m enjoying the class too much to hold back. When I get some breathing room, I have some posts on all my ‘hot takes’ 🔥I’ve been sharing.
I borrowed this idea from one of my favorite books on modeling, Serious Play. Serious Play was written about the models that businesses build, in general. However, it has many lessons for supply chain models. Here is a link to a review I did in 2013.
If any of my students are reading this, this would be a fun research area to explore. I realized that the JADE case from our book could be transformed to include this.
Create more conflicts and run as many scenarios and strategies to make use of the new efficiency gains. I have always thought running one perfect model with all real world constraints is not as great as running models with multiple trade-offs and discovering the inflection points of these trade-offs via scenarios.