Source code for nipy.algorithms.registration.optimizer
from __future__ import absolute_import
from scipy.optimize import (fmin as fmin_simplex,
fmin_powell,
fmin_cg,
fmin_bfgs,
fmin_ncg)
from ..optimize import fmin_steepest
[docs]def configure_optimizer(optimizer, fprime=None, fhess=None, **kwargs):
"""
Return the minimization function
"""
args = []
kwargs['fprime'] = fprime
kwargs['fhess'] = fhess
kwargs['avextol'] = kwargs['xtol']
if optimizer == 'simplex':
keys = ('xtol', 'ftol', 'maxiter', 'maxfun')
fmin = fmin_simplex
elif optimizer == 'powell':
keys = ('xtol', 'ftol', 'maxiter', 'maxfun')
fmin = fmin_powell
elif optimizer == 'cg':
keys = ('gtol', 'maxiter', 'fprime')
fmin = fmin_cg
elif optimizer == 'bfgs':
keys = ('gtol', 'maxiter', 'fprime')
fmin = fmin_bfgs
elif optimizer == 'ncg':
args = [fprime]
keys = ('avextol', 'maxiter', 'fhess')
fmin = fmin_ncg
elif optimizer == 'steepest':
keys = ('xtol', 'ftol', 'maxiter', 'fprime')
fmin = fmin_steepest
else:
raise ValueError('unknown optimizer: %s' % optimizer)
return fmin, args, subdict(kwargs, keys)
[docs]def use_derivatives(optimizer):
if optimizer in ('simplex', 'powell'):
return False
else:
return True