-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Wrapper of nonlinear-optimization package for using with backprop package -- -- This package enhances nonlinear-optimization's usability by -- using backprop's automatic differentiation. You only need to -- specify a function to minimize and don't need to specify its gradient -- explicitly. @package nonlinear-optimization-backprop @version 0.2.4 -- | This package enhance nonlinear-optimization's usability by -- using ad's automatic differentiaion. You only need to specify a -- function to minimize and don't need to specify its gradient -- explicitly. module Numeric.Optimization.Algorithms.HagerZhang05.Backprop -- | Run the CG_DESCENT optimizer and try to minimize the -- function. -- -- It uses reverse mode automatic differentiation to compute the -- gradient. optimize :: forall a. (MonoTraversable a, Backprop a, Element a ~ Double) => Parameters -> Double -> a -> (forall s. Reifies s W => BVar s a -> BVar s Double) -> IO (a, Result, Statistics) data Result -- | Convergence tolerance was satisfied. ToleranceStatisfied :: Result -- | Change in function value was less than funcEpsilon * |f|. FunctionChange :: Result -- | Total iterations exceeded maxItersFac * n. MaxTotalIter :: Result -- | Slope was always negative in line search. NegativeSlope :: Result -- | Number of secant iterations exceed nsecant. MaxSecantIter :: Result -- | Search direction not a descent direction. NotDescent :: Result -- | Line search fails in initial interval. LineSearchFailsInitial :: Result -- | Line search fails during bisection. LineSearchFailsBisection :: Result -- | Line search fails during interval update. LineSearchFailsUpdate :: Result -- | Debug tolerance was on and the test failed (see debugTol). DebugTol :: Result -- | Function value became NaN. FunctionValueNaN :: Result -- | Initial function value was NaN. StartFunctionValueNaN :: Result -- | Statistics given after the process finishes. data Statistics Statistics :: Double -> Double -> CInt -> CInt -> CInt -> Statistics -- | Value of the function at the solution. [finalValue] :: Statistics -> Double -- | Maximum absolute component of the gradient at the solution. [gradNorm] :: Statistics -> Double -- | Total number of iterations. [totalIters] :: Statistics -> CInt -- | Total number of function evaluations. [funcEvals] :: Statistics -> CInt -- | Total number of gradient evaluations. [gradEvals] :: Statistics -> CInt -- | Default parameters. See the documentation for Parameters and -- TechParameters to see what are the defaults. defaultParameters :: Parameters -- | Parameters given to the optimizer. data Parameters Parameters :: Bool -> Bool -> Verbose -> LineSearch -> Double -> StopRules -> EstimateError -> Maybe Double -> Maybe Double -> Maybe Double -> Double -> CInt -> CInt -> Double -> Double -> Double -> TechParameters -> Parameters -- | Print final statistics to stdout. Defaults to True. [printFinal] :: Parameters -> Bool -- | Print parameters to stdout before starting. Defaults to -- False [printParams] :: Parameters -> Bool -- | How verbose we should be while computing. Everything is printed to -- stdout. Defaults to Quiet. [verbose] :: Parameters -> Verbose -- | What kind of line search should be used. Defaults to AutoSwitch -- 1e-3. [lineSearch] :: Parameters -> LineSearch -- | Factor in [0, 1] used to compute average cost magnitude -- C_k as follows: -- --
--   Q_k = 1 + (qdecay)Q_{k-1},   Q_0 = 0
--   C_k = C_{k-1} + (|f_k| - C_{k-1})/Q_k
--   
-- -- Defaults to 0.7. [qdecay] :: Parameters -> Double -- | Stop rules that define when the iterations should end. Defaults to -- DefaultStopRule 0. [stopRules] :: Parameters -> StopRules -- | How to calculate the estimated error in the function value. Defaults -- to RelativeEpsilon 1e-6. [estimateError] :: Parameters -> EstimateError -- | When to attempt quadratic interpolation in line search. If -- Nothing then never try a quadratic interpolation step. If -- Just cutoff, then attemp quadratic interpolation in line -- search when |f_{k+1} - f_k| / f_k <= cutoff. Defaults to -- Just 1e-12. [quadraticStep] :: Parameters -> Maybe Double -- | If Just tol, then always check that f_{k+1} - f_k <= -- tol * C_k. Otherwise, if Nothing then no checking of -- function values is done. Defaults to Nothing. [debugTol] :: Parameters -> Maybe Double -- | If Just step, then use step as the initial step of -- the line search. Otherwise, if Nothing then the initial step -- is programatically calculated. Defaults to Nothing. [initialStep] :: Parameters -> Maybe Double -- | Defines the maximum number of iterations. The process is aborted when -- maxItersFac * n iterations are done, where n is the -- number of dimensions. Defaults to infinity. [maxItersFac] :: Parameters -> Double -- | Maximum number of times the bracketing interval grows or shrinks in -- the line search. Defaults to 50. [nexpand] :: Parameters -> CInt -- | Maximum number of secant iterations in line search. Defaults to -- 50. [nsecant] :: Parameters -> CInt -- | Restart the conjugate gradient method after restartFac * n -- iterations. Defaults to 1. [restartFac] :: Parameters -> Double -- | Stop when -alpha * dphi0, the estimated change in function -- value, is less than funcEpsilon * |f|. Defaults to -- 0. [funcEpsilon] :: Parameters -> Double -- | After encountering NaN while calculating the step length, -- growth factor when searching for a bracketing interval. Defaults to -- 1.3. [nanRho] :: Parameters -> Double -- | Technical parameters which you probably should not touch. [techParameters] :: Parameters -> TechParameters -- | How verbose we should be. data Verbose -- | Do not output anything to stdout, which most of the time is -- good. Quiet :: Verbose -- | Print what work is being done on each iteraction. Verbose :: Verbose -- | Print information about every step, may be useful for troubleshooting. VeryVerbose :: Verbose -- | Line search methods that may be used. data LineSearch -- | Use approximate Wolfe line search. ApproximateWolfe :: LineSearch -- | Use ordinary Wolfe line search, switch to approximate Wolfe when -- --
--   |f_{k+1} - f_k| < AWolfeFac * C_k
--   
-- -- where C_k is the average size of cost and AWolfeFac -- is the parameter to this constructor. AutoSwitch :: Double -> LineSearch -- | Stop rules used to decided when to stop iterating. data StopRules -- | DefaultStopRule stop_fac stops when -- --
--   |g_k|_infty <= max(grad_tol, |g_0|_infty * stop_fac)
--   
-- -- where |g_i|_infty is the maximum absolute component of the -- gradient at the i-th step. DefaultStopRule :: Double -> StopRules -- | AlternativeStopRule stops when -- --
--   |g_k|_infty <= grad_tol * (1 + |f_k|)
--   
AlternativeStopRule :: StopRules -- | How to calculate the estimated error in the function value. data EstimateError -- | AbsoluteEpsilon eps estimates the error as eps. AbsoluteEpsilon :: Double -> EstimateError -- | RelativeEpsilon eps estimates the error as eps * -- C_k. RelativeEpsilon :: Double -> EstimateError -- | Technical parameters which you probably should not touch. You should -- read the papers of CG_DESCENT to understand how you can tune -- these parameters. data TechParameters TechParameters :: Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> TechParameters -- | Wolfe line search parameter. Defaults to 0.1. [techDelta] :: TechParameters -> Double -- | Wolfe line search parameter. Defaults to 0.9. [techSigma] :: TechParameters -> Double -- | Decay factor for bracket interval width. Defaults to 0.66. [techGamma] :: TechParameters -> Double -- | Growth factor when searching for initial bracketing interval. Defaults -- to 5. [techRho] :: TechParameters -> Double -- | Lower bound for the conjugate gradient update parameter -- beta_k is techEta * ||d||_2. Defaults to -- 0.01. [techEta] :: TechParameters -> Double -- | Factor used in starting guess for iteration 1. Defaults to -- 0.01. [techPsi0] :: TechParameters -> Double -- | In performing a QuadStep, we evaluate the function at psi1 * -- previous step. Defaults to 0.1. [techPsi1] :: TechParameters -> Double -- | When starting a new CG iteration, our initial guess for the line -- search stepsize is psi2 * previous step. Defaults to -- 2. [techPsi2] :: TechParameters -> Double