Expand description
Multistart / find-minima driver for the pounce CLI (--minima).
A pure-Rust port of pounce.find_minima (python/pounce/_minima.py):
drive the same local IPM solver in a loop, escaping already-found minima
by one of six strategies, and collect the distinct local minima into a
deduplicated archive. The strategies and their references:
multistart— random / Sobol’ box sampling.mlsl— Multi-Level Single Linkage clustering (Rinnooy Kan & Timmer 1987).basinhopping— Metropolis chain over minima (Wales & Doye 1997).flooding— repulsive Gaussian bumps (filled-function; Ge 1990).deflation— softened1/‖x−x*‖^ppoles (Farrell et al. 2015).tunneling— equal-height tunnel between descents (Levy & Montalvo 1985).
The local solver is reused across starts on a single IpoptApplication
(no rebuild per start): each start wraps the base TNLP in a
SeededTnlp (and, for the repulsion strategies, a penalty wrapper).
Acceptance mirrors _minima.py: solve succeeded ∧ finite ∧ in-bounds ∧
(Hessian PSD within psd_tol) ∧ not already in the archive.
Modules§
- archive
- Archive of accepted minima with per-dimension-scaled dedup, mirroring
MinimaArchiveinpython/pounce/_minima.py. - penalty_
tnlp - Objective-augmenting TNLP wrappers for the repulsion
--minimastrategies (flooding / deflation / tunneling). - sampling
- Start-point sampling for
--minima: scrambled Sobol’ or uniform box sampling when a finite box is known, else Gaussian jitter aroundx0. Mirrors_sample/_make_sobolinpython/pounce/_minima.py.
Functions§
- run
- Entry point: run the
--minimasearch onbase(the raw problem TNLP — presolve / counting wrappers are intentionally bypassed so coordinates match the original problem and the clean objective is evaluated directly). Returns the process exit code.