What Is Cart Assignment?
Before a single pick happens, every order must be assigned to a cart. The cart determines how many orders get picked together, what physical container they go in, and which packing lane they end up at. Getting the cart right is the foundation — if an order is on the wrong cart, everything downstream is wrong.
Why this comes first: Our Part 2 optimization algorithms batch orders within the same cart type. If an order is classified into the wrong cart type, it gets grouped with the wrong orders — and all improvement numbers become unreliable. Cart assignment must be confirmed before optimization results can be trusted.
Cart Types & Capacities
LifeSeasons uses six cart types. Confirmed capacities come from the operations meeting. Estimated capacities are our best guess and need to be confirmed.
Auto-Bagger Exclusions — Confirmed List
These SKUs cannot go through the auto-bagger (too large, boxed, or crushable). They must be routed to blue or red carts instead of green. Confirmed by Ben:
Sherry's Current Assignment Process
Sherry runs through these filters every morning in order. Each step pulls a group of orders and assigns them to a cart type. Whatever remains after all filters goes through size-based rules at the end.
Sherry also tries to create full carts wherever possible — a partial cart is inefficient because a worker walks the same distance for fewer orders. At end of day, leftover orders may go on any available cart rather than waiting.
What We've Classified From the Data
Using the rules above (with estimated thresholds where values aren't confirmed), we classified all 930 usable orders from the ~10-day sample:
Important caveat: Pack-one detection is a proxy — we check if an order picks from exactly one shelf location. The real rule is whether every bottle is the same product, which is not always the same. Green cart thresholds and all estimated capacities need validation from LifeSeasons before this classification is reliable.
What We Have ✔ vs What We're Missing
| What We Have (Solid) | Status |
|---|---|
| Blue cart threshold (28 bottles) | Confirmed by LifeSeasons |
| Red cart threshold (10 bins) | Confirmed by LifeSeasons |
| Auto-bagger SKU exclusions (272, 284, 503, 307, 317, 369) | Confirmed by Ben |
| D2C priority detection (hyphenated order number) | Confirmed — matches CustomField4=OrderLogix in data |
| Brand separation (HC / NGVC / LS never mixed) | Confirmed |
| Green cart blocks auto-bagger-excluded SKUs | Implemented correctly |
| Yellow cart rule (SKU 505 — My Best Heart, crushable) | Rule coded — SKU 505 not in current sample, untestable |
| Mailer cart rule (NQ prefix, SKU 9085 Symmetry, >80 fallback) | Rule coded — NQ/9085 orders not in current sample, untestable |
| What We Don't Have (Gaps) | Impact |
|---|---|
| Mailer channel criteria (NQ prefix, SKU 9085 / 505) | Not testable — none in 10k sample. NeuroQ orders may be misclassified as green/blue. |
| Green cart capacity | We use 20 (estimated). If it's 15 or 25, batching is wrong. |
| Pack-one capacity | We use 20 (estimated). Same issue. |
| Pack-one = “same product” check | We proxy via “1 shelf location.” An order with 2 products at the same location would be misclassified. |
| Green cart exact product limit (2 or 3?) | The meeting said “2–3 items.” We need a single number to classify orders correctly. |
| SLA timestamp (order creation time) | We capture pick time, not creation time — can't enforce the 3 pm same-day cutoff. |
| SKU 505 confirmation | Ben said 505 goes to mailer, but 503 is on the exclusion list — same product family may need separate handling. |
Brand Breakdown
Detected from item number prefixes — no guessing. 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.Questions for LifeSeasons
-
1Can the export include the order creation time?
To apply the SLA rules — D2C before 3 pm ships same day, wholesale before 5 pm ships next business day — we need to know when each order was placed, not when it was picked.
-
2Can you send a more recent data export?
The current sample is from 2021 and does not contain Shopify store names, or channels like FulfillmentV3 and PLB PARTNERS that Ben mentioned. A more recent export would let us identify D2C orders by exact store.
-
3What is FulfillmentV3, and what orders does it cover?
Ben’s note lists FulfillmentV3 as a D2C channel. Is this a Shopify storefront, a third-party fulfilment channel, or something else?
-
4What is PLB PARTNERS, and what orders does it cover?
Ben’s note lists PLB PARTNERS as a wholesale channel. Is this a private label partner, a distributor, or a specific retailer?
-
5Are Health Concerns (HC-prefix) orders D2C or wholesale?
Ben’s note lists “Health Concerns” as a D2C Shopify store, but HC-prefix item numbers in the data appear on wholesale shipments. Are these two separate things, or should HC orders be treated as urgent D2C?
-
6Is SKU 505 excluded from the auto-bagger?
Ben’s confirmed exclusion list is 272, 284, 503, 307, 317, 369. During the meeting, Sherry also pulled SKU 505 (My Best Heart) off the auto-bagger because it is crushable. Should 505 be on the exclusion list?
-
7How many orders fit on a pack-one cart, a green cart, and a yellow cart?
Blue (28 orders) and red (10 bins) capacities are confirmed. What are the actual capacities for pack-one, green, and yellow?
-
8What is the maximum number of distinct products for a green cart order — is it 2 or 3?
The meeting said “2–3 item orders” for the green cart. That is a range. We need a single specific number to classify orders correctly.
-
9How many times a day does the batching process run, and does the 3 pm cutoff trigger its own session?
From the meeting, Sherry batches in the morning, again at lunchtime, and continues throughout the day. The 3 pm SLA cutoff suggests D2C orders after that point wait for the next morning’s run. Is there a defined mid-afternoon session, or is it continuous? The system needs to know exactly when it runs and which orders are “must go today” vs “can go tomorrow.”
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) | 52,823 | baseline | — | No optimization |
| WMS (current) | 51,901 | +1.7% better | baseline | In production |
| Jaccard Greedy | 38,915 | +26.3% better | +25.0% better | Tested |
| RAG (Routing-Aware Greedy) | 38,915 | +26.3% better | +25.0% better | Tested |
| Clarke-Wright Savings | 31,774 | +39.8% better | +38.8% better | Top Performer |
| CW + Consolidation | 33,884 | +35.9% better | +34.7% better | Tested |
Clarke-Wright is the clear winner — 38.8% 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 38.8%, 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.