Skip to content

MIMOSA 1.4.0

Status: released 18 August 2026

MIMOSA 1.4.0 adds configurable model-period lengths, more complete global cost output and runtime metadata for optimisation and simulation runs. It also improves solver robustness for models in which preprocessing leaves satisfied constant equalities.

The default calendar grid now uses five-year timesteps through 2050 and ten-year timesteps thereafter, instead of using five-year timesteps for the complete horizon. Default numerical results can therefore differ from MIMOSA 1.3.2. Users who require the previous uniform grid can restore it explicitly, as described in the compatibility notes below.

Highlights

  • Model runs can use one or more timestep-length changes over their horizon.
  • The time horizon, initial timestep length and later changes are configured separately.
  • Regional cost series expressed as fractions of GDP receive derived global rows during export when the model does not already define those rows.
  • Optimisation and simulation parameter files include runtime metadata in seconds.
  • IPOPT solves can recover from satisfied constant equalities left by fixed-variable propagation.

Variable model-period lengths

The time grid now has three configuration elements:

  • time.end sets the final model year;
  • time.dt sets the initial timestep length; and
  • time.periods maps a change year to the timestep length used after that year.

For example, the following configuration uses five-year timesteps through 2050, ten-year timesteps through 2150 and twenty-year timesteps thereafter:

params["time"]["end"] = 2290
params["time"]["dt"] = 5
params["time"]["periods"] = {2050: 10, 2150: 20}

Every change year and the final year must be reachable using complete timesteps. Within model equations, m.period_length[t] gives the number of years since the preceding timestep and is zero for the initial timestep. Discounting, cumulative quantities, capital depreciation and other time-dependent equations now use the applicable period length.

The new default starts in 2025, advances in five-year steps through 2050 and then in ten-year steps through 2150. The coarser later grid reduces the number of model periods relative to MIMOSA 1.3.2.

Derived global cost output

Some cost quantities are only required regionally while solving the model. During CSV export, MIMOSA now adds the corresponding global_<cost variable> row when a regional cost variable:

  • is indexed by time and region;
  • is expressed as a fraction of GDP; and
  • has no existing global counterpart.

Where available, absolute regional costs are summed and divided by global gross GDP. Otherwise, absolute costs are reconstructed from the regional GDP-relative values. These rows are export-only results: they are not added to the Pyomo model and cannot be accessed as model attributes.

Runtime metadata

Saved optimisation and simulation parameter files now include a top-level numeric field such as:

"Runtime (seconds)": 12.35

For optimisation output, this measures the complete model.solve() call and excludes model creation and prerunning. For simulation output, it measures the model.run_simulation() call that produced the saved simulation object. Each simulation object retains its own runtime, so results may be saved in a different order from the order in which they were calculated.

Runtime is rounded to hundredths of a second in the parameter file. It is output metadata rather than configuration and therefore does not affect configuration hashes.

Solver robustness

Fixed-variable propagation can leave satisfied constant equalities in a generated Pyomo model. When the number of active equalities would otherwise cause IPOPT to reject the problem, MIMOSA now deactivates verified trivial constraints before solving. The transformation is applied only when required, preserving the existing sparse problem structure for ordinary runs.

Compatibility notes

MIMOSA 1.3.2 supported a single uniform timestep length through time.dt; time.periods is new in 1.4.0. The existing time.end and time.dt settings remain valid and specify the final year and initial timestep length. Because the default configuration now includes {2050: 10}, runs using default parameters switch to ten-year timesteps after 2050.

To reproduce the uniform five-year grid that was the default in MIMOSA 1.3.2, use:

params["time"]["end"] = 2150
params["time"]["dt"] = 5
params["time"]["periods"] = {}

Run scripts that accept the new default grid require no code changes, but should not assume numerical identity with 1.3.2. Export consumers should also allow the new global cost rows and the Runtime (seconds) parameter-file field.