Creating environment friendly provide chains is among the biggest challenges of the 2020s—and never simply due to the disruptions led to by the COVID-19 pandemic. Provide chains had been strained earlier than the pandemic on account of international bottlenecks and shortages in labor and gear. To maintain up with demand, market gamers should quickly modernize enterprise processes via digitization and clever planning.
My profession as a developer and knowledge science marketing consultant is concentrated on heavy trade: rail, mining, oil and fuel, transport, and postal logistics. All of those sectors have been tremendously impacted by provide chain points over these previous few years. On this piece, I discover how mathematical optimization modeling and Python can resolve a core problem within the coal mining trade: satisfying personalized demand and maximizing revenue via product mixing.
An Optimization Strategy for the Fashionable Provide Chain
Within the typical provide chain state of affairs, a provider delivers a selected completed product to a buyer. In our instance, to perform this, a provider should:
- Collect the mandatory parts from a number of supply places (e.g., manufacturing websites, warehouses).
- Mix the parts, executing a selected process to create a completed good. In a coal provide chain, that is known as product mixing.
- Ship the completed product to a single goal location (e.g., the shopper’s website).
Finished proper, product mixing permits the provider to maximise worth by leveraging trade-offs between buyer wants and the provision chain. Mathematical optimization modeling is the perfect answer for addressing product mixing together with logistical challenges similar to scheduling, planning, packing, and routing.
A graph theoretical strategy, like community circulate optimization, works effectively for challenges with a transparent restricted scope (e.g., asking Google Maps how you can get from A to B). However to deal with extra intricate challenges that affect overlapping points of the provision chain (e.g., product mixing), mixed-integer programming is a strong framework. Quick, well-researched, and established, mixed-integer programming permits customers to handle the overwhelming majority of scheduling, planning, and routing points.
To mannequin and remedy provide chain issues, I like to recommend utilizing Python and its open-source libraries on account of their robust optimization communities.
Product Mixing in a Coal Provide Chain
For instance of product mixing, let’s take into account a coal provide chain that includes a number of mines and produces quite a lot of coal parts. Sometimes, these parts must be routed to seaports. To maintain our instance easy, we are going to connect with only one seaport through a rail community that additionally hyperlinks the mines.
We’ll use the next phrases:
Element |
A element is a uncooked manufacturing merchandise (e.g., a kind of coal), sourced at a selected location. |
Product |
A product is a completed good, demanded and outlined by a buyer, sometimes containing a mix of parts and falling inside a said high quality vary. |
Mixing |
Mixing is the combining of parts to type a product, both on the goal location (sometimes, the shopper’s vessel) or in some unspecified time in the future within the provide chain. |
Spec Assay |
A specification, or spec, assay is the measurement of a element property (e.g., moisture content material). Sometimes, engineers carry out about 20 to 100 assays, every of which assessments a unique property of the coal. |
Coal parts retrieved from mines are transported by rail to a port, with the shopper vessel as the ultimate vacation spot. Relying on the designated port’s berthing schedule or different circumstances, non permanent storage of the parts at a stockpile could also be mandatory. On the port, the prepare will both deposit the load onto a stockpile or unload it immediately onto the shopper vessel (what we name a direct hit).
Parts are saved at mines and seaports. Mines are usually established in distant places the place cupboard space is reasonable and plentiful. Ports, then again, exist in industrial areas that normally have restricted house, making port stockpiles costly to make use of.
Modeling Particulars
Our hypothetical buyer has demanded product blends that consist of various parts. These blends should conform to the related mineral property requirements, as outlined by the shopper (e.g., CSR worth). As an instance how this mannequin could be constructed, let’s say that now we have three mines that produce seven parts, as follows:
Mine A |
Produces parts A1, A2, A3. |
Mine B |
Produces parts B1, B2. |
Mine C |
Produces parts C1, C4. |
The letter in a element’s identify signifies the element’s supply mine (e.g., element A3 was sourced at Mine A). Let’s agree that parts that share a quantity are comparable and as such, we might deal with them equivalently: For instance, A1, B1, and C1 are primarily the identical sort of coal.
All parts are transported by rail to the port, the place we will both carry out a direct hit or deposit every element at an appropriate stockpile. House limitations might prohibit us from storing parts individually. As such, when mixing a product, we might not have entry to every element individually and will have to extract a number of parts from a single stockpile concurrently.
Now, let’s talk about the mixing guidelines that clients sometimes demand for his or her merchandise.
Product Mixing Guidelines
Clients routinely ask for a mix of parts per customer-specific guidelines on each how a mix could also be carried out and which spec assays are mandatory. Such guidelines fall into two classes, element mixing guidelines and spec mixing guidelines.
Description |
Instance |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Element Mixing Guidelines |
The proportion of every element that composes a product is outlined as a ratio or share of the entire. |
A product stockpile (aka blended stockpile) with the next breakdown:
|
|||||||||
Spec Mixing Guidelines |
Worth boundaries for a product are established for every outlined product property. Product properties are measured by spec assay. Values embody:
|
The product in our earlier instance could be accepted with out penalty if:
|
Discover that, sometimes, the deviation penalty quantity will increase as a linear operate because the boundary violation grows:
The optimization of mixing contains trade-offs between accepting penalties for spec mixing and the provision of parts.
When making a product mixing mannequin, we should select between totally different extraction sorts. For mixing, common extraction is the commonest extraction sort. In common extraction, we mannequin based mostly on an assumption that each one parts within the stockpile are totally blended collectively. Layered extraction, the place we mannequin utilizing a last-in, first-out rule, is an alternative choice to utilizing common extraction:
Common Extraction |
|
Layered Extraction |
|
The concept of layered extraction could also be interesting, because it intently simulates the truth of the storing logistics at most stockpiles. Nevertheless, from a mathematical modeling perspective, common extraction is most well-liked for computational causes. The choice to make use of layered extraction ought to be fastidiously evaluated by enterprise professionals and engineers, in order to keep away from introducing pointless problems right into a modeling strategy.
When utilizing common extraction, the proportions of extracted parts to at least one one other are an identical to these of the unextracted parts. For instance, common extraction says that an extraction from stockpile X containing 75% of element A3 and 25% of element C4 incorporates the identical parts and the identical proportions as stockpile X in its entirety.
When layered extraction is used, the proportions of extracted parts to at least one one other are not often, if ever, an identical to these of the unextracted parts. Layered extraction says that, for instance, an extraction from stockpile X wouldn’t essentially comprise the identical parts as stockpile X in its entirety, nor the identical proportions as stockpile X. It is because we’d be extracting no matter element(s) are on the high of the stockpile (last-in, first-out).
The inconsistent nature of a layered extraction makes it troublesome to mannequin loading variables. Due to this fact, common extraction, which avoids advanced interdependencies between the loading variables, is the popular choice when layered extraction will not be a enterprise requirement (see additionally “Coding to Resolve Product Mixing”).
Product Mixing Modeling
Let’s take into account the case of common extraction. Say we want to monitor and mannequin parts deposited at a stockpile or buyer vessel. Listed below are three potential extraction and modeling situations:
State of affairs 1: Single Extraction Modeling We will extract any/all parts, no matter sort. On this instance, we might deal with element A1 (sourced at Mine A) and B1 (sourced at Mine B) as if they’re the identical element as a result of they’re comparable sufficient. |
|
State of affairs 2: Product Mix Extraction Modeling We will extract a possible product mix. On this instance, the extracted product mix conforms to the shopper’s product mixing rule necessities:
|
|
State of affairs 3: Versatile Combine Extraction Modeling We will solely extract an invalid element combine that doesn’t conform to the shopper’s element mixing guidelines and thus doesn’t type a product by itself. On this instance, since our mix of parts A3 and C4 doesn’t type a sound product, we will:
|
From a modeling perspective, I like to recommend creating mixed-integer programming formulations to handle product mixing. We will mannequin product mixing by utilizing solely real-valued variables and linear constraints, making it comparatively straightforward to calculate and monitor blends.
Issues can get sophisticated when product mixing modeling overlaps with scheduling choices that require binary variables for modeling functions, similar to choices round vessel berthing or prepare schedules.
Coding to Resolve Product Mixing
Python is good for coding and fixing mixed-integer programming formulations. Use the PuLP library to formulate provide chain issues, similar to defining variables, constraints, and goal capabilities. Conveniently, PuLP’s syntax intently resembles a clear mathematical formulation.
You may then combine an open-source solver like Cbc or, in case your funds permits, a business solver like Gurobi or CPLEX. The business choices present an amazing efficiency enhance in comparison with Cbc.
The next pseudocode examples reveal how we outline loading variables and constraints. The loading variables are:
load[v=vessel, p=port, c=component, prd=product, t=time]
These variables have 5 indices: vessel, port, element, product, and time. In follow, you’ll outline many extra forms of loading variables.
Including a product index to the loading variables is beneficial for monitoring the particular product for which a element is designated. Since loading variables are actual values (versus integers), they don’t pose a giant computational problem. Element mixing guidelines can now be modeled as follows:
load[v, p, A2, prd, t] >= 0.5 * sum(load[v, p, c, prd, t] for all c that serve product prd of vessel v)
load[v, p, C1, prd, t] <= 0.2 * sum(load[v, p, c, prd, t] for all c that serve product prd of vessel v)
load[v, p, C1, prd, t] + load[v, p, B2, prd, t] <= 0.5 * sum(load[v, p, c, prd, t] for all c that serve product prd of vessel v)
Spec mixing guidelines might be carried out with an analogous linear strategy. Nevertheless, these constraints could be a bit extra sophisticated, since spec assays are normally normalized by the loaded quantity. Whereas easier to execute, direct modeling would introduce non-linearities and, thus, could be impractical. As an alternative, it could be higher to calculate weighted pseudo-assay values after which reapply the linear equations. Caveat: The constraints might overlap with binary scheduling variables—however that dialogue is past the scope of this text.
I wholeheartedly suggest incorporating mixing guidelines right into a provide chain mannequin. My previous shoppers have had constant successes with optimized customer-specific mixing, which elevated the computational complexity of their scheduling fashions solely by a hair.
Reworking Your Coal Provide Chain to Incorporate Mixing
Product mixing is strongly linked to rail and port operations, closely impacting day-to-day choices, similar to the place to move which parts or the place to deposit and/or extract parts.
The best digital state is a complete scheduling software that gives forward-looking suggestions for rail and port, with a mixing optimization mannequin built-in as a key half. When acceptable (e.g., to answer altering climate situations), advert hoc problem-solving by licensed rail and port operators can appropriate chosen suggestions.
For every distinctive provide chain, a customized scheduling software is sensible. Utilizing an Agile course of, we might establish the affect of product mixing earlier than our full digital software is launched. Shut collaboration with operators and coordinators—always—would go a good distance towards addressing any change administration dangers.
To construction and code the fashions mandatory for constructing a scheduling software, interact the skills of information scientists, knowledge engineers, and optimization consultants. In as we speak’s difficult and aggressive setting, companies that implement product mixing keep forward of the competitors.
The editorial crew of the Toptal Engineering Weblog extends its gratitude to John Lee for reviewing the code samples and different technical content material introduced on this article.