Applying Modified Internal Rate of Return to the factory-vs-colonizer decision. Instead of brute-force search, use a financial metric to determine which investment has a better return at each decision point.
Links: MIRR — 4X Framework (the portable thesis this is a specimen of), MOO1 Optimal Strategy, Risk and Entrepreneurship, Value and Profit, Bilateral Trade Valuation, The Dominance-Frontier Lens (MIRR as the investment-decision frontier) Project: moo1-opening-optimizer
At any given turn, your homeworld’s production can go toward:
The GA optimizer found good strategies by brute-force searching parameter combinations. But it doesn’t explain why one strategy beats another. MIRR gives us that — a principled comparison of investment quality at each decision point.
NPV (Net Present Value): Requires a discount rate chosen in advance. In MOO1, what’s the discount rate? It’s not obvious — it depends on the game state. NPV is useful for comparing two specific cashflows but doesn’t tell you the rate of return.
IRR (Internal Rate of Return): The rate that makes NPV = 0. Problem: IRR assumes reinvestment at the IRR itself, which is unrealistic. A colony that returns 50% doesn’t mean you can reinvest those returns at 50%.
MIRR (Modified IRR): Fixes IRR’s reinvestment assumption. Uses a realistic reinvestment rate (the return available from the next best alternative). In MOO1, the reinvestment rate is roughly the marginal factory return — because any production not spent on the colony ship goes to factories.
MIRR = (FV of positive cashflows at reinvestment rate / PV of costs at finance rate)^(1/n) - 1
Cost: factory_cost × base_robot_controls / 2 BC (one-time)
Return stream: FACTORY_OUTPUT × mineral_mod BC per turn, forever (until the factory is no longer manned)
Constraint: Factory only produces if manned (need pop ≥ factories / robot_controls)
Example (Normal mineral, starting tech):
The marginal factory return decreases when:
Costs (multi-part):
Return stream:
The marginal colony return depends on:
At each turn, compute:
If factory MIRR > colony MIRR → build factory. If colony MIRR > factory MIRR → build toward colony ship.
This should converge to the same optimal strategies the GA found, but with explanation — you can see exactly when and why the decision flips from “build factories” to “build colony ship.”
From the existing GA results, we expect:
Implementation in moo1-opening-optimizer/moo1/mirr.py. Simulation-based factory MIRR (runs with/without extra factory, measures production difference) vs colony MIRR (full cost accounting: construction, maintenance, transit, pop loss).
Normal 80-pop colony @ 3 parsecs, 50-turn horizon:
| Race | Crossover Turn | Factories at Crossover | Pop | Interpretation |
|---|---|---|---|---|
| Klackon | Turn 8 | 68 | 75 | 2× production makes colonies productive fast — colonize early |
| Sakkra | Turn 13 | 76 | 99 | Fast pop growth fills colony quickly — colonize after minimal factories |
| Human | Turn 25 | 151 | 100 | No bonus — fill factories first, colonize after pop caps |
| Psilon | Turn 25 | 151 | 100 | Research bonus doesn’t help early production — same as Human |
Key finding: The Klackon result was unexpected — the prediction was that 2× production would make factory MIRR higher for longer (delaying colonization). Instead, 2× production makes the COLONY more productive too, and the colony benefits more from the multiplier because it compounds from a fresh start. The production bonus helps colonies more than factories because colonies have more growth headroom.
Rich colony target: Colony MIRR exceeds factory MIRR from turn 1 for Klackon — the model says “colonize immediately, never build factories.” This matches experienced player knowledge: if a Rich planet is nearby, always grab it first.
The current model simplifies several factors that would push the crossover EARLIER:
All of these make factory MIRR worse and colony MIRR better — so the real crossover likely happens earlier than shown. The model is conservative in favoring factories.
This is Risk and Entrepreneurship applied to a game:
The MOO1 simulator gives us clean data to test this because the game has no noise — no market fluctuations, no competitors (in single-player opening), no random events. It’s a pure investment optimization problem. If MIRR works here, it validates the framework for messier real-world applications.