Skip to content

feat: extend Investment model for advanced multi-period scenarios #88

@FBumann

Description

@FBumann

Summary

The current Investment model covers the core build-once timing problem well (binary build/active, lifetime retirement, big-M linearization, NPV weighting). Several extensions from the energy systems MILP literature could be added incrementally.

Potential Extensions

Integer / Lumpy Investment

  • Add n_units[flow, period] ∈ ℤ⁺ for discrete unit counts (e.g., number of turbines)
  • cap_new[t] = n_units[t] · unit_size instead of continuous sizing

Cumulative / Repeated Investment

  • Allow multiple build events for the same technology across periods
  • Requires shifting from single invest_size to cumulative capacity accumulation:
    cap[t] = cap[t-1] + cap_new[t] - cap_retired[t]

Endogenous Early Retirement

  • Add a binary retire_early[flow, period] decision variable
  • Allows decommissioning before lifetime expires (stranded asset modeling)

Precedence / Dependency Constraints

  • Express inter-technology dependencies: "H₂ electrolyzer requires renewable capacity first"
  • build[h2, t] ≤ Σ_{τ≤t} build[wind, τ]

Construction Lead Time

  • CAPEX charged at construction start, capacity available only after lead time
  • active[t] = build[t - lead_time] instead of build[t]

Stochastic / Scenario-Based Investment

  • Two-stage: invest now (here-and-now), operate under scenarios (wait-and-see)
  • Scenario tree over investment periods

Context

Based on a literature review of MILP capacity expansion planning (GenX, PyPSA, TIMES/MARKAL, OSeMOSYS). Each extension is independently useful and can be added incrementally without breaking the current API.

References

  • Palmintier & Webster (2011) — UC constraints in generation expansion
  • Heuberger et al. (2017) — Endogenous learning in multi-period MILP
  • Neumann & Brown (2021) — Near-optimal feasible space of renewable systems
  • GenX documentation — explicit MILP formulation for CEP

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions