mymesh.register.optimize#
- mymesh.register.optimize(objective, method, x0=None, bounds=None, optimizer_args=None)[source]#
Optimization interface for registration. This function interfaces with optimizers from scipy.optimize and pdfo.
- Parameters:
objective (callable) – Objective function that takes a single input, x.
method (str) –
Optimization algorithm. For the most part, these are direct interfaces to either scipy.optimize or pdfo, however some predefined options are chosen for certain methods.
scipy global optimizers:
These are global optimization methods that see the global minimum of the objective function within specified bounds. The bounds input is required for all of these methods.
’direct’: Uses the DIRECT algorithm through
scipy.optimize.direct().’directl’: Uses the locally-biased version DIRECT algorthim through
scipy.optimize.direct(). This is equivalent to using method=’direct’ with optimizer_args=dict(locally_biased=True).’differential_evolution’: Uses the differential evolution algorithm through
scipy.optimize.differential_evolution()’brute’: Uses a brute force approach, evaluating the function at every point within a multidimensional grid using
scipy.optimize.brute(). It’s recommeded to use the ‘Ns’ option to specify the number of points to sample along each axis (optimizer_args=dict(Ns=n)), the default value of 20 may be too high for many registration applications for large datasets. The total number of function evaluations is Ns**len(x). By default, the optional ‘finish’ input, which performs local optimization following the conclusion of the brute force search, is turned off, but can be reactivated with optimizer_args=dict(finish=True)
scipy local optimizers:
All minimizers available through
scipy.optimize.minimize()are available. One exception is that, if pdfo is installed, it will be used instead of scipy if method=’cobyla’. If method=’scipy’ is given, the default optimizer will be chosen by scipy based on the given problem (depends on the presence of bounds or constraints).pdfo local optimizers:
pdfo, or “Powell’s derivative free optimizers” are a group of algorithms developed by M. J. D. Powell for gradient/derivative free optimization. pdfo offers a scipy-like interface to Powell’s algorithms.
’uobyqa’: Unconstrained Optimization BY Quadratic Approximation
’newuoa’: NEW Unconstrained Optimization Algorithm
’bobyqa’: Bounded Optimization BY Quadratic Approximation
’lincoa’: LINear Constrained Optimization Algorithm
’cobyla’: Constrained Optimization BY Linear Approximation
- x0array_like, optional
Initial guess for the optimization, by default None. This is required for local, but not global methods.
- boundsarray_like, list of tuples, optional
List of bounds for each parameter, e.g. [(-1, 1), (-1, 1), …], by default None Bounds are required for some optimizers, particularly the global methods.
- optimizer_argsdict, optional
Additional input arguments to the chosen method, by default None. See available options in the documentation of scipy or pdfo.
- Example (method=’nelder-mead’):
optimizer_args = dict(maxiter=100, fatol=1e-3)
Note that the optional arguments or methods differ. Some have an options input, which must be defined within optimizer_args. For example, with
method='powell':optimizer_args = dict(options=dict(maxiter=100))
- Returns:
x (np.ndarray) – Optimized parameters
f (float) – Value of the objective function at the identified optimal parameters