Release notes
Most important changes in Indago releases are listed here. Breaking changes are indicated by the sign.
Indago 0.6.0
Released on 2026-04-20
New features
New methods: Heap-Based Optimizer (HBO), Controlled Random Search (CRS)
New samplers for generating initial population positions (
Optimizer.sampler): Sobol ('sobol') and LatinHypercube ('lhs')
Improvements
IndagoBench25 results overview and corresponding guidelines added to documentation
Template file for new methods included in the methods library (
_new_method_template.py)Anakatabatic PSO variants are now using
scipy.interpolate.make_interp_splineinstead of legacy functioninterp1dLiterature reference for MSGD provided in documentation
LSHADE set as the default DE variant (performs much better than SHADE)
Optimizer.scatter_methodrenamed toOptimizer.sampler
Bug fixes
Fixed the problem of EFO crashing when using small pop_size values
Using custom anakatabatic PSO without akb_model parameter now works without errors
Fixed the error appearing when logging messages for some methods
Indago 0.5.4
Released on 2025-11-16
New features
MSGS method has been completely rewritten, improved and renamed to Multi-Scale Gradient Descent (MSGD)
MSGS removed from Indago
Improvements
Bug fixes
Solved bug in Optimizer.plot_history (negative linthresh in symlog was triggered if c<=0 in all iterations)
Indago 0.5.3
Released on 2024-12-16
New features
Adding ESC (Escape Algorithm) as unsupported optimizer (not documented nor tested)
Improvements
Improved explanation of parallel evaluation in documentation
Bug fixes
Candidate.copy()now copiesuniqe_strattribute. There was a problem when accessinguniqe_strin assignedOptimizer.post_iteration_processingfunction.
Indago 0.5.2
Released on 2024-11-02
New features
Indago methods (most of them anyway) can now solve unbounded (or mixed) problems. Bounds (
Optimizer.lb,Optimizer.ub) can be skipped, or defined (partially or fully) by +/-np.inf or np.nan values. Indago will replace “open” bounds with +/-1e100. When solving an unbound problemOptimizer.X0must be providedImplementation of
Statusenum class for optimization status tracking (accessible viaOptimizer.statusattribute)
Improvements
All methods are now significantly faster due to code optimizations in
CandidateclassOptimizer.optimize()now returns aCandidateinstance regardless of the method being usedA multilevel candidate comparison operator used in Indago methods is now clearly explained in the documentation
Behavior of
indago.unconstrain()is now better explained in the documentationBetter formatting of elapsed time in dashboard monitoring output
Bug fixes
Fixed an issue with occurrences of NaN fitness values in MSGS
Fixed an issue with MSGS exiting the search space bounds
Optimizer.plot_history()is further improved to avoid division-by-zero warnings.Fixed MSGS status and log message for xtol stopping criterion
Indago 0.5.1
Released on 2024-07-16
New features
Improvements
Color tweaking and adding method name in history/convergence plot
Optimization runs can now be resumed and restarting optimizations should not produce problems
Some code refactoring
Better literature referencing in documentation
New default population (pop_init) for DE: max(30, 5 * dimensions)
Reduced computational cost of BA
Bug fixes
Fixed bug in plot history
Fixed X0-related bug in RS
Indago 0.5.0
Released on 2024-01-12
New features
HSIW inertia technique for PSO
FullyEmployed variant of ABC
scatter_method optimizer parameter, with ‘halton’ option for using Halton sequence for initializing design vectors
New method: Random Search (RS)
Optimizer.plot_history() is improved to produce better and fancier plots.
Export of all evaluated candidate solutions (Optimizer.evals_db parameter)
New utility functions: unconstrain() and read_evals_db()
New method: Grey Wolf Optimization (GWO)
Checking for unknown (illegal) optimizer attributes
Some important optimizer parameters can be given as evaluation_function attributes (namely dimensions, lb, ub, objectives, constraints, objective_weights, objective_labels, constraint_labels)
Optimizer.status providing textual information on the optimizer state
CandidateState.is_feasible() for checking whether the solution is feasible (i.e. whether it satisfies all constraints)
Optimizer.copy() produces a (deep) copy of an Optimizer object
Improvements
Cleaner log messages
Better documentation
Completely rewritten ABC (significantly different behavior expected)
New (shorter and more consistent) param names in almost all methods
NelderMead method now has an abbreviation (NM), just like all other methods
CEC 2014 benchmark test is removed (we are working on a much more comprehensive benchmark test suite)
New defaults in minimize_exhaustive()
More consistent error reporting style
New (better) default param values for all methods
Better evaluation error handling
number_of_processes parameter is now called processes
Updated requirements (most importantly python>=3.9)
Optimizer.plot_history() can skip subplots if needed. Useful for turning off dysfunctional subplots with too many plot lines.
Bug fixes
target_fitness stopping criterion is not ignored any more
Fixed stopping criteria overshooting defined targets
Fixed memory leak due to circular referencing in Optimizer and CandidateState objects
Fixed multiple problems in MSGS
Fixed some evaluation retrying problems
Rich-based features adapted to a new version of rich