optimization 0.1.5 → 0.1.6
raw patch · 3 files changed
+6/−9 lines, 3 filesdep ~linear
Dependency ranges changed: linear
Files
- optimization.cabal +2/−2
- src/Optimization/LineSearch.hs +3/−6
- src/Optimization/LineSearch/BFGS.hs +1/−1
optimization.cabal view
@@ -1,6 +1,6 @@ name: optimization category: Math-version: 0.1.5+version: 0.1.6 license: BSD3 cabal-version: >= 1.10 license-file: LICENSE@@ -52,7 +52,7 @@ base >= 4.4 && < 5, vector >= 0.10 && < 1.0, ad >= 3.4 && < 4.3,- linear >= 1.0 && < 2.0,+ linear >= 1.16 && < 2.0, semigroupoids >= 3.0 && < 5.0, distributive >= 0.3 && < 0.5
src/Optimization/LineSearch.hs view
@@ -36,7 +36,6 @@ import Prelude hiding (pred) import Linear-import Debug.Trace -- | A line search method @search df p x@ determines a step size -- in direction @p@ from point @x@ for function @f@ with gradient @df@@@ -64,7 +63,7 @@ {-# INLINE armijo #-} -- | Curvature condition-curvature :: (Num a, Ord a, Additive f, Metric f, Show a, Show (f a))+curvature :: (Num a, Ord a, Additive f, Metric f) => a -- ^ curvature condition strength c2 -> (f a -> f a) -- ^ gradient of function -> f a -- ^ point to evaluate at@@ -72,7 +71,6 @@ -> a -- ^ search step size -> Bool -- ^ is curvature condition satisfied curvature c2 df x p a =- traceShow (df (x ^+^ a *^ p) `dot` p, c2 * (df x `dot` p), p) $ df (x ^+^ a *^ p) `dot` p >= c2 * (df x `dot` p) {-# INLINE curvature #-} @@ -117,7 +115,7 @@ -- @wolfeSearch gamma alpha c1@ starts with the given step size @alpha@ -- and reduces it by a factor of @gamma@ until both the Armijo and -- curvature conditions is satisfied.-wolfeSearch :: (Show a, Num a, Ord a, Metric f, Show (f a))+wolfeSearch :: (Num a, Ord a, Metric f) => a -- ^ step size reduction factor gamma -> a -- ^ initial step size alpha -> a -- ^ Armijo condition strength c1@@ -126,8 +124,7 @@ -> LineSearch f a wolfeSearch gamma alpha c1 c2 f df p x = backtrackingSearch gamma alpha wolfe df p x- where wolfe a = traceShow (a, armijo c1 f df p x a, curvature c2 df x p a)- $ armijo c1 f df p x a && curvature c2 df x p a+ where wolfe a = armijo c1 f df p x a && curvature c2 df x p a {-# INLINEABLE wolfeSearch #-} -- | Line search by Newton's method
src/Optimization/LineSearch/BFGS.hs view
@@ -32,7 +32,7 @@ -- Sherman-Morrison update of inverse Hessian sy = s `dot` y rho = if nearZero sy then 1000 else 1 / sy- i = kronecker (pure 1)+ i = scaled (pure 1) u = i !-! rho *!! outer y s v = i !-! rho *!! outer s y b1 = u !*! b0 !*! v !+! rho *!! outer s s