-- 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