Make life-cycle cost a simulated output of RepairableRBD's discrete-event simulation: attach cost to the events the DES already produces and return an LCC distribution with confidence intervals (reusing the existing seed + ConfidenceInterval machinery), plus a cost breakdown.
The principle — why this, and not a logistics sim
Cost rides on events the model genuinely owns — a failure, a repair, a spell of downtime, a replacement — all of which fall straight out of the fitted failure-time and restoration-time distributions the simulation already generates faithfully. So costing needs no model of the maintenance organisation (crews, dispatch, queues, spare pools) — which is exactly the part that can't be validated (the modeller is structurally disconnected from the people who do the work) and where detailed RAM/LSA logistics simulations tend to produce precise-but-unfounded numbers.
Downtime realism is handled the right way for this split: fit the restoration-time distribution from observed downtime (it already embeds logistics delay as it actually occurred) in surpyval and let the sim consume it — more valid than mechanistically simulating a dispatch process.
Scope
Explicitly out of scope (deliberate)
- Crews / repair resources / queuing / dispatch, and spare-pool logistics DES. Low validity (the modeller–doer disconnect); realism is captured via the fitted restoration distribution instead. If spares are ever wanted, do the analytical marginal-analysis stocking version — not a DES — and as a separate, optional add-on.
Relationships
Estimate
Effort: M (cost-on-existing-events + LifeCycleCostResult) → L if the scheduled-PM / inspection event type is included · Value: High
The cost engine is a clean extension of the existing event-queue DES, defensible precisely because it only prices events the model already owns — it stays on the right side of the validity line by construction. LCC is the headline output RAM users actually want. Slots into the 0.9.0 "Maintenance & Optimization" bucket as its objective function.
Make life-cycle cost a simulated output of
RepairableRBD's discrete-event simulation: attach cost to the events the DES already produces and return an LCC distribution with confidence intervals (reusing the existing seed +ConfidenceIntervalmachinery), plus a cost breakdown.The principle — why this, and not a logistics sim
Cost rides on events the model genuinely owns — a failure, a repair, a spell of downtime, a replacement — all of which fall straight out of the fitted failure-time and restoration-time distributions the simulation already generates faithfully. So costing needs no model of the maintenance organisation (crews, dispatch, queues, spare pools) — which is exactly the part that can't be validated (the modeller is structurally disconnected from the people who do the work) and where detailed RAM/LSA logistics simulations tend to produce precise-but-unfounded numbers.
Downtime realism is handled the right way for this split: fit the restoration-time distribution from observed downtime (it already embeds logistics delay as it actually occurred) in surpyval and let the sim consume it — more valid than mechanistically simulating a dispatch process.
Scope
LifeCycleCostResult(typed): total LCC mean + confidence interval, breakdown by category (corrective / preventive / downtime / replacement) and by component, and cost-rate over the horizon. Reusesnumpy_seedand theConfidenceInterval/AvailabilityResultpattern.cost-rate × horizonfrom the component maintenance layer (Decide the fate of the vestigialRepairableclass #33) on simple systems.Explicitly out of scope (deliberate)
Relationships
NonRepairable/Repairable/MaintenancePolicy, Decide the fate of the vestigialRepairableclass #33) — this lifts cost to the system, simulated, over a horizon.Estimate
Effort: M (cost-on-existing-events +
LifeCycleCostResult) → L if the scheduled-PM / inspection event type is included · Value: HighThe cost engine is a clean extension of the existing event-queue DES, defensible precisely because it only prices events the model already owns — it stays on the right side of the validity line by construction. LCC is the headline output RAM users actually want. Slots into the 0.9.0 "Maintenance & Optimization" bucket as its objective function.