BRAGA

01 Work01-05

Warehouse humanoid TCO

At the modelled demand, humanoids do not yet beat the lean hybrid. A five-year cost model for warehouse pick, move and place work.

OperationsCompletePublished 21 May 20265 min readUpdated 16 Sep 2026Repository
€453,000
Lowest five-year present cost
€0.374
Cost per order
99.8%
Draws won by the lean hybrid
Contents
  1. 01Question
  2. 02Data
  3. 03Method
  4. 04Result
  5. 05Limitations
  6. 06Decision
  7. 07Build log
Summary

One person with three autonomous mobile robots (AMRs) has the lowest five-year present cost, €453,000, and wins 99.8% of the evaluated draws. Humanoids are deferred until demand, labour supply or shift patterns change.

Question

The question is unit economics, not capability. At what price, demand and staffing level would a humanoid fleet become the cheaper way to run pick, move and place work in a warehouse? The model prices seven staffing scenarios, from human-only crews through AMR hybrids to pure-humanoid fleets. The unit of comparison is five-year present cost at an 8% discount rate.

Data

Capability assumptions use 2,359 episodes from five public UnifoLM datasets, pinned by hash. They are household demonstrations (plates into a dishwasher, pillow pickup, clothes into a washing machine, single- and dual-arm manipulation), not warehouse tasks. The model uses their pick, move and place primitives as a proxy and applies a speed-transfer factor between 0.50 and 0.90. That transfer is the largest threat to external validity, and it is stated before any result.

Labour is priced at Austrian collective-agreement (KV) wage rates; robot and AMR capex uses public price assumptions. Integration cost and availability derating are part of the model.

Aside

These are not measurements from a deployed warehouse fleet. The proxy is the first limitation listed below.

Model inputs
Episodes
2,359 · five public UnifoLM datasets, pinned by hash
Speed transfer
factor 0.50–0.90 on the demonstrated speed
Scenarios
7 · 15 replicas each, 105 runs
Demand
120 orders per hour · utilisation at most 0.85
Uncertainty
10,000 Monte Carlo draws per scenario
Discount rate
8% a year over five years
Labour
Austrian collective-agreement (KV) wage rates
Capex
public price assumptions for robots and AMRs

Method

Four modules run in order from one command:

  1. Capability extraction. Cycle times and a rule-based task taxonomy from the episodes.
  2. Discrete-event simulation. Seven staffing scenarios, 15 replicas each (105 runs), demand-bound at 120 orders an hour; each scenario is sized to a utilisation of at most 0.85.
  3. Five-year cost with Monte Carlo. 10,000 draws per scenario, one-at-a-time and Sobol sensitivity analysis, and a binary search for the humanoid price at which the fleet breaks even.
  4. Reporting. Executive charts, CSV exports, an executive summary in German and English, and a Tableau Public workbook.
Present cost

Future cash flows discounted to today at the stated rate, so that costs falling in different years can be added. Here 8% a year over five years.

One tracked finding changed the headline.1 An earlier version compared fixed crews of different sizes, eight people against six AMR-hybrid units, so its “cheapest option” mixed a smaller crew with a technology choice. Every non-legacy scenario is now sized by the same optimiser to the minimum five-year cost under the utilisation cap, and the eight-person crew stays only as a labelled reference for the cost of overstaffing.

Result

Of the seven scenarios, the lean hybrid of one person and three AMRs has the lowest five-year present cost. Its capital requirement is €195,000.

Fig. 01-05-1 · Five-year present cost by scenario

The lean hybrid costs 30% less than people alone and less than a fifth of the best humanoid case.

Lean hybrid453
Human-only647
Humanoid 20282,533
Pure humanoid2,878
Present value at 8%, in thousands of euros; scale 0–2,878. n = 4 of 7 scenarios. Lean hybrid is S-lean-hybrid-amr, Human-only S-lean-human, Humanoid 2028 S-future-2028 (the best humanoid case), Pure humanoid S-pure-humanoid.
Source: five-year TCO model, project repository, last updated 16 Sep 2026.

The table gives all seven. S-lean-hybrid-amr is the lean hybrid, S-lean-human the lean crew of three and S-future-2028 the best humanoid case; S-baseline-human (legacy) is the labelled reference for the cost of overstaffing.

