Change Log
v0.5.6
(under development)
/
v0.5.5
(2026-02-23)
- improved:
- API
- improve usage ergonomics of
DiversityMetricby making it a plain StrEnum. - reorganize internal, non-public-API functionality into
max_div._core - create top-level
max_div.solver, ... modules for user-facing API
- improve usage ergonomics of
- docs
- extend solver preset benchmarking data (U1-U4, C1-C4)
- minor improvements to docs figures layout
v0.5.4
(2026-02-16)
- new:
-
add
--max-run-duration-minutesoption tobenchmark solver presetsCLI command. -
improved:
- simplify: remove
glightboxmkdocs plugin; due to limited zoom functionality and awkward ergonomics on mobile. - improved q10-q90 solver preset results uncertainty estimation
- extend solver preset benchmarking data (U3, U4)
v0.5.3
(2026-02-14)
- new:
-
add tabular solver preset benchmark results to docs
-
improved:
- tweaks to docs figures layout
v0.5.2
(2026-02-11)
- new:
-
docs: add solver preset benchmarking results
-
improved:
- tweaks to docs figures layout
- improve how solver preset benchmarks are set up and executed
v0.5.1
(2026-02-09)
- new:
-
docs: add illustrations to all 8 solver benchmark problems & restructure for clarity
-
improved:
- use
InitRandomOneShotinstead ofInitFastfor all presets, to allow seed to more strongly affect outcome, increasing the chance to get good results across multiple seeds - solver preset benchmarking functionality
- improved scope calculations (higher accuracy for target duration; avoid too short durations)
- improved result reporting (case-specific number formatting; no constraint score for unconstrained problems)
v0.5.0
(2026-02-01)
- new:
-
add solver preset benchmarking capabilities to CLI
-
improved:
-
rename cli command
benchmark solver runtobenchmark solver strategiesto accommodate future additions. -
deprecated:
-
remove platform benchmarking functionality (formerly used to estimate duration of initialization strategies in presets)
-
internal:
- refactor Markdown formatting functionality for easier reuse
v0.4.7
(2026-01-27)
- improved:
- general solver (
SolverState) low-level speed optimizations (factor ~2-3x)- keep track of selection as a boolean numpy array, instead of a SortedSet
- keep track of constraint membership as numpy arrays instead of Python lists
- implement
SolverState.add_many,SolverState.remove_manymethods for more efficient batch modifications
- solver presets
- streamline RANDOM & GUIDED presets to always use 'fast' initialization, like all other presets.
v0.4.6
(2026-01-26)
- new:
- make adaptive Poisson-based sampling (used for swap size and # candidates meta-parameter sampling) cost-aware, by penalizing adapting towards larger, more expensive values.
-
extend solver benchmark problems A1-A5 to extended set of 4 unconstrained (U1-U4) and 4 constrained (C1-C4) problems
-
improved:
- solver presets
- tweaks to SMART & THOROUGH presets for faster convergence
- increase adaptive sampling learning rate by ~10x
- make adaptive sampling cost-aware (SMART: 0.5, THOROUGH: 0.1)
- make solver debug info reporting (verbosity=25) more informative (a.o., added swap success %)
- make all numbs.njit-decorated functions cached
v0.4.5
(2026-01-20)
- new:
- add ability to ignore diversity if constraints are not yet satisfied, the first 'f' fraction of optimization step progress
- add new optimization strategy 'OptimSmartSwaps', leading to more robust & faster convergence across the board
- add new solver presets:
RANDOM: baseline strategy for reference (usingOptimRandomSwaps)GUIDEDformer defaultSMART: new defaultTHOROUGH: same asSMARTbut with significantly wider sampling ranges forswap_size,nc_add&nc_remove.
v0.4.4
(2026-01-18)
-
new:
- support sampled parameters (using
AdaptiveSamplerclass) in optimization strategies, similar toParameterSchedule, but stochastic in nature.
- support sampled parameters (using
-
improved:
- full refactor of sampling functionality, for improved flexibility, performance & future-readiness
MaxDivSolver.solver(): improve granularity ofverbosityparameter wrt reporting frequency, including debug mode.solveCLI command: add ability to specify which preset to use.
-
deprecated:
- remove unneeded
randint_constrained_robustfunction and associated functionality.
- remove unneeded
v0.4.3
(2026-01-02)
-
new:
- implement
verbosityparameter inMaxDivSolver.solver()and add option for more detailed tabular progress reporting.
- implement
-
improved:
- ci: show slow tests in CI when running tests or generating coverage (badge generation)
- cli:
- add
benchmark platformcommand to benchmark platform speed - add
solvecommand for easy test-running the solver on test problems
- add
- initialization strategies: update internal calling API in preparation of improved progress reporting
v0.4.2
(2026-01-02)
- improved:
TargetDurationnow implements__eq__and more informative__repr__and__str__for time-based durations.MaxDivSolverBuilder: add config options to default preset + improve test coverageestimate_platform_speed- move to
internal.benchmarking - improve implementation for maintainability & encapsulation
- move to
- fix slowest & a few flaky tests
v0.4.1
(2025-12-31)
-
new:
- notebooks for automated estimation of time models of init. and optim. strategies for different problem sizes
-
improved:
- make default preset in
MaxDivSolverBuildersmart, taking into account expected duration of strategies - make solver benchmarks explicitly tied to presets, reducing duplication of code
- make default preset in
-
fixed:
- corner case where
randint_constrainedcould return duplicate samples due toint32overflow/underflow wrap-around
- corner case where
v0.4.0
(2025-12-28)
- new:
- implement initial
defaultpreset inMaxDivSolverBuilder, allowing low-threshold initialization of a solver for any given problem.
- implement initial
v0.3.9
(2025-12-28)
-
new:
- solver strategies
- implement
OptimGuidedSwapsoptimization strategy, the intended workhorse strategy for the solver - extend solver benchmarking implementation & docs with new strategy
-
improved:
- solver strategies
- switch to more generic and faster
exponential_selectivityin initialization strategies
- switch to more generic and faster
- solver benchmarking
- streamline solver benchmarking implementation
- add options
--optimization-onlyand--initialization-onlyfor targeted tests - sort vectors in solver benchmark problems such as to penalize degenerate/naive problem initialization
(i.e. make the first
kvectors not randomly scattered, but clustered together)
- solver strategies
v0.3.8
(2025-12-25)
-
new:
- solver framework
- implement
SwapBasedOptimizationStrategybase class for swap-based optimization strategies - solver strategies
- implement
InitDummybaseline initialization strategy - implement
OptimRandomSwapsbaseline optimization strategy - benchmarks
- extend solver benchmarks with testing of optimization strategies + test up to larger problem sizes
-
improved:
- solver framework
- speed improvement of score computation in case of soft constraints
- improve unit test coverage & depth of
SolverState - low-level math
- speed improvement of fast exponential and power function approximations by up to ~40%, leading to speed improvements in modify_p_selectivity methods of up to ~25-30%
v0.3.7
(2025-12-24)
-
new:
- solver framework
- extend
OptimizationStrategyimplementation to support scheduled parameters, that evolve according to a schedule during multi-iteration execution of a strategy - low-level math
- add
exponentialp-selectivity modification method - add truncated Poisson sampling
-
improved:
- docs
- tweak layout of solver benchmark docs
- diversity metrics
- speed improvement of
geomean_separation_approx(~60%) - initialization strategies
- sampling heuristics of
InitEager, leading to slightly higher (~5%) diversity scores and slightly faster execution (~10%) - reduce unnecessary array copying in
InitRandomBatchedandInitRandomEager
v0.3.6
(2025-12-22)
- new:
- implement
InitEagerinitialization strategy - core implementation
- extend solver benchmarking implementation & docs with new strategy
- implement
v0.3.5
(2025-12-22)
-
new:
- implement
InitRandomBatchedinitialization strategy - core implementation
- extend solver benchmarking implementation & docs with new strategy
- extended functionality for
randint_constrained - add
k_contextparameter to enable sampling in batches - add
i_forbiddenparameter to have more flexibility on how to sample from non-selected subsets of ranges - refactor
modify_p_selectivitymethods - unify various implementations under single API
- allow in-place modification, for optimal speed
- add fast-power based implementation (method=20)
- add accuracy estimation to
modify_p_selectivitybenchmark
- implement
-
improved:
- rename initialization strategy
InitOneShotRandom->InitRandomOneShot, in preparation of other random init strategies benchmark internalCLI command- Redirect output to file using
--fileflag - add
allbenchmark that runs all in one - add
makecommand to automatically regenerate benchmark results in docs
- Redirect output to file using
- improve accuracy of
modify_p_selectivitymethod 20 (recalibrated coefficients) & unify calibration methods - speed up
modify_p_selectivitymethod 100 by ~10%
- rename initialization strategy
v0.3.4
(2025-12-13)
-
new:
- Add 5th solver benchmark problem with simpler constraints, to complete the spectrum
- Add benchmarking results to documentation & add
makecommand to automatically regenerate benchmark results
-
improved:
benchmark solver runCLI command- Add constraint score reporting
- Add uncertainty ranges to reported metrics
- Add
--turboflag and--speedparameter - Redirect output to file using
--fileflag - Allow benchmarking
alltest problems with single command - Improve test coverage
v0.3.3
(2025-12-12)
-
new:
- implement
InitOneShotRandominitialization strategy - make
SolverStep,InitializationStrategy&OptimizationStrategyinstances have a settable random seed - add distinction between
internalandsolverbenchmarks in CLI & implementbenchmark solvercommands
- implement
-
improved:
- add initialization of
SolverStateto the reported results - reliability & testing of DiversityMetric implementations for sub-standard array sizes
- improve docs structure
- add initialization of
v0.3.2
(2025-12-11)
-
new:
- Framework for built-in benchmark suite for
MaxDivSolverproblems & strategies - First 4 benchmark problems (A1, A2, A3, A4)
- Framework for built-in benchmark suite for
-
improved:
- structure of CLI implementation; improving encapsulation of internal, low-level, CLI-only benchmarking functionality
- various low-level algorithmic tweaks & test coverage improvements
v0.3.1
(2025-12-10)
-
new:
- add support for Python 3.14
MaxDivProblemclass, so problems can be formulated outside of theMaxDivSolverandMaxDivSolverBuilderclasses, paving the way for a built-in benchmark suite.
-
improved:
- improve consistency of dimension notations
n,d,k,macross codebase
- improve consistency of dimension notations
v0.3.0
(2025-12-10)
-
new:
- methods for modifying 'selectivity' of an array of probabilities (more or less uniform)
modify_p_selectivity_power&modify_p_selectivity_pwl2- add benchmarking of these methods to CLI & docs
- make strategies aware of progress fraction within execution of a
SolverStepto allow scheduling various parameters (constraint softness, wide vs selective search, ...)
- methods for modifying 'selectivity' of an array of probabilities (more or less uniform)
-
improved:
- add caching of
Scoreobject inSolverStateto avoid redundant score computations when state hasn't changed
- add caching of
v0.2.6
(2025-12-09)
-
new:
- full support for structured multi-component scoring & diversity tie-breaker metrics
- implement structured
Scoreobject with optionaldiv_tie_breakersfield - add support for manual or preset tie-breaker metrics in
MaxDivSolverBuilder - integrate update
Scoreclass withSolverState&Solverimplementations
- implement structured
- add initial support for soft constraint handling
- make a
SolverStepreturn score checkpoints correctly viaSolverStepResult - make
MaxDivSolverreturn extensive meta-data viaMaxDivSolution - add
non_zero_separation_fractoDiversityMetricimplementations and benchmarking suite
- full support for structured multi-component scoring & diversity tie-breaker metrics
-
improved:
- ~20% speed improvement of
min_separationdiversity metric
- ~20% speed improvement of
v0.2.5
(2025-12-06)
- improved:
- Improve progress tracking implementation for future use in
MaxDivSolveroverall progress reporting - Introduction of
SolverStep, combining a strategy & a duration - Introduction of
Scoreclass for more structured scoring enabling more advanced future strategies
- Improve progress tracking implementation for future use in
v0.2.4
(2025-12-05)
-
new:
SolverStrategyprogress bar support- First version of main
MaxDivSolverloop
-
improved:
- test coverage of
SolverStateandSolverStrategymodules
- test coverage of
v0.2.3
(2025-12-04)
- new:
- add
SolverStatesnapshot management, soSolverStrategymodules can perform trial-modifications to the state. - implement first version of
SolverStrategyAPI
- add
v0.2.2
(2025-12-03)
-
new:
- add
DiversityMetric.approx_geomean_separation()based onfast_log2andfast_exp2 - add benchmarking of different
DiversityMetricimplementations to CLI & docs
- add
-
improved:
- further improve test coverage of
fast_log*&fast_exp*functions - make
DiversityMetricimplementation more flexible
- further improve test coverage of
v0.2.1
(2025-12-02)
-
new:
fast_exp*functions in the same spirit as the updatedfast_log*functions
-
improved:
fast_log_*&fast_log2_*- simplify & speedup by only supporting degree 2 (we don't need more accuracy)
- update computation of coefficients to guarantee continuity and smoothness of the approximation
v0.2.0
(2025-11-30)
- new:
- initial
MaxDivSolverframework
- initial
v0.1.3
(2025-11-27)
- improved:
- further speed up test coverage generation
- add ReadTheDocs build status badge to README
- add License badge to README
v0.1.2
(2025-11-25)
-
new:
- implement
randint_constrained_robust - remove excessively slow pure-Python
randint_constrained& promoterandint_constrained_numba->randint_constrained
- implement
-
improved:
- speed up test coverage generation
- improve visual clarity of
randint_constrainedbenchmarking output - add benchmarking for
randint_constrained_robusttobenchmark randint_constrainedCLI command
v0.1.1
(2025-11-23)
- new:
- implement
Constraintsclass - implement
sampling.con.randint_constrained_numbafunction, offering a 10-100x speedup over the non-numbaversion
- implement
v0.1.0
(2025-11-22)
-
new:
- add
benchmark randint_constrainedcommand to CLI
- add
-
improved:
- various minor improvements to docs
-
internal:
- improve test coverage of cli functionality
v0.0.9
(2025-11-21)
-
new:
- add
sampling.con.randint_constrained, which is likerandintbut supporting constraints
- add
-
improved:
- make naming more consistent with other known functionality:
sampling.discrete.sample_int->sampling.uncon.randint - ensure
randintalso works with non-normalized probabilities (with minimal loss of efficiency, especially innumba-flavor)
- make naming more consistent with other known functionality:
-
internal:
- update local dev tooling to declutter project root
v0.0.8
(2025-11-18)
- improved:
sampling.discrete.sample_int: speedup for non-uniform sampling without replacement (custom min-heap implementation)
v0.0.7
(2025-11-17)
-
improved:
- test coverage of internal rng functionality
- improve speed of generating
int32arrays insampling.discrete.sample_int
-
internal:
- add
pytest-xdistandpytest-rerunfailuresto improve test performance & robustness
- add
v0.0.6
(2025-11-16)
-
new:
- make
numbaand non-numbaversions ofsampling.discrete.sample_intpublic and self-sustained (full-featured) - CLI command
numba-statusto report onnumbainstallation and configuration status
- make
-
improved:
sampling.discrete.sample_int:- significant speedup
- improve benchmarking + add notes on optimization efforts
- improve coverage statistics for
numba-decorated functions - make
numbaa non-optional dependency for the sake of code simplicity - improve granularity of speed-vs-accuracy trade-off in benchmarking functionality (add
--speedargument)
v0.0.5
(2025-11-08)
-
new:
- implement
max-divCLI, allowing package to be installed as tool to define system-wide command 'max-div'
- implement
-
improved:
- allow benchmarking functionality to output results in Markdown format
- switch docs to use
readthedocstheme
v0.0.4
(2025-11-08)
- improved:
- further improvements to CI/CD pipeline
v0.0.3
(2025-11-07)
- new:
- move to trunk-based development workflow with release branches
v0.0.2
(2025-11-02)
- new:
sampling.discrete.sample_intbenchmark.benchmark_sample_int
v0.0.1
(2025-11-01)
- Initial project setup & framework