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.