Add multi-base chain modelling, fix price-band-aware demand/supply, tranche-split sell tool

- puga/network.py + tools/network.py: model a multi-base chain (e.g. mine LST at one base,
  ship it, consume it at another). Simulates each base independently, nets a transferred
  material's producer-surplus against consumer-need, charges real freight only on what's
  moved, cm_free for a founding covered by a Core Module Kit. Worked example in plans/chains/.
- puga/saturation.py: real price-band filtering. FIO's order_book NarrowPriceBandLow/High and
  WidePriceBandLow/High match APEX's own displayed Price Band exactly (verified live) - an
  order outside it is a stale artifact, not just uncompetitive. Added in_band() and
  effective_demand(); effective_supply() gained the same hard band filter alongside its
  existing soft vwap-proximity filter (renamed that param mult to free up `band`). Wired into
  tools/scan.py stage 2 in place of the raw, unfiltered demand figure. Was flagged as an
  unimplemented refinement in saturation-design.md since the original design review.
- tools/sell.py: self-contained tranche split (aggressive tranche capped at a volume quantile,
  median normally or 80th pct with --tight when a payment is imminent and stockout risk
  outweighs margin; patient tranche priced under the next competitor tier). Instant-bid
  comparison moved behind --show-bid (off by default).
- Docs and roadmap updated accordingly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-25 14:32:09 +02:00
co-authored by Claude Sonnet 5
parent e2e592cae3
commit 58db08b921
15 changed files with 434 additions and 21 deletions
+8
View File
@@ -0,0 +1,8 @@
# Multi-base chain: Nike mines LST, ships it to Deimos, Deimos turns it (+ market AL) into BSE.
# trip_cost/cargo are placeholders (see tools/network.py) until a real fuel model exists.
name: "Nike LST -> Deimos PP2 (BSE)"
bases:
nike: {plan: plans/examples/nike_lst_ext.yaml, cm_free: true} # founded via the faction expansion contract's kit
deimos: plans/examples/deimos_pp2_bse.yaml
transfers:
- {material: LST, src: nike, dst: deimos, trip_cost: 9250, cargo: 500}
+16
View File
@@ -0,0 +1,16 @@
# Deimos: the WHOLE base (EXT+SME+HWP, matching base_plus_hwp.yaml) plus a PP2 making BSE from
# AL (bought at market here; own-AL self-sufficiency is a separate refinement) and LST (received
# from Nike via the network chain, not bought). Must be the whole base, not just the PP2 addition,
# so workforce capacity (existing HB1/HB2) and AL netting resolve correctly (docs/library.md).
name: "[PuGa] Deimos base + HWP + PP2 (BSE from AL+LST)"
planet: ZV-759c
permits: 1
cogc: METALLURGY
hq: false
experts: {METALLURGY: 2}
infrastructure: {HB1: 4, HB2: 1}
buildings:
- {building: EXT, amount: 2, recipes: ["EXT#ALO"]}
- {building: SME, amount: 5, recipes: ["ALO,FLX,C,O=>AL"]}
- {building: HWP, amount: 1, recipes: ["AL,STL,HE=>BHP"]}
- {building: PP2, amount: 1, recipes: ["AL,LST=>BSE"]}
+12
View File
@@ -0,0 +1,12 @@
# Nike (ZV-194a): a new base with just the LST extractor + its pioneer housing.
# Founding assumed via the faction expansion contract's Core Module Kit; only the SEA env
# material (25, low pressure) is a real extra cost, not modelled here (see empire notes).
name: "[PuGa] Nike LST extraction"
planet: ZV-194a
permits: 1
cogc: CONSTRUCTION
hq: false
experts: {}
infrastructure: {HB1: 1}
buildings:
- {building: EXT, amount: 1, recipes: ["EXT#LST"]}