Cart Types & Capacities
LifeSeasons uses seven cart types. All capacities, bin counts, and physical cart quantities are now confirmed. Dynamic and Distributor are identified but sit outside the main batching algorithm.
Vertical config: SKUs 272 and 284 (large boxes, can’t go in auto-bagger) use all 7 bins in a single column for one order.
Auto-Bagger Exclusions — Confirmed List
These SKUs cannot go through the auto-bagger (too large or boxed). They must be routed to blue or red carts instead of green. Confirmed by Ben and Sherry (SKU 505 is not on this list — confirmed by Sherry):
Sherry's Current Assignment Process
Brand & Priority Breakdown
From the 930 usable orders in the ~10-day sample. Brand is detected from item number prefixes. Orders from different brands are never grouped into the same batch.
Brand Breakdown
Detected from item number prefixes. Orders from different brands are never grouped into the same batch.
HC. In our sample all are wholesale (UPS Ground). Ben listed HC as a D2C channel — needs clarification (see Q3 below).PL-NGVC. Natural Grocers Vitamin Cottage. Stored on Speed Cell 3. Never mixed with HC.Priority Breakdown
4046858-3990825). All carry OrderLogix in CustomField4 in current data. Need updated export with Shopify store names.Open Questions for LifeSeasons
Four gaps need clarification before the system can go live. Everything else has been confirmed.
-
1What is the actual bottle threshold between blue and red?
Our current rule: orders with ≤28 total bottles go on blue; 29–80 bottles go on red. But in the WMS data, 184 orders that WMS put on a red cart have ≤28 bottles — our system would route those to blue. This means either our 28-bottle cutoff is too high, or there’s a secondary condition we don’t know about that pushes lower-bottle orders to red.
What is the exact maximum bottle count before an order moves from blue to red? -
2Pack-one: is the rule SKU-based or location-based — and does it overlap with green?
Our proxy rule: exactly 1 shelf location AND ≤3 total bottles = pack-one. But in the WMS data, 62 orders we call pack-one went on blue and 37 we call pack-one went on green. Two things need clarification:
- A: Does pack-one require every item in the order to be the same SKU/product — or is “1 shelf location, ≤3 bottles” enough regardless of how many SKUs?
- B: If an order has 1 shelf location and only 1–3 bottles, should it go to pack-one or green? Our hierarchy sends it to pack-one, but WMS data suggests some of those go green.
-
3If an order has both a blue-forced SKU and a mailer SKU, which cart does it go on?
SKUs 272 and 284 (large boxes) force an order to the blue cart. SKUs 9085, 9136, 9137, 9138 force an order to the mailer cart. If a single order contains both types — for example, a large box (272) plus a Symmetry bottle (9085) — our system currently sends it to mailer because the mailer check runs first in the hierarchy.
Is that correct, or should the large-box rule override mailer? -
4What determines whether a mailer run uses the regular cart (80 bins) or the pre-kit cart (120 bins)?
We have confirmed capacities for both: regular mailer = 80 bins, pre-kit mailer = 120 bins. But the algorithm currently always uses 80 as the limit because we don’t know which orders are pre-kitted.
Is pre-kitted determined by specific SKUs or the order channel — or is it a manual decision made by the team each run? If it’s manual, the system just needs a way for ops to indicate which capacity to use when releasing a batch.
Cart Assignment — How the System Runs
This is the full pipeline from raw WMS export files to each order being assigned a cart type. Every decision is made in the sequence shown below — top to bottom, left to right.
real_data_parser.pybuild_orders()apply_yellow_fallback()What Is Batch Optimization?
Once orders are assigned to a cart type (Part 1), there is a second decision: within that cart type, which specific orders get grouped into one batch? For example, if you have 100 blue cart orders, you need roughly 4 batches of 28. Which 28 go together in each batch?
Sherry does not currently optimize this. She assigns orders to batches based on what fits — not on which orders are physically closest on the shelves. This is the gap our algorithms fill. Grouping orders that pick from nearby shelf locations means the worker walks a shorter total distance per batch.
Route Cost Model
We do not have the physical warehouse floor plan yet. As a proxy, route cost is:
Known limitation: Pick sequence numbers do not capture cross-aisle travel or real warehouse geometry. The relative ranking of algorithms is reliable. The absolute improvement percentages will change once we have real walking distances from the floor plan.
The 4 Algorithms We Tested
Each algorithm runs independently on orders of the same cart type, brand, and priority. Green cart orders are never mixed with blue cart orders. HC orders are never mixed with NGVC orders.
Jaccard Greedy
- Seed batch with farthest-location order
- Fill by shared location overlap score
- Fast, simple, good comparison baseline
RAG — Routing-Aware Greedy
- Same seed as Jaccard
- Screen top-15 by Jaccard similarity
- Pick the one that adds the least route cost
Clarke-Wright Savings (CW)
- Calculate savings from merging every pair of orders
- Merge highest-savings pairs first
- Industry-standard vehicle routing algorithm
- Best performance across all metrics
CW + Consolidation
- Run CW, then merge small batches to fill carts
- Slightly worse than CW alone with smaller cart sizes
- Not recommended for current capacity profile
Results
All numbers use real LifeSeasons data (930 orders, ~10 days). Per-cart-type capacities applied. Brand and priority grouping enforced. Lower average route cost = less walking = better.
| Method | Avg Route Cost | vs Random | vs WMS | Status |
|---|---|---|---|---|
| Random (no system) | 59,118 | baseline | — | No optimization |
| WMS (current) | 51,901 | +12.2% better | baseline | In production |
| Jaccard Greedy | 49,944 | +15.5% better | +3.8% better | Tested |
| RAG (Routing-Aware Greedy) | 49,944 | +15.5% better | +3.8% better | Tested |
| Clarke-Wright Savings | 43,439 | +26.5% better | +16.3% better | Top Performer |
| CW + Consolidation | 46,467 | +21.4% better | +10.5% better | Tested |
Clarke-Wright is the clear winner — 16.3% better than the current WMS on average route cost. Note that the WMS was free to mix priority 1 and priority 2 orders in the same batch, while our algorithms are constrained to never mix priorities. Despite this handicap, CW still wins by 16.3%, making the result stronger than it appears.
Limitations & What's Next
What We Need for Part 2 to Be Exact
-
1Warehouse Dimensions
- How long is one aisle (shelf row)?
- How wide is the gap between two adjacent aisles?
- Where does a picker start and end their route?
-
2Warehouse Floor Plan or Map
- Even a rough hand-drawn layout would let us calculate real aisle-level distances.
- This is the single most impactful input for making optimization numbers exact and giving LifeSeasons a confirmed dollar figure on labor savings per day.