Repository navigation
What's Changed
Bug Fixes
- Classic algorithm no longer freezes on certain datasets: the hill-climb loop in both single and double sphere modes could traverse large flat landscapes indefinitely due to a radius tie-breaking condition. The algorithm now only moves on strict datafit improvement, with radius minimization resolved once at convergence.
- Double sphere containment constraint bug fix: the containment check in
_classic_two_fitwas evaluated against the stale center position rather than the candidate being tested, leading to incorrect constraint enforcement.
Performance Improvements
- Classic algorithm: radius search is now fully vectorized — all ~87 candidates are evaluated in a single NumPy broadcast per corner instead of individual
compute_datafitcalls. All 8 corner distances are also computed simultaneously, significantly reducing per-iteration overhead. - Differential evolution: the loss functions now support batch evaluation of the entire population
(n_params, S) → (S,)in one NumPy operation, enabled via scipy'svectorized=Truemode. This replaces the previous per-member Python call loop.
Parameter Defaults Updated
de_maxiter:2000 → 1000(convergence typically occurs well before this limit)de_updating:'immediate' → 'deferred'(required by scipy for vectorized evaluation)
Full Changelog: v1.1.7...v1.1.8