Scenario Five-year present cost Capex Cost per order
S-lean-hybrid-amr €452,706 €195,000 €0.374
S-lean-human €647,401 €0 €0.543
S-baseline-human (legacy) €1,726,403 €0 €1.444
S-future-2028 €2,532,753 €1,365,349 €2.120
S-pure-humanoid €2,877,837 €2,051,609 €2.407
S-hybrid-amr €3,841,113 €2,311,609 €3.244
S-hybrid-5050 €5,251,641 €2,051,609 €4.411

The breakeven search ran humanoid capex from €10,000 to €500,000 per unit and found no price at which a pure-humanoid fleet matches the lean hybrid’s cost per order at 120 orders an hour. Even near-free humanoids lose, so capex is not the binding constraint.

For the lean hybrid, the Monte Carlo cost has a mean of €461,414 with a standard deviation of €43,755, and a 90% interval from €394,658 to €537,549.

Result · 10,000 draws per scenario

The lean hybrid wins 99.8% of the evaluated draws.

Limitations

The ranking holds only under the stated assumptions. What this does not establish:

  • Warehouse performance. Household demonstrations remain a proxy for warehouse tasks.
  • A site-specific procurement case. There are no warehouse-native cycle times and no signed humanoid quotes.
  • Local prices. Public list prices and estimated KV wages can move the cost either way.
  • Independent reproduction. The committed reproduction log was produced by an agent, not by a third party cloning the repository cold.
One assumption cuts against the robots

The model assumes labour is available at KV rates. In Austrian intralogistics the practical driver of automation is unfilled vacancies rather than wage arbitrage, so robot value is understated wherever vacancies stay open.

Decision

Under these assumptions, deploy the lean hybrid now and defer humanoid procurement. Capex is not the binding constraint, so a lower humanoid price alone does not change the call.

When is the call worth revisiting?

Under demand growth, labour scarcity or multi-shift operation. At the modelled demand, no humanoid price in the searched range breaks even.

The repository holds the code, the charts, the executive summaries and the governance record.

Build log

99 commits and 10 merged pull requests on 20 days between 21 May 2026 and 27 Oct 2026. Merge commits and bots are left out; times are Vienna time.

