Skip to main content

Module minima

Module minima 

Source
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 — softened 1/‖x−x*‖^p poles (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 MinimaArchive in python/pounce/_minima.py.
penalty_tnlp
Objective-augmenting TNLP wrappers for the repulsion --minima strategies (flooding / deflation / tunneling).
sampling
Start-point sampling for --minima: scrambled Sobol’ or uniform box sampling when a finite box is known, else Gaussian jitter around x0. Mirrors _sample / _make_sobol in python/pounce/_minima.py.

Functions§

run
Entry point: run the --minima search on base (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.