A recent addition to scipy's differential_evolution implementation is to allow custom strategies, which should be a callable. Here is a simplistic example. from scipy.optimize import differential_evolution import numpy as np def f(x): return np.abs(x).sum() bounds = ((-1, 1),)*3 class Strategy: def __init__(self): pass def __call__(self, candidate:int, population:np.ndarray, rng=None) -> np.ndarray: return population[candidate] result = differential_evolution( f, bounds, strategy=Strategy(), ) The question is, how can you access the properties of the DifferentialEvolutionSolver which calls the strategy? These properties are rather important to any given strategy, and the inbuilt strategies have access to them - but I cannot see how to let a custom strategy access them. Continue reading...