MERMAID Project × DOT-IT System
Dynamic color labeling by product expiry windows
Press Ctrl + Shift + V in VS Code to preview this Markdown.
Overview
MERMAID addresses two core Gate Group needs in the Retail Pick & Pack process:
- Improving efficiency when loading airline trolleys.
- Reducing errors when discarding expired products.
The MERMAID app is centered on the DOT-IT System: a method to assign label colors to products based on their expiration date, enabling:
- Rapid identification of items closest to expiry when assembling trolleys. Empirical samples during the hackathon showed an average efficiency increase of 36% less time spent per trolley (20 simulations).
Process
- When a lot is opened, it is registered and the system returns the label color to mark it with, according to its expiry date.
- When loading trolleys, staff only check the expiry of the color indicated by the system, speeding up the reload process.
- From the app, monitor the quantity of products in each “expiry interval.”
The MERMAID DOT-IT system is designed for progressive adoption—scalable, efficient, and easy to understand. Therefore:
- We reuse a set of
k-1colors as older products leave the system. - No re-labeling: each item is labeled once, when the lot is opened.
- It incorporates an in-house algorithm to dynamically adjust the interval length a color represents as new lots with farther expiry dates arrive.
Additional adoption considerations advised for Gate Group
- Estimated annual cost to implement the labeling method: $200,000 USD.
- The number of selected colors is designed to maximize the number of intervals we can represent within a given time horizon and to maximize visual contrast for easy distinction by trolley-loading staff.
(Maximal contrasts were computed using Johannes Itten’s seven color contrasts.) - We found the following labelling companies which are able to absorb the magnitude of labelling requirements (we are talking about millions of labels). Avery Dennison (EE. UU.), CCL Industries (Canadá), Multi-Color Corporation (MCC) (EE. UU.)
Dashboards
MERMAID includes several dashboards organized by separation of concerns, targeting different Gate Group stakeholders:
| Dashboard | What it shows (summary) | Primary stakeholder |
|---|---|---|
| Warehouse Dashboard | Inventory by station: opened (labeled) items and registered closed lots; counts by product and color. | Warehouse lead / Station supervisors |
| Stock Dashboard | Stock movements (in/out), discard/waste logging, and sync with flights/products. | Inventory team / Replenishment |
| DOT-IT Dashboard | Color to use for newly opened lots, the current WARNING color, colors in rotation, and counts per color. | Line operators / Trolley assembly |
| Productivity Dashboard | Operational efficiency: simulation and planning of makespan with N operators. | Operations management / Shift leads |
| Consumption Expectancy (Consumption Prediction) | Per-flight, per-product consumption forecasts; load recommendation with uncertainty bands. | Load planners / Supply chain analysts |
Below are the three main algorithms used in MERMAID.
Auto-adjusting algorithm for the expiry-days interval represented by each label color
The DOT-IT Algorithm is a completely self-made model. Provides a global expiry range estimate (R), then subdivides it into color intervals. This is key because labelling not only speeds up trolley loading by design— with this algorithm, it also lets us optimize the date span each color covers, which is in essence, minimize days per color so staff will have a tendency to check fewer items of a given label color.
DOT-IT system principles
- A-priori labeling: the color is assigned when the product is received/opened, independent of other lots.
- Incremental ranges: the total day range R grows only when a lot arrives with a farther expiry date.
- Reserved color: always keep at least one unused color to extend the range without conflicts.
- Reuse: colors are freed and reused once they disappear from inventory.
- Visual neutrality: colors carry no “good/bad” connotation; they’re selected for contrast.
Global range estimation model (MERMAID)
[ R = \tfrac{1}{3}(E[x]\cdot P) + 1.3\,f(y) + \tfrac{1}{3}\,IC(0.9\times10^{10},f(y)) + \overline{R}_w ]
Where:
- (E[x]): expected expiry (in days) on receipt.
- (P): service factor / proportion.
- (f(y)): estimated days to deplete stock (demand model).
- (IC): very high-confidence interval or quantile.
- (\overline{R}_w): average of the last computed ranges.
- (k): total number of available colors.
The total range is then divided among (k-2) or (k-1) active colors, leaving one in reserve.
Operational algorithm (simplified)
- Define (k) high-contrast colors.
- By default, split the year (365 days) into (k-1) equal intervals.
- Assign each new lot a color according to its days-to-expiry.
- If an expiry falls beyond the current range → recompute (R) (future version) and activate the reserved color.
Benefits
- Efficiency: increases beyond 36% (COULD NOT CALCULATE THIS ADDITIONAL INCREASE PRECISELY; trivial simulations yielded 1.7% additional efficiency with dynamic intervals of Dot-it algorithm).
- Scalability: progressive adoption by stations.
- Low cost: < $0.002 USD per label at industrial scale.
- Compatibility: integrates with stock, warehouse, and productivity dashboards.
Consumption Expectancy (Consumption Prediction)
Goal
Estimate, per flight and product, the expected consumption to load the optimal quantity and minimize stockouts and waste.
Features (inputs)
- Flight demand: passengers, load_factor, cabin_mix (Economy/Business/First).
- Service type: short/medium/long haul; service_type (cold/hot meal, snack, bar).
- Route: origin, destination, route_id (cultural/time-of-day preferences).
- Product: product_id, category, unit_size.
- Flight spec: qty_required (plan), menu/season combinations.
Typical target:
[
qty*{consumed} = qty*{loaded} - qty*{returned} - qty*{wasted_controlled}
]
(if no controlled waste, use: (qty*{loaded} - qty*{returned})).
Model
- Gradient Boosting (GBM) to capture non-linearities and interactions (e.g., passengers × service_type × product).
- Uncertainty:
- Quantile GBM (q = 0.1, 0.5, 0.9) → prediction intervals (PI).
- Ensemble (bagging/NGBoost) → variance estimation.
Training & validation
- Time-based split (train on prior months, validate on recent) to avoid leakage.
- Metrics: R², MAE, RMSE, route/product bias.
- Backtesting: weekly rolling windows.
Outputs
y_hat_mean(expected consumption).PI_low,PI_high(e.g., 80–90%).- Load recommendation:
[
qty_{to_load} = \lceil y_hat_mean + k \times risk_weight \rceil
]
with
risk_weighttuned to stockout vs waste cost.
Operational integration
- Stock Dashboard receives the per-flight, per-product load suggestion.
- Warehouse Dashboard checks availability by color/lot.
- DOT-IT Dashboard prioritizes picking: WARNING first, then FIFO.
Productivity Estimation (S → Monte Carlo → Greedy)
Goal
Estimate the makespan to assemble a batch of trolleys with N operators, considering each trolley/drawer has different complexity.
Step 1 — Complexity score S
Factors (examples):
- Cabin (Business > Economy).
- Unique SKUs (more distinct items → higher S).
- Layers/order of packing (sequence required → penalty).
- Fragility/size/rework expected.
Procedure:
- Normalize/standardize components and aggregate with weights.
- Map to classes C1…C6 (very simple → very complex) via quintiles/thresholds.
Example: Business + 12 SKUs → high S → C5/C6.
Step 2 — Monte Carlo simulation by class
- Fit LogNormal(μ, σ) per class (durations often lognormal).
- For each trolley (class (C_k)): simulate B times (T_i \sim \text{LogNormal}(\mu_k,\sigma_k)).
- Record p50/p80/p90 per trolley (with and without DOT-IT).
Step 3 — Greedy planning (N parallel operators)
- LPT heuristic (Longest Processing Time):
- Sort trolleys by descending time.
- Assign each trolley to the operator with the lowest current load.
- Produces a reasonable upper bound of makespan.
Connection with DOT-IT
- DOT-IT reduces search/check time; in C5–C6, σ decreases and p50 drops.
- Compare with vs without DOT-IT to quantify makespan delta.



Log in or sign up for Devpost to join the conversation.