parsac.optimize.desolver module
- async parsac.optimize.desolver.solve(fn: Callable[[ndarray[tuple[int, int], dtype[float64]]], Awaitable[ndarray[tuple[int], dtype[float64]]]], minbounds: ArrayLike, maxbounds: ArrayLike, *, F: float = 0.5, CR: float = 0.9, npop: int | None = None, initial_population: ArrayLike | None = None, maxgen: int = 500, reltol: float | ndarray[tuple[int], dtype[float64]] = 0.01, abstol: float | ndarray[tuple[int], dtype[float64]] = 1e-08, ftol: float = inf, random_ancestor: bool = True, ndiffvector: int = 1, logger: Logger | None = None, enforce_bounds: bool = True, rng: Generator | None = None, callback: Callable[[int], None] | None = None) ndarray[tuple[int], dtype[float64]]
Solve an optimization problem using the Differential Evolution algorithm.
- Parameters:
fn – function that returns the fitness of a parameter vector
minbounds – lower bounds for each parameter
maxbounds – upper bounds for each parameter
F – scale
CR – cross-over probability
npop – population size, defaults to 10 times the number of parameters
maxgen – maximum number of generations
reltol – relative tolerance for parameter convergence
abstol – absolute tolerance for parameter convergence
ftol – tolerance for fitness convergence
random_ancestor – whether to pick a random ancestor for each trial vector
ndiffvector – number of difference vectors to add to the base vector
logger – logger to use
enforce_bounds – whether to force parameter vectors to stay within prescribed initial range [minbounds, maxbounds]
rng – random number generator
callback – function to call after each generation. It should take the generation number as an argument.
- Returns:
The optimal parameter vector.