Source code for torchmin.minimize

import torch

from .bfgs import _minimize_bfgs, _minimize_lbfgs
from .cg import _minimize_cg
from .newton import _minimize_newton_cg, _minimize_newton_exact
from .trustregion import (_minimize_trust_exact, _minimize_dogleg,
                          _minimize_trust_ncg, _minimize_trust_krylov)

_tolerance_keys = {
    'l-bfgs': 'gtol',
    'bfgs': 'gtol',
    'cg': 'gtol',
    'newton-cg': 'xtol',
    'newton-exact': 'xtol',
    'dogleg': 'gtol',
    'trust-ncg': 'gtol',
    'trust-exact': 'gtol',
    'trust-krylov': 'gtol'
}


[docs]def minimize( fun, x0, method, max_iter=None, tol=None, options=None, callback=None, disp=0, return_all=False): """Minimize a scalar function of one or more variables. .. note:: This is a general-purpose minimizer that calls one of the available routines based on a supplied `method` argument. Parameters ---------- fun : callable Scalar objective function to minimize. x0 : Tensor Initialization point. method : str The minimization routine to use. Should be one of - 'bfgs' - 'l-bfgs' - 'cg' - 'newton-cg' - 'newton-exact' - 'dogleg' - 'trust-ncg' - 'trust-exact' - 'trust-krylov' At the moment, method must be specified; there is no default. max_iter : int, optional Maximum number of iterations to perform. If unspecified, this will be set to the default of the selected method. tol : float Tolerance for termination. For detailed control, use solver-specific options. options : dict, optional A dictionary of keyword arguments to pass to the selected minimization routine. callback : callable, optional Function to call after each iteration with the current parameter state, e.g. ``callback(x)``. disp : int or bool Display (verbosity) level. Set to >0 to print status messages. return_all : bool, optional Set to True to return a list of the best solution at each of the iterations. Returns ------- result : OptimizeResult Result of the optimization routine. """ x0 = torch.as_tensor(x0) method = method.lower() assert method in ['bfgs', 'l-bfgs', 'cg', 'newton-cg', 'newton-exact', 'dogleg', 'trust-ncg', 'trust-exact', 'trust-krylov'] if options is None: options = {} if tol is not None: options.setdefault(_tolerance_keys[method], tol) options.setdefault('max_iter', max_iter) options.setdefault('callback', callback) options.setdefault('disp', disp) options.setdefault('return_all', return_all) if method == 'bfgs': return _minimize_bfgs(fun, x0, **options) elif method == 'l-bfgs': return _minimize_lbfgs(fun, x0, **options) elif method == 'cg': return _minimize_cg(fun, x0, **options) elif method == 'newton-cg': return _minimize_newton_cg(fun, x0, **options) elif method == 'newton-exact': return _minimize_newton_exact(fun, x0, **options) elif method == 'dogleg': return _minimize_dogleg(fun, x0, **options) elif method == 'trust-ncg': return _minimize_trust_ncg(fun, x0, **options) elif method == 'trust-exact': return _minimize_trust_exact(fun, x0, **options) elif method == 'trust-krylov': return _minimize_trust_krylov(fun, x0, **options) else: raise RuntimeError('invalid method "{}" encountered.'.format(method))