Repository navigation
VAMOS 1.0.2
VAMOS 1.0.2 release notes
Released 2026-10-18.
VAMOS 1.0.2 extends the optional Numba engine to every built-in algorithm,
speeds up NSGA-II and MOEA/D, and fixes defects that made results depend on the
selected engine or on whether Numba was installed. The stable 1.x API and the
1.0.0 run and study schemas remain the compatibility baseline. The default
engine, the engine="auto" policy and the optional status of Numba are
unchanged.
Engine parity fixes
- The Numba binary tournament now draws tie-break coins exactly like the NumPy
reference. For the same seed in the same environment, NSGA-II, NSGA-III,
IBEA, AGE-MOEA and SMS-EMOA with tournament selection now follow the same
trajectory withengine="numba"andengine="numpy". - Single-mating-pair SBX, which uses compiled arithmetic whenever Numba is
installed, consumes random draws exactly like the NumPy implementation.
Steady-state runs (MOEA/D, SMS-EMOA and steady-state NSGA-II) no longer
depend on whether Numba is installed when two parents are identical. NumbaKernel.nsga2_survivalreturns arrays owned by the caller. A later call
with the same kernel, for example a second run of the same algorithm object,
no longer overwrites previously returned populations.NumbaKernel.polynomial_mutationreproduces NumPy foreta == 1.
Numba engine coverage and performance
With engine="numba":
- SBX crossover and polynomial mutation use compiled arithmetic in NSGA-II,
NSGA-III, MOEA/D, SMS-EMOA, SPEA2, IBEA, SMPSO turbulence, AGE-MOEA and RVEA.
The compiled operators are enabled only after a one-time check confirms that
the compiled power function matchesnp.powerbit for bit; otherwise the
NumPy operators are used. - The AGE-MOEA survival scores, SPEA2 archive truncation, IBEA indicator-based
removal and crowding-distance archive truncation (SMPSO leaders and crowding
external archives) run as compiled loops. - Populations with three or more objectives are ranked by sequential-search
non-dominated sorting, and NSGA-II survival computes crowding only for the
front it truncates. - MOEA/D computes its differential-evolution children with a compiled kernel.
Both engines also benefit from cheaper bookkeeping: NSGA-II reuses the
generation-end ranking for the next parent selection and no longer computes a
discarded ranking under constraints, and MOEA/D samples the parents of a single
offspring without vectorized overhead.
On the recorded benchmark campaign, complete runs with the Numba engine were
1.04x to 4.5x faster than with VAMOS 1.0.1, for example NSGA-II on
three-objective DTLZ2 with 500 individuals (1.07 s to 0.24 s) and MOEA/D on ZDT1
(2.55 s to 1.61 s). Final fronts were identical between engines in every
measured case. The first run without a Numba cache compiles more kernels and
takes 0.3 to 1.5 s longer; cached startup is unchanged. Speedups depend on the
problem, the population size and the hardware.
Installation and compatibility
python -m pip install --upgrade "vamos-optimization==1.0.2"Python 3.10 or newer remains required. The 1.0.0 compatibility fixtures and
schemas are preserved. Runs with engine="numba" that use tournament
selection, and steady-state runs with Numba installed whose parents coincide,
can follow different trajectories than in 1.0.1 because their random draws now
match the NumPy reference. Exact replay requires a matching material
environment; keep the original environment when replaying an older recorded
experiment.
See stability and versioning,
known limitations,
the 1.0.1 release notes, and
release verification.