Production

Optimise · MILP

MILP scheduler

A single-formulation mixed-integer scheduler assigns each unit to a period to maximise discounted value under precedence and capacity — and a separate interface imports MineMax scenarios for financial reporting.

See it

What it does

Exact binary assignment

Each unit mined in at most one period, maximising NPV under cumulative same-period precedence.

Mill-fill objective

Per-period min/max capacities with an ore-target underfill penalty — keep the mill full except the last periods.

Sliding-window solve

Solve a window, lock the first periods, carry locked tonnes and precedence, slide and repeat — for long horizons.

No commercial solver

HiGHS branch-and-bound via SciPy on sparse constraint matrices, with NetworkX DAG validation.

MineMax scenario import

A separate interface imports MineMax schedules for cost-model mapping, cashflow/NPV and Sankey views.

Feeds the cost model

Imported process schedules map to cost-model roles — ore-to-plant, waste, grade, price deck, capex.

How it works — the engineeringTechnical detail

scipy.optimize.milp (HiGHS) with time-limit, gap and presolve controls, sharing mining-unit and precedence helpers with the BZ module. A clean, exact scheduler that complements the BZ and DBS engines; the separate milp app is the MineMax import and financial-reporting interface, distinct from this native solver.

flowopt/services/full_milp_scheduler.py · milp/ (minemax_extractor, sankey_extractor)