Fig. 01-05-B1 · CalendarThe busiest day was 30 May 2026, with 18 commits.
MayJulAugSepOctMonWedFriSun21 May 2026 · 322 May 2026 · 123 May 2026 · 024 May 2026 · 025 May 2026 · 026 May 2026 · 127 May 2026 · 828 May 2026 · 029 May 2026 · 1030 May 2026 · 1831 May 2026 · 121 Jun 2026 · 02 Jun 2026 · 13 Jun 2026 · 44 Jun 2026 · 45 Jun 2026 · 66 Jun 2026 · 07 Jun 2026 · 08 Jun 2026 · 09 Jun 2026 · 010 Jun 2026 · 011 Jun 2026 · 012 Jun 2026 · 013 Jun 2026 · 214 Jun 2026 · 015 Jun 2026 · 016 Jun 2026 · 017 Jun 2026 · 018 Jun 2026 · 019 Jun 2026 · 020 Jun 2026 · 021 Jun 2026 · 022 Jun 2026 · 023 Jun 2026 · 024 Jun 2026 · 025 Jun 2026 · 026 Jun 2026 · 027 Jun 2026 · 028 Jun 2026 · 029 Jun 2026 · 030 Jun 2026 · 01 Jul 2026 · 02 Jul 2026 · 03 Jul 2026 · 04 Jul 2026 · 05 Jul 2026 · 06 Jul 2026 · 07 Jul 2026 · 08 Jul 2026 · 09 Jul 2026 · 010 Jul 2026 · 011 Jul 2026 · 012 Jul 2026 · 013 Jul 2026 · 014 Jul 2026 · 015 Jul 2026 · 016 Jul 2026 · 417 Jul 2026 · 318 Jul 2026 · 019 Jul 2026 · 020 Jul 2026 · 021 Jul 2026 · 022 Jul 2026 · 023 Jul 2026 · 024 Jul 2026 · 025 Jul 2026 · 026 Jul 2026 · 027 Jul 2026 · 028 Jul 2026 · 029 Jul 2026 · 030 Jul 2026 · 031 Jul 2026 · 01 Aug 2026 · 02 Aug 2026 · 03 Aug 2026 · 04 Aug 2026 · 05 Aug 2026 · 06 Aug 2026 · 07 Aug 2026 · 08 Aug 2026 · 09 Aug 2026 · 010 Aug 2026 · 011 Aug 2026 · 012 Aug 2026 · 013 Aug 2026 · 014 Aug 2026 · 015 Aug 2026 · 016 Aug 2026 · 017 Aug 2026 · 018 Aug 2026 · 019 Aug 2026 · 020 Aug 2026 · 021 Aug 2026 · 022 Aug 2026 · 023 Aug 2026 · 024 Aug 2026 · 025 Aug 2026 · 026 Aug 2026 · 027 Aug 2026 · 028 Aug 2026 · 029 Aug 2026 · 030 Aug 2026 · 031 Aug 2026 · 01 Sep 2026 · 02 Sep 2026 · 03 Sep 2026 · 04 Sep 2026 · 05 Sep 2026 · 06 Sep 2026 · 07 Sep 2026 · 08 Sep 2026 · 09 Sep 2026 · 010 Sep 2026 · 011 Sep 2026 · 012 Sep 2026 · 013 Sep 2026 · 014 Sep 2026 · 015 Sep 2026 · 016 Sep 2026 · 117 Sep 2026 · 418 Sep 2026 · 019 Sep 2026 · 020 Sep 2026 · 021 Sep 2026 · 122 Sep 2026 · 023 Sep 2026 · 024 Sep 2026 · 025 Sep 2026 · 026 Sep 2026 · 027 Sep 2026 · 028 Sep 2026 · 029 Sep 2026 · 030 Sep 2026 · 01 Oct 2026 · 02 Oct 2026 · 03 Oct 2026 · 04 Oct 2026 · 05 Oct 2026 · 06 Oct 2026 · 07 Oct 2026 · 08 Oct 2026 · 09 Oct 2026 · 010 Oct 2026 · 011 Oct 2026 · 512 Oct 2026 · 013 Oct 2026 · 014 Oct 2026 · 015 Oct 2026 · 016 Oct 2026 · 017 Oct 2026 · 018 Oct 2026 · 019 Oct 2026 · 020 Oct 2026 · 021 Oct 2026 · 022 Oct 2026 · 023 Oct 2026 · 024 Oct 2026 · 025 Oct 2026 · 026 Oct 2026 · 627 Oct 2026 · 501–23456–89–1213–18

n = 99 commits. Colour: commits per day, seven bins from 1 to 18; an empty cell had none. Hover a cell for its count.
Source: git history of RafaelBraga-Kribitz/warehouse_humanoid_tco, default branch, snapshot 27 Oct 2026.

