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)