Page reviewed 20 July 2026 · numerical default snapshot generated 10 July 2026 · early human–AI orchestrated draft by David Reinstein with Claude · incorporates Pablo AMC’s first public reply, but is not yet expert-reviewed.
Early draft — not reviewed, please treat with caution (click to expand)
This page was put together quickly with AI assistance. We have not checked it carefully ourselves, and we have not run it past Pablo or any field experts. Numbers, framings, and the little calculator below could all be wrong or misleading; treat everything here as a first pass meant to start a conversation, not a finding.
It discusses external work by Pablo Antonio Moreno Casares (Pablo AMC) and builds a deliberately simplified bridge from our cost model to his demand model. His interactive model is the authoritative source for the demand side — our bridge only approximates a slice of it. The current calculator also compares a future factory-gate biomass cost with approximate 2025 retail-price anchors without a common real-dollar base year or a full value-chain bridge. Its percentages are outputs of a teaching toy, not market-share forecasts. Corrections very welcome via Hypothesis — the annotation tool (the < tab at the right of this page) — or the discussion hub.
The two efforts focus on different aspects of the same problem — we look at production cost (from TEAs), he looks at the demand-side response — so they could be connected:
Our project (supply / cost)
A bottom-up Monte Carlo TEA — but also an interactive calculator you can re-run under your own assumptions, and a worked template for future modellers. Media, micronutrients, growth factors, capital and operating costs → a distribution of cost per kg for a target year (default 2036).
$/kg →
Pablo's model (demand / adoption)
Takes cost as exogenous (pinned from the TEAs). Cost → retail price ratio → a discrete-choice (logit) estimate of market share, split by species, product tier, and geography, for both a mainstream and an ethically-motivated consumer segment → a diffusion curve for how fast that share is approached over time.
Because he pins price from the same TEAs we build bottom-up (Humbird 2021, Pasitka 2024, Negulescu 2023, CE Delft, GFI), our cost distribution is a natural input to his demand model. Neither of us covers the other’s side: we do not model demand or adoption; he does not model supply, economies of scale, or how the market would clear.
Where the two agree, differ, and what’s new
The comparison in this section is our own AI-assisted reading (Claude, currently Opus 4.8), not Pablo’s characterization of either model — please check it against his post.
On agreements: both projects draw on the same source literature. Pablo emphasizes that Humbird’s 2021 pessimism was driven mostly by amino-acid/media cost — not a hard thermodynamic constraint — and that Pasitka’s 2024 empirical work (hydrolysate medium at $0.63/L) pushed that cost down sharply. Our model’s cost range is broadly consistent with that literature; where the central estimate should sit within the range is exactly the open question, and we take no position on it here.
Differences that matter:
Scope. We are supply-side and end at a cost distribution; he is demand-side and ends at market shares. His work fills a gap our analysis leaves open — the demand side being one of several things we don’t cover.
Cost level and spread. His headline biomass figure is $15–30/kg (point read ~$25/kg). Our dashboard is a scenario calculator whose default changes as the model is revised; a clean-default check generated on 10 July 2026 showed a median around $42/kg and p5–p95 around $12–233/kg. This is a dated snapshot of the then-current code, defaults, and output basis—not a statistic that updates automatically with the live dashboard. The earlier $56 / $15–310 figures on this page had already become stale. A separate run of the repository’s Python reference implementation on 20 July 2026 still gives about $56/kg (p5–p95 $15–311). That is not Monte Carlo noise: model.py retains older global density, media-use, and cost-component defaults, whereas the interactive dashboard uses a process-mode mixture and newer parameter structure. Until those implementations are harmonized, every quoted result should name the surface, date, defaults, output basis, and code revision. Prior decompositions suggest that the gap is driven mainly by wider, higher priors on media price and litres of fresh medium per kg, rather than by capital alone, but that claim should be regenerated from a versioned model export before citation.
Treatment of uncertainty. Ours is fundamentally a distribution (30k+ Monte Carlo draws over structural priors), as well as an interactive calculator that lets users tune the midpoints, spreads, and structural assumptions; his exposes uncertainty through user-tuned sliders and a lighter Monte Carlo band on the demand parameters.
What drives each output. For our cost figure, media cost dominates, followed by growth-factor cost and reactor capital; financing turns out to matter little to the spread. For his market share it is the price ratio R (cultivated cost ÷ conventional price) plus behavioural terms — loss aversion, a “real meat” credit, authenticity/provenance penalties, and food neophobia — none of which appear anywhere in a cost TEA.
What Pablo’s first reply adds
Pablo’s public reply on the EA Forum sharpens the comparison in three useful ways. He agrees that a more detailed Monte Carlo and a neutral/optimistic/pessimistic scenario set would help. More importantly, he says his optimistic reading is partly an estimand choice: for scientific feasibility he cares about what is reasonably achievable at the frontier, not the average performance across all attempts. He also treats roughly $0.20–0.30/L media as achievable and points to a company claim of 22,000-L production as evidence that the optimistic scale world may be materializing.
That does not simply move our cost prior downward. It exposes a question the present pipeline must answer first: are we forecasting (a) the best feasible plant, (b) the average qualifying commercial plant, or (c) a capacity-weighted sector average, conditional on large-scale production existing? CM_01 says “average production cost” and conditions on commercial scale being achieved; our model does not yet implement that conditioning, while Pablo’s interpretation is closer to a frontier scenario. The 22,000-L figure is also a company claim, not a public cost-and-yield validation dataset. The hack should model these estimands separately rather than average them together.
Genuinely new in his work, relative to ours:
Species inversion. The cheap, feed-efficient meats (chicken, pork) are the hardest to displace because conventional price is already low; expensive meats (beef, seafood) and luxury goods are the most penetrable. This is a demand-side pattern — a conjecture his model generates — that our cost model cannot produce.
Beachhead logic. Foie gras as the standout entry product — luxury price, unstructured (little scaffolding), and already ethically stigmatized or banned in places. Also high-end fish, tuna, salmon.
Disruption framing (in his post’s discussion, not the formal model). An innovation-economics argument (Christensen’s disruptive-innovation theory) that improving on incumbents’ own dimensions usually fails; cultivated meat needs an underserved segment (vegan/vegetarian attrition, “vegan veto” restaurants, biosecurity-sensitive buyers) plus government or advocacy push, much as electric cars did.
Behavioural realism. A random-utility model with an explicit “real meat vs. from-an-animal” separation (GFI’s thesis), neophobia that decays with exposure, and income-elasticity effects (would AGI-driven abundance change adoption? — modestly).
Rough notes on strengths and limitations
These are tentative observations from our own AI-assisted reading, not verdicts — and self-assessing our own model is inherently limited, so weight our comments on Pablo’s work above our comments on our own. Neither project is authoritative; both are explicitly AI-assisted and in progress.
Our cost model — apparent strengths: a first-principles structure, wide and explicit uncertainty, a latent “maturity” factor tying technology adoption to financing, a documented external critique with responses (Limits/Critique), and — with 10+ already collected — a link (in progress) to explicitly stated expert and forecaster beliefs. Apparent limitations: an ad hoc dependence structure, supplemental proteins (albumin, transferrin, insulin) handled coarsely, sensitivity shown as a dollar-swing ranking rather than a variance decomposition, and a fat right tail that some readers find implausibly pessimistic.
Pablo’s demand model — apparent strengths: it addresses questions our cost model doesn’t; it is calibrated to real data moments (plant-based ~1.2% market share, and the finding that ~89% of plant-based buyers are mainstream flexitarians rather than ethically-motivated vegetarians, Gallup veg+vegan ~5%, measured meat price elasticities); Pablo reports it reproduces plant-based milk’s share out-of-sample (without being fitted to it, though we have not verified this); and his species-inversion and beachhead patterns are robust to the diffusion form (which only sets speed, not the ceiling). Limitations he flags himself: (a) price elasticities are measured on today’s marginal choices but applied to a not-yet-existing product at very different maturity; (b) the Bass diffusion S-curve is built for first-purchase durables, not repeat grocery buys; (c) several behavioural weights are solved to hit calibration targets rather than independently measured; and (d) the scaffold cost ($6/kg) is an unsourced assumption. He also notes a scope boundary — precision fermentation (egg, dairy) is left out for want of a good TEA — which reads less as a flaw than as a direction for new work.
Which is more credible? They are not rivals — they are not estimating the same quantity. On the shared cost question, Pablo reads the optimistic end of a range our distribution also covers; our median is higher mostly because of our wider, higher media-cost priors and fat tail, not (as one might assume) because of capital and operating costs. His demand work is the more novel and, within its stated caveats, the more decision-relevant contribution: even a cheap cultivated product may capture little chicken or pork share, which reframes what “success” looks like — though this species-by-species framing has an important caveat.
Interactive bridge: from a cost per kg to a market share
The calculator below takes a cultivated biomass cost (seed it with our model’s output, or with Pablo’s optimistic read) and runs a much-simplified version of his cost-to-share logic: delivered cost → retail price ratio R against each species’ conventional US price → a two-way conventional-vs-cultivated logit share.
This is NOT Pablo’s model — it is a rough stand-in. Read before trusting any number.
Pablo’s real model is a two-segment, four-product random-utility system with income effects, loss aversion, and diffusion timing. What runs below is none of that. It is a one-line approximation we wrote to build intuition: a single-attribute logit whose slope we simply reverse-engineered to pass through two numbers Pablo reports — at price parity (R = 1) about 49% share, and at R ≈ 2.4 about 9% share — and to which we then bolt the per-tier authenticity offsets he documents (mince +0.2, cut −0.4, premium −1.5; foie gras treated as unstructured and stigmatized, so a small penalty). It omits his two consumer segments, the outside “whole-food” option, income effects, loss aversion, and all diffusion timing. Because it is pinned to only two of his points, it can only reproduce the shape of his story (cheap species resist, expensive and luxury ones are penetrable), not his actual per-species shares. For any number you would cite, use his interactive model, not this one. We would happily replace this with a faithful port, or with his own code, if he is open to it.
There is also a cost-basis mismatch before the demand equation begins. cbio is a future factory-gate biomass cost; the comparison prices are approximate 2025 US retail prices. The toy assumes 100% cell inclusion and adds only scaffold (for cuts) plus a generic markup. It omits recovery yield, non-cell ingredients, formulation, texturization, packaging, distribution, tax, retail margin, future conventional prices, and inflation. Until those are harmonized, the resulting price ratio and share are useful only for illustrating the mechanism.
gamma =2.64c0 =-0.04logistic = (x) =>1/ (1+Math.exp(-x))// Species: approximate 2025 US retail price ($/kg) + tier + authenticity offset tau.// Prices are rounded from US averages (per lb x 2.2046 = per kg):// Chicken breast boneless ~$4.17/lb -> ~$9/kg (BLS/FRED APU0000FF1101, late 2025)// Pork chops ~$4.1/lb -> ~$9/kg (BLS Average Price program)// Ground beef 100% ~$4.56/lb -> ~$10/kg (FRED APU0000703112, 2025)// Beef steak (avg of cuts) ~$10.2/lb -> ~$22/kg (BLS/USDA ERS, 2025)// Salmon fillet ~$11/lb -> ~$24/kg (typical US retail; no single BLS series)// Shrimp (whole/shell-on) ~$8/lb -> ~$18/kg; shrimp paste/processed cheaper ~$11/kg// (typical US retail; rough anchors, no single BLS series)// Foie gras ~$80/kg -> illustrative luxury anchor only, NOT an official price series// Tier "unstructured" => no scaffold cost; "cut" => scaffold applies.species = [ {name:"Chicken breast",pc:9,tier:"cut",tau:-0.4,structured:true}, {name:"Pork",pc:9,tier:"cut",tau:-0.4,structured:true}, {name:"Ground beef",pc:10,tier:"mince",tau:+0.2,structured:false}, {name:"Beef steak",pc:22,tier:"cut (premium)",tau:-0.4,structured:true}, {name:"Salmon",pc:24,tier:"cut",tau:-0.4,structured:true}, {name:"Shrimp (whole)",pc:18,tier:"cut",tau:-0.4,structured:true}, {name:"Shrimp paste",pc:11,tier:"mince",tau:+0.2,structured:false}, {name:"Foie gras",pc:80,tier:"luxury/unstructured",tau:+0.1,structured:false},]rows = species.map(s => {const delivered = cbio + (s.structured? scaffold_cut :0) + markupconst R = delivered / s.pcconst share =logistic(c0 - gamma *Math.log(R) + s.tau)return {name: s.name,tier: s.tier,pc: s.pc, delivered, R, share}})
Code
html`<div style="overflow-x:auto; max-width:100%;"><table style="width:100%; min-width:620px; border-collapse:collapse; font-size:13.5px; margin:8px 0;"><thead><tr> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="The conventional product cultivated meat would compete with, and its product form (mince = ground/paste, no scaffold needed; cut = whole muscle, needs a scaffold; luxury = premium/prestige)."><span class="th-hint">Product (form)</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Approximate 2025 US retail price of the conventional product, in dollars per kg."><span class="th-hint">Conventional<br>retail $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Illustrative unit-cost proxy = biomass cost + scaffold (for cuts) + one generic value-chain add-on. This is not a modeled retail price."><span class="th-hint">Illustrative<br>unit cost $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Price ratio R = cultivated cost ÷ conventional price. Below 1 = cheaper than conventional; above 1 = more expensive."><span class="th-hint">Price<br>ratio R</span></th> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="Estimated share of THIS product's own market that cultivated would capture, from the simplified logit. Not a share of all meat. The bar width uses a compressed (square-root) scale so small shares stay visible; the % is exact."><span class="th-hint">Cultivated share of<br>this product's market</span></th></tr></thead><tbody>${rows.map(r =>html`<tr style="border-bottom:1px solid #dee2e6;"> <td style="padding:7px 8px;">${r.name} <span style="color:#888; font-size:11.5px;">(${r.tier})</span></td> <td style="padding:7px 8px; text-align:right;">$${r.pc.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">$${r.delivered.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">${r.R.toFixed(2)}×</td> <td style="padding:7px 8px;"> <div style="display:flex; align-items:center; gap:8px;"> <div style="flex:0 0 46px; text-align:right; font-variant-numeric:tabular-nums;">${(r.share*100).toFixed(1)}%</div> <div style="flex:1; background:#eef1ee; border-radius:4px; height:12px; overflow:hidden;"> <div style="width:${Math.min(100,Math.sqrt(r.share)*100)}%; height:100%; background:${r.share>0.3?'#2d7a2d':r.share>0.08?'#c8862b':'#b04a4a'};"></div> </div> </div> </td></tr>`)}</tbody></table></div><p style="font-size:12px; color:#666; margin-top:6px;">Hover any column header for what it means. Bar width uses a compressed (square-root) scaleso small shares stay visible next to foie gras. The percentage is calculated exactly bythis toy equation, but it is <em>not an empirical estimate or forecast</em>; the bar is onlya rough visual. Colour: green > 30%, amber 8–30%, red < 8%.<br>Ordering is driven almost entirely by R (cost fixed, conventional price varies) plus theproduct-form offset — reproducing Pablo's inversion: cheap chicken and pork resist, whileexpensive beef, seafood, shrimp, and luxury foie gras are more penetrable. (Pablo alsonotes cultivated shrimp has a practical edge his model doesn't capture: no shells or headsto remove.)<br>Conventional prices are rounded 2025 US retail figures (per lb × 2.2 = per kg): chickenbreast ~$9/kg and pork ~$9/kg (US BLS Average Price / FRED series), ground beef ~$10/kg(FRED APU0000703112), steak ~$22/kg (BLS/USDA ERS). Salmon ~$24/kg and shrimp(~$18/kg whole, ~$11/kg paste) are typical retail figures without a single officialseries; foie gras ~$80/kg is an illustrative luxury anchor, not an official price. Changeany of these and the ordering can shift.</p>`
Try loading the scenario buttons and watch the toy shares move. Under its own fixed assumptions, the calculator generates the species-inversion pattern: chicken and pork are harder to displace than higher-priced products. This demonstrates the mechanism; it does not establish the magnitude or even preserve the ordering once inclusion rates, future-year prices, value-chain costs, cross-category substitution, and the omitted behavioural structure are modeled properly.
Possible next steps for reconciliation
Harmonize the repository’s own model surfaces. Make the interactive OJS dashboard and model.py read one parameter schema and pass a parity test before using either as a canonical numerical baseline.
Fix the estimand first. Separate P(qualifying large-scale production exists) from the cost conditional on existence, and report frontier, average-plant, and capacity-weighted sector scenarios separately.
Harmonize the value chain and currency basis. Convert all monetary inputs to one constant-dollar year, then bridge biomass cost to retail price with explicit recovery, inclusion rate, other ingredients, processing, packaging, distribution, tax, and margin.
Then feed the full distribution, not a point. Pipe the conditional cost distribution into a faithful cost-to-share implementation to produce a share distribution per species, rather than reading one cost point at a time.
Reconcile the media priors. The remaining cost gap appears to be driven largely by medium price ($/L) and fresh-media intensity (L/kg), but regenerate that decomposition from a versioned export before treating it as a result.
Joint parameters. His scaffold ($6/kg) and markup ($5/kg) assumptions are exactly the kind of parameter our elicitation and workshop process could put priors on.
Conversation. Pablo invited collaboration; the CM workshop crux-mapping between “skeptics and optimists” is a natural venue.
Provenance: this page was drafted quickly with AI assistance from Pablo’s public post, model, first public reply, and our own repo. Pablo has acknowledged the comparison and offered initial comments, but he has not reviewed this page line by line. See the pabloamc_bridge/README.md notes for the faithfulness caveats (the link resolves once this is pushed to GitHub).
Source Code
---title: "Cost → Demand: bridging to Pablo AMC's adoption model"toc: trueformat: html: css: styles.css include-in-header: text: | <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/dist/tippy.css"/> <style> /* Mark tooltip anchors as hoverable (matches the rest of the dashboard) */ abbr[title], abbr[data-tip] { text-decoration: underline dotted; cursor: help; text-decoration-thickness: 1px; text-underline-offset: 2px; } /* Column-header hint stays styled after Tippy strips the title attribute */ th .th-hint { text-decoration: underline dotted; text-underline-offset: 2px; cursor: help; } </style> include-after-body: text: | <script src="https://hypothes.is/embed.js" async></script> <script src="https://unpkg.com/@popperjs/core@2"></script> <script src="https://unpkg.com/tippy.js@6"></script> <script> // Initialise Tippy.js tooltips on the static prose abbr[title] elements // (mirrors docs.qmd). We deliberately do NOT touch the OJS-generated table, // which re-renders reactively — its th[title] cells keep their native browser // tooltips, which is robust and needs no re-init loop. (function () { function initTooltips() { if (typeof tippy === 'undefined') return; document.querySelectorAll('abbr[title]').forEach(function (el) { if (el._tippy) return; var t = el.getAttribute('title'); if (!t) return; el.removeAttribute('title'); tippy(el, { content: t, placement: 'bottom', maxWidth: 380, allowHTML: false }); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initTooltips); } else { initTooltips(); } setTimeout(initTooltips, 1500); })(); </script>---*Page reviewed 20 July 2026 · numerical default snapshot generated 10 July 2026 ·early human–AI orchestrated draft by David Reinstein with Claude · incorporatesPablo AMC's first public reply, but is not yet expert-reviewed.*::: {.callout-warning collapse="true"}## Early draft — not reviewed, please treat with caution (click to expand)This page was put together quickly with AI assistance. We have *not* checked it carefullyourselves, and we have *not* run it past Pablo or any field experts. Numbers, framings,and the little calculator below could all be wrong or misleading; treat everything here asa first pass meant to start a conversation, not a finding.It discusses external work by Pablo Antonio Moreno Casares (Pablo AMC) and builds adeliberately simplified bridge from our cost model to his demand model. His[interactive model](https://pabloamc.github.io/Cultivated_meat/interactive.html) is theauthoritative source for the demand side — our bridge only approximates a slice of it.The current calculator also compares a future factory-gate biomass cost with approximate2025 retail-price anchors without a common real-dollar base year or a full value-chainbridge. Its percentages are outputs of a teaching toy, not market-share forecasts.Corrections very welcome via [Hypothesis](https://hypothes.is/) — the annotation tool (the`<` tab at the right of this page) — or the[discussion hub](https://github.com/unjournal/cm_pq_modeling/discussions/3).:::**Return to:** [Interactive Cost Model](index.qmd) | [TEA Comparison](compare.qmd) | [Learn](learn.qmd) | [Limits/Critique](limits.qmd)## The two efforts focus on different aspectsIn July 2026 Pablo AMC published *["Cultivating hope: calibrating the expectations forcultivated meat to end factory farming"](https://forum.effectivealtruism.org/posts/ED2ag8hYTWf4kmL3x/cultivating-hope-calibrating-the-expectations-for-cultivated)*,with an accompanying [interactive economic model](https://pabloamc.github.io/Cultivated_meat/interactive.html).It has two parts: (1) a review of the same TEA literature we model, and (2) ademand-side model that takes a cost per kg as given and asks *what market sharewould consumers choose at that price?*The two efforts focus on different aspects of the same problem — we look at productioncost (from TEAs), he looks at the demand-side response — so they could be connected:```{=html}<div style="margin:14px 0; padding:12px 14px; border:1px solid #d4dfd4; border-radius:8px; background:#f8f9f5; font-size:14px;"><table style="width:100%; border-collapse:collapse;"><tr> <td style="vertical-align:top; width:42%; padding:5px 4px 5px 8px;"> <strong>Our project (supply / cost)</strong><br> A bottom-up Monte Carlo TEA — but also an interactive calculator you can re-run under your own assumptions, and a worked template for future modellers. Media, micronutrients, growth factors, capital and operating costs → a distribution of cost per kg for a target year (default 2036). </td> <td style="vertical-align:middle; width:1%; text-align:center; font-size:14px; color:#2d4a2d; white-space:nowrap; padding:0 4px;">$/kg →</td> <td style="vertical-align:top; width:57%; padding:5px 4px 5px 8px;"> <strong>Pablo's model (demand / adoption)</strong><br> Takes cost as <em>exogenous</em> (pinned from the TEAs). Cost → retail price ratio → a discrete-choice (logit) estimate of market share, split by species, product tier, and geography, for both a mainstream and an ethically-motivated consumer segment → a diffusion curve for how fast that share is approached over time. </td></tr></table></div>```Because he pins price from the same<abbr title="Techno-economic analysis: a bottom-up engineering cost study that estimates what it would cost to produce something at scale, from process steps, input prices, equipment, and facility assumptions.">TEAs</abbr>we build bottom-up (Humbird 2021, Pasitka 2024, Negulescu 2023, CE Delft, GFI), our costdistribution is a natural input to his demand model. Neither of us covers the other's side:we do not model demand or adoption; he does not model supply, economies of scale, or howthe market would clear.## Where the two agree, differ, and what's new*The comparison in this section is our own AI-assisted reading (Claude, currently Opus4.8), not Pablo's characterization of either model — please check it against[his post](https://forum.effectivealtruism.org/posts/ED2ag8hYTWf4kmL3x/cultivating-hope-calibrating-the-expectations-for-cultivated).*On agreements: both projects draw on the same source literature. Pablo emphasizes thatHumbird's 2021 pessimism was driven mostly by amino-acid/media cost — not a hardthermodynamic constraint — and that Pasitka's 2024 empirical work(<abbr title="Hydrolysate: enzymatically broken-down plant or yeast protein (e.g. soy or yeast extract) used as a cheap bulk source of amino acids in the growth medium, in place of purified pharma-grade amino acids.">hydrolysate</abbr>medium at \$0.63/L) pushed that cost down sharply. Our model's cost range is broadlyconsistent with that literature; where the central estimate should sit within the range isexactly the open question, and we take no position on it here.Differences that matter:- *Scope.* We are supply-side and end at a cost distribution; he is demand-side and ends at market shares. His work fills a gap our analysis leaves open — the demand side being one of several things we don't cover.- *Cost level and spread.* His headline biomass figure is \$15–30/kg (point read ~\$25/kg). Our dashboard is a scenario calculator whose default changes as the model is revised; a clean-default check generated on **10 July 2026** showed a median around \$42/kg and p5–p95 around \$12–233/kg. This is a dated snapshot of the then-current code, defaults, and output basis—not a statistic that updates automatically with the live dashboard. The earlier \$56 / \$15–310 figures on this page had already become stale. A separate run of the repository's Python reference implementation on **20 July 2026** still gives about \$56/kg (p5–p95 \$15–311). That is not Monte Carlo noise:`model.py` retains older global density, media-use, and cost-component defaults, whereas the interactive dashboard uses a process-mode mixture and newer parameter structure. Until those implementations are harmonized, every quoted result should name the surface, date, defaults, output basis, and code revision. Prior decompositions suggest that the gap is driven mainly by wider, higher priors on media price and litres of fresh medium per kg, rather than by capital alone, but that claim should be regenerated from a versioned model export before citation.- *Treatment of uncertainty.* Ours is fundamentally a distribution (30k+ <abbr title="Monte Carlo: instead of a single point estimate, we draw tens of thousands of random scenarios from ranges on each input and report the spread of results — so the output is a distribution of possible costs, not one number.">Monte Carlo</abbr> draws over structural priors), as well as an interactive calculator that lets users tune the midpoints, spreads, and structural assumptions; his exposes uncertainty through user-tuned sliders and a lighter Monte Carlo band on the demand parameters.- *What drives each output.* For our cost figure, media cost dominates, followed by growth-factor cost and reactor capital; financing turns out to matter little to the spread. For his market share it is the price ratio R (cultivated cost ÷ conventional price) plus behavioural terms — <abbr title="Loss aversion: people weigh a loss more heavily than an equal-sized gain. Here, paying more than the conventional price feels worse than an equal discount feels good, so a price premium is penalized extra.">loss aversion</abbr>, a "real meat" credit, authenticity/provenance penalties, and <abbr title="Food neophobia: reluctance to try unfamiliar foods. For 'lab-grown' meat this can be strong at first and, in Pablo's model, fades as the product becomes familiar through exposure.">food neophobia</abbr> — none of which appear anywhere in a cost TEA.## What Pablo's first reply addsPablo's [public reply on the EA Forum](https://forum.effectivealtruism.org/posts/ED2ag8hYTWf4kmL3x/cultivating-hope-calibrating-the-expectations-for-cultivated)sharpens the comparison in three useful ways. He agrees that a more detailed Monte Carloand a neutral/optimistic/pessimistic scenario set would help. More importantly, he sayshis optimistic reading is partly an **estimand choice**: for scientific feasibility hecares about what is reasonably achievable at the frontier, not the average performanceacross all attempts. He also treats roughly \$0.20–0.30/L media as achievable and pointsto a company claim of 22,000-L production as evidence that the optimistic scale world maybe materializing.That does not simply move our cost prior downward. It exposes a question the presentpipeline must answer first: are we forecasting (a) the best feasible plant, (b) theaverage qualifying commercial plant, or (c) a capacity-weighted sector average,conditional on large-scale production existing? CM_01 says "average production cost"and conditions on commercial scale being achieved; our model does not yet implement thatconditioning, while Pablo's interpretation is closer to a frontier scenario. The 22,000-Lfigure is also a company claim, not a public cost-and-yield validation dataset. The hackshould model these estimands separately rather than average them together.Genuinely new in his work, relative to ours:- *Species inversion.* The cheap, feed-efficient meats (chicken, pork) are the hardest to displace because conventional price is already low; expensive meats (beef, seafood) and luxury goods are the most penetrable. This is a demand-side pattern — a conjecture his model generates — that our cost model cannot produce.- *Beachhead logic.* Foie gras as the standout entry product — luxury price, unstructured (little scaffolding), and already ethically stigmatized or banned in places. Also high-end fish, tuna, salmon.- *Disruption framing (in his post's discussion, not the formal model).* An innovation-economics argument (Christensen's <abbr title="From Clayton Christensen's 'The Innovator's Dilemma': new technologies rarely win by beating incumbents on the mainstream buyer's existing priorities. They take root in an underserved niche the incumbent ignores, improve, then move upmarket — the path Pablo argues cultivated meat must follow, as electric cars did.">disruptive-innovation theory</abbr>) that improving on incumbents' own dimensions usually fails; cultivated meat needs an underserved segment (vegan/vegetarian attrition, "vegan veto" restaurants, biosecurity-sensitive buyers) plus government or advocacy push, much as electric cars did.- *Behavioural realism.* A random-utility model with an explicit "real meat vs. from-an-animal" separation (GFI's thesis), neophobia that decays with exposure, and income-elasticity effects (would AGI-driven abundance change adoption? — modestly).## Rough notes on strengths and limitations*These are tentative observations from our own AI-assisted reading, not verdicts — andself-assessing our own model is inherently limited, so weight our comments on Pablo's workabove our comments on our own. Neither project is authoritative; both are explicitlyAI-assisted and in progress.*Our cost model — apparent strengths: a first-principles structure, wide and explicituncertainty, a latent "maturity" factor tying technology adoption to financing, adocumented external critique with responses ([Limits/Critique](limits.qmd)), and — with10+ already collected — a link (in progress) to explicitly stated expert and forecasterbeliefs. Apparent limitations: an<abbr title="'Ad hoc dependence structure' means the way we make parameters move together — e.g. tying cheaper financing to more mature technology — is imposed by hand through a single 'maturity' factor rather than estimated from data or derived from theory. It is a reasonable guess, not a measured correlation.">ad hoc dependence structure</abbr>,supplemental proteins (albumin, transferrin, insulin) handled coarsely, sensitivity shownas a dollar-swing ranking rather than a<abbr title="A variance decomposition attributes the total uncertainty in the output to each input — 'input X explains 40% of the variance in cost'. Our current chart instead ranks inputs by how many dollars the cost swings when each is moved across its range, which can rank a wide-but-flat input above a narrow-but-pivotal one.">variance decomposition</abbr>,and a fat right tail that some readers find implausibly pessimistic.Pablo's demand model — apparent strengths: it addresses questions our cost model doesn't;it is calibrated to real data moments (plant-based ~1.2% market share, and the finding that~89% of plant-based buyers are mainstream<abbr title="Flexitarians: mostly-omnivorous consumers who buy plant-based products occasionally, without being vegetarian or vegan. Pablo's point is that most plant-based sales come from this mainstream group, not from the small ethically-motivated vegetarian/vegan segment.">flexitarians</abbr>rather than ethically-motivated vegetarians, Gallup veg+vegan ~5%, measured meat priceelasticities); Pablo reports it reproduces plant-based *milk*'s share<abbr title="Out-of-sample: the model's coefficients were fit to other products, then applied to plant-based milk without further tuning, and still roughly matched milk's observed share. That is evidence the structure generalizes — though we are relaying Pablo's claim, not independently checking it.">out-of-sample</abbr>(without being fitted to it, though we have not verified this); and his species-inversionand beachhead patterns are robust to the diffusion form (which only sets speed, not theceiling). Limitations he flags himself: (a) price elasticities are measured on today'smarginal choices but applied to a not-yet-existing product at very different maturity;(b) the<abbr title="Bass diffusion model: a classic marketing S-curve for how a new product spreads, splitting adopters into 'innovators' who try it independently and 'imitators' pulled in by word-of-mouth. It was designed for one-time purchases of durable goods (TVs, cars), so applying it to repeat grocery buying is a stretch — Pablo uses it only to set how fast adoption approaches its ceiling, not the ceiling itself.">Bass diffusion S-curve</abbr>is built for first-purchase durables, not repeat grocery buys; (c) several behaviouralweights are solved to hit calibration targets rather than independently measured; and(d) the scaffold cost (\$6/kg) is an unsourced assumption. He also notes a scope boundary— precision fermentation (egg, dairy) is left out for want of a good TEA — which readsless as a flaw than as a direction for new work.Which is more credible? They are not rivals — they are not estimating the same quantity.On the shared cost question, Pablo reads the optimistic end of a range our distributionalso covers; our median is higher mostly because of our wider, higher media-cost priorsand fat tail, not (as one might assume) because of capital and operating costs. His demandwork is the more novel and, within its stated caveats, the more decision-relevantcontribution: even a cheap cultivated product may capture little chicken or pork share,which reframes what "success" looks like — though this<abbr title="My own intuition (David Reinstein), not part of Pablo's model: especially early on, a cultivated 'chicken' or 'shrimp' product may be received as its own distinct food rather than competing head-to-head only with the conventional product it imitates, so cross-category substitution could matter more than a per-species contest implies.">species-by-species framing has an important caveat</abbr>.## Interactive bridge: from a cost per kg to a market shareThe calculator below takes a cultivated biomass cost (seed it with our model's output, orwith Pablo's optimistic read) and runs a much-simplified version of his cost-to-sharelogic: delivered cost → retail<abbr title="Price ratio R = cultivated delivered cost ÷ conventional retail price. R = 1 means price parity; R = 2 means cultivated costs twice as much as the conventional product it competes with.">price ratio R</abbr>against each species' conventional US price → a two-way conventional-vs-cultivated<abbr title="Logit / discrete-choice share: a standard economics way to turn a 'how much better or worse is option A than option B' score into a probability that a consumer picks A. Larger score → larger share, following an S-shaped curve.">logit share</abbr>.::: {.callout-important collapse="false"}## This is NOT Pablo's model — it is a rough stand-in. Read before trusting any number.Pablo's real model is a two-segment, four-product<abbr title="Random-utility (discrete-choice) model: each option gives a consumer a 'utility' score built from price and product attributes plus a random taste term; the model predicts the probability each option is chosen. The logit share is the standard closed-form version.">random-utility</abbr>system with income effects, loss aversion, and diffusion timing. What runs below is *none of that*. It is aone-line approximation we wrote to build intuition: a single-attribute logit whose slopewe simply *reverse-engineered* to pass through two numbers Pablo reports — at price parity(R = 1) about 49% share, and at R ≈ 2.4 about 9% share — and to which we then bolt theper-tier authenticity offsets he documents (mince +0.2, cut −0.4, premium −1.5; foie grastreated as unstructured and stigmatized, so a small penalty). It *omits* his two consumersegments, the outside "whole-food" option, income effects, loss aversion, and alldiffusion timing. Because it is pinned to only two of his points, it can only reproduce the*shape* of his story (cheap species resist, expensive and luxury ones are penetrable), nothis actual per-species shares. For any number you would cite, use[his interactive model](https://pabloamc.github.io/Cultivated_meat/interactive.html), notthis one. We would happily replace this with a faithful port, or with his own code, if heis open to it.There is also a **cost-basis mismatch** before the demand equation begins. `cbio` is afuture factory-gate biomass cost; the comparison prices are approximate 2025 US retailprices. The toy assumes 100% cell inclusion and adds only scaffold (for cuts) plus ageneric markup. It omits recovery yield, non-cell ingredients, formulation,texturization, packaging, distribution, tax, retail margin, future conventional prices,and inflation. Until those are harmonized, the resulting price ratio and share are usefulonly for illustrating the mechanism.:::```{ojs}//| echo: falseviewof cbio = Inputs.range([5, 120], {value: 42, step: 1, label: "Cultivated biomass cost ($/kg)"})``````{ojs}//| echo: falseviewof markup = Inputs.range([0, 10], {value: 5, step: 0.5, label: "Illustrative value-chain add-on m ($/kg)"})``````{ojs}//| echo: falseviewof scaffold_cut = Inputs.range([0, 12], {value: 6, step: 0.5, label: "Scaffold cost for structured cuts k ($/kg)"})``````{ojs}//| echo: false{ const setC = (v) => { viewof cbio.value = v; viewof cbio.dispatchEvent(new Event("input", {bubbles: true})); }; const btn = (label, v) => { const b = html`<button style="padding:5px 11px; font-size:12.5px; cursor:pointer; border:1px solid #2d4a2d; border-radius:6px; background:#2d4a2d; color:white;">${label}</button>`; b.onclick = () => setC(v); return b; }; return html`<div style="margin:2px 0 12px; display:flex; flex-wrap:wrap; gap:8px; align-items:center;"> <span style="font-size:12.5px; color:#555;">Reference cost points — click to load:</span> ${btn("Our model default p50 on 10 Jul ($42)", 42)} ${btn("Our model default p5 on 10 Jul ($12)", 12)} ${btn("Pablo optimistic (~$25)", 25)} ${btn("Pasitka best future (~$22)", 22)} </div>`;}``````{ojs}//| echo: false// --- Simplified port of Pablo AMC's Stage 1-2 (cost -> price ratio -> share) ---// Calibration: logit slope gamma pinned to his two reported points:// share(R=1) ~ 0.49 -> logit ~ 0.00 (constant c0)// share(R=2.4) ~ 0.09 -> logit ~ -2.31 at ln(2.4)=0.875 -> gamma = 2.64gamma = 2.64c0 = -0.04logistic = (x) => 1 / (1 + Math.exp(-x))// Species: approximate 2025 US retail price ($/kg) + tier + authenticity offset tau.// Prices are rounded from US averages (per lb x 2.2046 = per kg):// Chicken breast boneless ~$4.17/lb -> ~$9/kg (BLS/FRED APU0000FF1101, late 2025)// Pork chops ~$4.1/lb -> ~$9/kg (BLS Average Price program)// Ground beef 100% ~$4.56/lb -> ~$10/kg (FRED APU0000703112, 2025)// Beef steak (avg of cuts) ~$10.2/lb -> ~$22/kg (BLS/USDA ERS, 2025)// Salmon fillet ~$11/lb -> ~$24/kg (typical US retail; no single BLS series)// Shrimp (whole/shell-on) ~$8/lb -> ~$18/kg; shrimp paste/processed cheaper ~$11/kg// (typical US retail; rough anchors, no single BLS series)// Foie gras ~$80/kg -> illustrative luxury anchor only, NOT an official price series// Tier "unstructured" => no scaffold cost; "cut" => scaffold applies.species = [ {name: "Chicken breast", pc: 9, tier: "cut", tau: -0.4, structured: true}, {name: "Pork", pc: 9, tier: "cut", tau: -0.4, structured: true}, {name: "Ground beef", pc: 10, tier: "mince", tau: +0.2, structured: false}, {name: "Beef steak", pc: 22, tier: "cut (premium)",tau: -0.4, structured: true}, {name: "Salmon", pc: 24, tier: "cut", tau: -0.4, structured: true}, {name: "Shrimp (whole)", pc: 18, tier: "cut", tau: -0.4, structured: true}, {name: "Shrimp paste", pc: 11, tier: "mince", tau: +0.2, structured: false}, {name: "Foie gras", pc: 80, tier: "luxury/unstructured", tau: +0.1, structured: false},]rows = species.map(s => { const delivered = cbio + (s.structured ? scaffold_cut : 0) + markup const R = delivered / s.pc const share = logistic(c0 - gamma * Math.log(R) + s.tau) return {name: s.name, tier: s.tier, pc: s.pc, delivered, R, share}})``````{ojs}//| echo: falsehtml`<div style="overflow-x:auto; max-width:100%;"><table style="width:100%; min-width:620px; border-collapse:collapse; font-size:13.5px; margin:8px 0;"><thead><tr> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="The conventional product cultivated meat would compete with, and its product form (mince = ground/paste, no scaffold needed; cut = whole muscle, needs a scaffold; luxury = premium/prestige)."><span class="th-hint">Product (form)</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Approximate 2025 US retail price of the conventional product, in dollars per kg."><span class="th-hint">Conventional<br>retail $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Illustrative unit-cost proxy = biomass cost + scaffold (for cuts) + one generic value-chain add-on. This is not a modeled retail price."><span class="th-hint">Illustrative<br>unit cost $/kg</span></th> <th style="padding:8px; text-align:right; white-space:nowrap; background:#2c3e50; color:#fff;" title="Price ratio R = cultivated cost ÷ conventional price. Below 1 = cheaper than conventional; above 1 = more expensive."><span class="th-hint">Price<br>ratio R</span></th> <th style="padding:8px; text-align:left; background:#2c3e50; color:#fff;" title="Estimated share of THIS product's own market that cultivated would capture, from the simplified logit. Not a share of all meat. The bar width uses a compressed (square-root) scale so small shares stay visible; the % is exact."><span class="th-hint">Cultivated share of<br>this product's market</span></th></tr></thead><tbody>${rows.map(r => html`<tr style="border-bottom:1px solid #dee2e6;"> <td style="padding:7px 8px;">${r.name} <span style="color:#888; font-size:11.5px;">(${r.tier})</span></td> <td style="padding:7px 8px; text-align:right;">$${r.pc.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">$${r.delivered.toFixed(0)}</td> <td style="padding:7px 8px; text-align:right;">${r.R.toFixed(2)}×</td> <td style="padding:7px 8px;"> <div style="display:flex; align-items:center; gap:8px;"> <div style="flex:0 0 46px; text-align:right; font-variant-numeric:tabular-nums;">${(r.share*100).toFixed(1)}%</div> <div style="flex:1; background:#eef1ee; border-radius:4px; height:12px; overflow:hidden;"> <div style="width:${Math.min(100, Math.sqrt(r.share)*100)}%; height:100%; background:${r.share>0.3?'#2d7a2d':r.share>0.08?'#c8862b':'#b04a4a'};"></div> </div> </div> </td></tr>`)}</tbody></table></div><p style="font-size:12px; color:#666; margin-top:6px;">Hover any column header for what it means. Bar width uses a compressed (square-root) scaleso small shares stay visible next to foie gras. The percentage is calculated exactly bythis toy equation, but it is <em>not an empirical estimate or forecast</em>; the bar is onlya rough visual. Colour: green > 30%, amber 8–30%, red < 8%.<br>Ordering is driven almost entirely by R (cost fixed, conventional price varies) plus theproduct-form offset — reproducing Pablo's inversion: cheap chicken and pork resist, whileexpensive beef, seafood, shrimp, and luxury foie gras are more penetrable. (Pablo alsonotes cultivated shrimp has a practical edge his model doesn't capture: no shells or headsto remove.)<br>Conventional prices are rounded 2025 US retail figures (per lb × 2.2 = per kg): chickenbreast ~$9/kg and pork ~$9/kg (US BLS Average Price / FRED series), ground beef ~$10/kg(FRED APU0000703112), steak ~$22/kg (BLS/USDA ERS). Salmon ~$24/kg and shrimp(~$18/kg whole, ~$11/kg paste) are typical retail figures without a single officialseries; foie gras ~$80/kg is an illustrative luxury anchor, not an official price. Changeany of these and the ordering can shift.</p>````Try loading the scenario buttons and watch the toy shares move. Under its own fixedassumptions, the calculator generates the species-inversion pattern: chicken and pork areharder to displace than higher-priced products. This demonstrates the mechanism; it doesnot establish the magnitude or even preserve the ordering once inclusion rates,future-year prices, value-chain costs, cross-category substitution, and the omittedbehavioural structure are modeled properly.## Possible next steps for reconciliation- *Harmonize the repository's own model surfaces.* Make the interactive OJS dashboard and`model.py` read one parameter schema and pass a parity test before using either as a canonical numerical baseline.- *Fix the estimand first.* Separate P(qualifying large-scale production exists) from the cost conditional on existence, and report frontier, average-plant, and capacity-weighted sector scenarios separately.- *Harmonize the value chain and currency basis.* Convert all monetary inputs to one constant-dollar year, then bridge biomass cost to retail price with explicit recovery, inclusion rate, other ingredients, processing, packaging, distribution, tax, and margin.- *Then feed the full distribution, not a point.* Pipe the conditional cost distribution into a faithful cost-to-share implementation to produce a share distribution per species, rather than reading one cost point at a time.- *Reconcile the media priors.* The remaining cost gap appears to be driven largely by medium price (\$/L) and fresh-media intensity (L/kg), but regenerate that decomposition from a versioned export before treating it as a result.- *Joint parameters.* His scaffold (\$6/kg) and markup (\$5/kg) assumptions are exactly the kind of parameter our elicitation and workshop process could put priors on.- *Conversation.* Pablo invited collaboration; the [CM workshop](https://uj-cm-workshop.netlify.app/) crux-mapping between "skeptics and optimists" is a natural venue.*Provenance: this page was drafted quickly with AI assistance from Pablo's public post,model, first public reply, and our own repo. Pablo has acknowledged the comparison andoffered initial comments, but he has not reviewed this page line by line. See the[`pabloamc_bridge/README.md`](https://github.com/unjournal/cm_pq_modeling/blob/main/dashboard/pabloamc_bridge/README.md)notes for the faithfulness caveats (the link resolves once this is pushed to GitHub).*