Fig. 01-05-B2 · WeekThe busiest hour of the week: Friday, 22:00–23:00, 6 commits.
0003060912151821MonTueWedThuFriSatSunMon 00:00 · 0Mon 01:00 · 0Mon 02:00 · 0Mon 03:00 · 0Mon 04:00 · 0Mon 05:00 · 0Mon 06:00 · 0Mon 07:00 · 0Mon 08:00 · 0Mon 09:00 · 0Mon 10:00 · 0Mon 11:00 · 0Mon 12:00 · 0Mon 13:00 · 0Mon 14:00 · 0Mon 15:00 · 1Mon 16:00 · 0Mon 17:00 · 0Mon 18:00 · 0Mon 19:00 · 0Mon 20:00 · 5Mon 21:00 · 1Mon 22:00 · 0Mon 23:00 · 0Tue 00:00 · 5Tue 01:00 · 0Tue 02:00 · 0Tue 03:00 · 0Tue 04:00 · 0Tue 05:00 · 0Tue 06:00 · 0Tue 07:00 · 0Tue 08:00 · 0Tue 09:00 · 0Tue 10:00 · 0Tue 11:00 · 0Tue 12:00 · 0Tue 13:00 · 0Tue 14:00 · 0Tue 15:00 · 0Tue 16:00 · 0Tue 17:00 · 0Tue 18:00 · 0Tue 19:00 · 0Tue 20:00 · 1Tue 21:00 · 0Tue 22:00 · 0Tue 23:00 · 1Wed 00:00 · 1Wed 01:00 · 0Wed 02:00 · 1Wed 03:00 · 0Wed 04:00 · 0Wed 05:00 · 0Wed 06:00 · 0Wed 07:00 · 0Wed 08:00 · 0Wed 09:00 · 0Wed 10:00 · 0Wed 11:00 · 1Wed 12:00 · 1Wed 13:00 · 5Wed 14:00 · 0Wed 15:00 · 0Wed 16:00 · 0Wed 17:00 · 0Wed 18:00 · 1Wed 19:00 · 0Wed 20:00 · 0Wed 21:00 · 2Wed 22:00 · 1Wed 23:00 · 0Thu 00:00 · 0Thu 01:00 · 1Thu 02:00 · 0Thu 03:00 · 0Thu 04:00 · 0Thu 05:00 · 0Thu 06:00 · 0Thu 07:00 · 0Thu 08:00 · 0Thu 09:00 · 0Thu 10:00 · 0Thu 11:00 · 1Thu 12:00 · 0Thu 13:00 · 0Thu 14:00 · 0Thu 15:00 · 0Thu 16:00 · 3Thu 17:00 · 0Thu 18:00 · 2Thu 19:00 · 2Thu 20:00 · 5Thu 21:00 · 0Thu 22:00 · 0Thu 23:00 · 1Fri 00:00 · 1Fri 01:00 · 2Fri 02:00 · 1Fri 03:00 · 0Fri 04:00 · 0Fri 05:00 · 0Fri 06:00 · 0Fri 07:00 · 0Fri 08:00 · 0Fri 09:00 · 0Fri 10:00 · 0Fri 11:00 · 0Fri 12:00 · 0Fri 13:00 · 0Fri 14:00 · 1Fri 15:00 · 0Fri 16:00 · 0Fri 17:00 · 0Fri 18:00 · 0Fri 19:00 · 1Fri 20:00 · 2Fri 21:00 · 1Fri 22:00 · 6Fri 23:00 · 5Sat 00:00 · 4Sat 01:00 · 0Sat 02:00 · 1Sat 03:00 · 0Sat 04:00 · 0Sat 05:00 · 0Sat 06:00 · 0Sat 07:00 · 0Sat 08:00 · 0Sat 09:00 · 0Sat 10:00 · 0Sat 11:00 · 0Sat 12:00 · 1Sat 13:00 · 0Sat 14:00 · 0Sat 15:00 · 1Sat 16:00 · 1Sat 17:00 · 2Sat 18:00 · 0Sat 19:00 · 0Sat 20:00 · 4Sat 21:00 · 3Sat 22:00 · 2Sat 23:00 · 1Sun 00:00 · 0Sun 01:00 · 0Sun 02:00 · 0Sun 03:00 · 0Sun 04:00 · 0Sun 05:00 · 0Sun 06:00 · 0Sun 07:00 · 1Sun 08:00 · 0Sun 09:00 · 0Sun 10:00 · 0Sun 11:00 · 5Sun 12:00 · 5Sun 13:00 · 0Sun 14:00 · 0Sun 15:00 · 3Sun 16:00 · 2Sun 17:00 · 0Sun 18:00 · 0Sun 19:00 · 0Sun 20:00 · 0Sun 21:00 · 1Sun 22:00 · 0Sun 23:00 · 00123456

n = 99 commits. Colour: commits per hour, seven bins from 1 to 6; an empty cell had none. Hover a cell for its count.
Source: git history of RafaelBraga-Kribitz/warehouse_humanoid_tco, default branch, snapshot 27 Oct 2026.

Fig. 01-05-B3 · Lines written

54 lines of tests for every 100 lines of code.

Code13,234
Tests7,212
Docs7,493
CI & setup990
Lines added, n = 28,929. Data, generated files, figures, notebooks and lockfiles are left out.
Source: git history of RafaelBraga-Kribitz/warehouse_humanoid_tco, default branch, snapshot 27 Oct 2026.

Footnotes

  1. The build runs under a governance protocol enforced in continuous integration (CI): every change closes a tracked finding with a named verification script, and CI re-runs the script of every closed finding on each pull request. ←

#intralogistics#total-cost-of-ownership#simulation

Questions about this project, or a role where this kind of work fits?

Keyboard shortcuts

Single keys, ignored while typing in a field or with Cmd, Ctrl or Alt held.

0
Home
1 2 3 4
Work, Writing, Tools, About
j / k
Next / previous section on this page
n / p
Next / previous project or essay
u
Up one level
l
Deutsch
t
Light or dark theme
?
This list
Esc
Close