Warehouses made hyper-fast
Ever thought about why your online purchase can be delivered in one day or even a couple of hours? I made it possible for you. Ok, this sounds salesy! At least I contributed a part to it. I worked for a worldwide market leader in intralogistics who equips the biggest warehouses with software and hardware. They wanted me to rebuild the software part that manages where boxes are stored in high racks.
Status quo at that time was that this part was hard to adapt for different use cases, buggy and often didn't meet speed requirements. They had gotten along with those deficiencies for many years but they wanted to change that fact.
This software component was in charge of finding storage locations inside storage racks that Automated Storage and Retrieval Machines (ASRMs) eventually stored boxes and pallets (load units) into. The requirements on a high level were quite clear for everybody.
Store load units space- and speed-efficiently inside a storage rack.
This one sentence still leaves questions unanswered:
- What does "space efficiency" mean? Don't leave unused holes hence don't fragment the storage space?
- What should be exactly fast? High throughput hence fast storage/retrieval of load units? Low retrieval latency hence short time until a load unit comes out of the storage?
I briefly explain the domain entities so that we know how they work and relate to each other.
A ASRM is basically a robot that executes orders from a server application. The server tells the ASRM to load one or more load units at a source location (or compartment) and unload them at a destination location (or compartment). It moves inside the aisle which is usually delimited on both sides by the storage racks. It's the thing you see in the middle of the picture.
On the other hand the storage rack is a metal construction with pillars and horizontal bars dividing the rack into many compartments. Each compartment can store one or more load units. The ASRM can load/unload load units from/to the compartments in random order. It's comparable with a computer's RAM memory locations. You can see them on the right and left side of the ASRM in the picture.
Let's think about the problem statement in more detail!
How the storage system is used
Every warehouse has a flow of incoming goods. Those goods are stored somewhere so that we have them at hand fast at a later point in time when we need them for commissioning. Commissioning is the process of collecting and sorting of goods, package them to fulfill a customer's order.
The ultimate goal of an efficient warehouse is to get goods as fast as possible out of it so that consumer's get them fast.
An obvious point is that the closer a good is located to the outlet of the storage system the faster the ASRM can provide it. So store load units as close to the outlet as possible! The problem is that when the storage system fills up - an empty warehouse costs money - then each new load unit stored is a little farer away from the outlet.
Storage racks that can store multiple load units behind each other are very common for cost saving reasons. When we want to retrieve a load unit which is blocked by another in front then first the ASRM needs to rearrange the blocking one. Then it can deliver the one behind. That's a LIFO system by design although in warehouses we almost never need LIFO behavior. No one wants to store goods forever! We want to store them as shortly as possible.
Rearrangements take a lot of time and slow down the retrieval of the good that we need to fulfill a customer's order. Having no rearrangements would be the ideal case but unfortunately isn't possible. We try to keep them low with storing the goods that we most likely need at the same time into the same compartments. Which goods are considered to be needed at the same time is highly warehouse, process and stock specific but we leave that as-is for now.
ASRMs are often equipped with the same number of places for load units as the compartments can store load units. If we store same goods into the same compartment which are needed at the same time we get the further speed increase that we can transport them simultaneously.
The two "store same goods together in same compartments" and "store close to the outlet" criterias raise the question which of them is more important if both are possible.
Let's make a thought experiment! We want to store a box that has good A in it, there're one empty compartment and one that has one load unit containing good A stored available. The empty one is closer to the outlet. It's desirable to prefer to fill up the compartment with good A because a rearrangement in the future is far more costly than the shorter distance to the outlet for this good.
From the above we can derive search criterias with their priority
- store load units that are likely needed at the same time in the same compartment
- store load unit in empty compartment if there's no used compartment with the same good
- store load unit in used compartment despite it doesn't contain the same good
If multiple storage locations are available that fulfill the same characteristics then choose the one closer to the outlet. Close distance is a secondary optimization criteria.
Criteria 3 harms the tidiness of the storage system because it most likely causes a rearrangement in the future. The search should be parameterized in such a way that this case doesn't occur often.
This search criterias list is usually also the best if the ASRM can store multiple load units at the same time from the inlet. Always unloading all of them in the same compartment without regarding the stock inside each load unit brings a slightly faster storage if an empty compartment is available but can lead to many compartments that contain different goods. Though this depends highly on the goods-in process and in which order goods arrive at the inlet.
Characteristics
300 meters long
40 compartments high, 400 long = 16000 compartments
20 aisles
Glossary
Load Unit -> box or pallet which contain stock
ASRM -> Automated Storage and Retrieval Machine
SRM -> Storage and Retrieval Machine
Storage Rack -> Metal construction where load units are stored
Storage Compartment -> Division of a rack where one or more load units are stored behind each other
Storage Location -> Place that is designed to store one load unit for a long time, it can also be empty
Storage Point -> One or more locations that are designed t
Retrieval Location -> Hand over location that connects the storage system with the rest of the warehouse and a load unit leaves the storage system
Retrieval -> process of transporting a load unit from a storage location to the retrieval location
Storage -> process of transporting a load unit from the storage
Rearrangement -> process of transporting a load unit from one storage location to another, usually because it blocks retrieval of a load unit behind