nextnano_optimizers.optimizer module#

Two optimizer classes, both built on the same pair of objects: an IO describing which variables to vary and which outputs to read, and a Metric turning those outputs into objective values.

Optimizer wraps scipy.optimize. It is the right choice for a single, smooth, well-behaved objective started from a decent initial guess — root finding or local minimization. It evaluates one candidate at a time.

Evolution wraps the pymoo algorithms. It works on a population, needs bounds rather than an initial guess, tolerates failed simulations and non-smooth objectives, and handles several objectives at once — in which case the result is a Pareto front rather than a single point.

Optimizer(nextnanoio, metric[, ...])

The optimization class to run the gradient decent optimization with methods from scipy.optimize

Evolution(nextnanoio, metric, bounds[, ...])

The evolution class to run the evolutionary optimization with pymoo algorithms.