From 24ad0905e56efd0f5622b5e9b3dd33eb16547ea7 Mon Sep 17 00:00:00 2001 From: Patrick Kofod Mogensen Date: Tue, 21 Jun 2016 14:51:29 +0200 Subject: [PATCH] Getting the docs up and running (#225) * Initial docs commit. --- .gitignore | 2 + .travis.yml | 2 + NEWS.md | 4 +- README.md | 4 + docs/.documenter.enc | Bin 0 -> 1680 bytes docs/make.jl | 12 +++ docs/mkdocs.yml | 51 +++++++++ docs/src/.Rhistory | 0 docs/src/LICENSE.md | 9 ++ docs/src/algo/brent.md | 7 ++ docs/src/algo/conjugategradient.md | 14 +++ docs/src/algo/goldensection.md | 5 + docs/src/algo/gradientdescent.md | 29 ++++++ docs/src/algo/index.md | 1 + docs/src/algo/lbfgs.md | 43 ++++++++ docs/src/algo/linesearch.md | 17 +++ docs/src/algo/nelder_mead.md | 38 +++++++ docs/src/algo/newton.md | 59 +++++++++++ docs/src/algo/plap.png | Bin 0 -> 123958 bytes docs/src/algo/precondition.md | 58 +++++++++++ docs/src/algo/simulated_annealing.md | 58 +++++++++++ docs/src/dev/contributing.md | 55 ++++++++++ docs/src/dev/index.md | 1 + docs/src/index.md | 43 ++++++++ docs/src/user/config.md | 71 +++++++++++++ docs/src/user/minimization.md | 126 +++++++++++++++++++++++ docs/src/user/planned.md | 22 ++++ docs/src/user/tipsandtricks.md | 148 +++++++++++++++++++++++++++ 28 files changed, 878 insertions(+), 1 deletion(-) create mode 100644 docs/.documenter.enc create mode 100644 docs/make.jl create mode 100644 docs/mkdocs.yml create mode 100644 docs/src/.Rhistory create mode 100644 docs/src/LICENSE.md create mode 100644 docs/src/algo/brent.md create mode 100644 docs/src/algo/conjugategradient.md create mode 100644 docs/src/algo/goldensection.md create mode 100644 docs/src/algo/gradientdescent.md create mode 100644 docs/src/algo/index.md create mode 100644 docs/src/algo/lbfgs.md create mode 100644 docs/src/algo/linesearch.md create mode 100644 docs/src/algo/nelder_mead.md create mode 100644 docs/src/algo/newton.md create mode 100644 docs/src/algo/plap.png create mode 100644 docs/src/algo/precondition.md create mode 100644 docs/src/algo/simulated_annealing.md create mode 100644 docs/src/dev/contributing.md create mode 100644 docs/src/dev/index.md create mode 100644 docs/src/index.md create mode 100644 docs/src/user/config.md create mode 100644 docs/src/user/minimization.md create mode 100644 docs/src/user/planned.md create mode 100644 docs/src/user/tipsandtricks.md diff --git a/.gitignore b/.gitignore index 90debbd0e..e98d4238e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ benchmarks/graphs/* *~ *.kate-swp +docs/build/ +docs/site/ diff --git a/.travis.yml b/.travis.yml index 3ebb0e69c..abaf285be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,3 +13,5 @@ script: - julia -e 'Pkg.clone(pwd()); Pkg.test("Optim", coverage=true)' after_success: - julia -e 'cd(Pkg.dir("Optim")); Pkg.add("Coverage"); using Coverage; Codecov.submit(process_folder())' + - julia -e 'Pkg.add("Documenter")' + - julia -e 'cd(Pkg.dir("Optim")); include(joinpath("docs", "make.jl"))' diff --git a/NEWS.md b/NEWS.md index c13f4b637..3785f082e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,5 @@ # Optim v0.6.0 release notes -* Added NEWS.md +* Added documentation generated by [Documenter.jl](https://github.com/JuliaDocs/Documenter.jl), see PR[225](https://github.com/JuliaOpt/Optim.jl/pull/225). +* Fixed bug in ConjugteGradient direction reset step, see issue [209](https://github.com/JuliaOpt/Optim.jl/issues/209) +* Added NEWS.md diff --git a/README.md b/README.md index 50f7c37d9..b35c1b4d0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ + +[![](https://img.shields.io/badge/docs-latest-blue.svg)](https://juliaopt.github.io/Optim.jl/latest) + *This it the development branch of Optim.jl. Please visit [this branch](https://github.com/JuliaOpt/Optim.jl/tree/v0.4.5) to find the README.md belonging to the latest official release of Optim.jl* + Optim.jl ======== diff --git a/docs/.documenter.enc b/docs/.documenter.enc new file mode 100644 index 0000000000000000000000000000000000000000..5dc57d2e33c2d51714e001cf8f6e2edf53a67a67 GIT binary patch literal 1680 zcmV;B25U=QOS>FnVkM2Q4QC$L(U z-v_Sws%1N1s2ihax8?9y13a4i(~e&%VC4cIg$f}h4xsDlZCR%Jd6o0*ot)ag zYVAX5-2IeglnYlrow!a^A3 zm86nv#8&1-1ROq>pfx1$8?F;O`C^{BK`ttk^`HFnsnv7X?IY{z0xMu0Ca?TF7r316 zmC{J+>h`B|l)b4248{3-5$nTBWCkJ{CDo_G272?`hNJ-aiWEW5$kAZ0Nyvte#%e5_ z(~_D`^rqf@|27VschYX6ABpT2fwq*IQq3TcRW|*P&I?!pbj7(uGuh(DOq+WJ>10dX->D>6;8E%@5V+ybO zUSiHf)GNjHyc{o4&E4Ip>c1Aed*4y14C#2!>dZcsbpKR9v`}Cy)?wI86jSc)7;0Re_uOkQdG^uqt^atC*bFl7AVYR8rkXQkyHn0U#efb(LhUhHLo;)M zq8|u4F4gzW=yVxxC^+dWAzg^7`)e+l@6U={o1waLw0kNjLZ-)+CP8o6`mOs|O4!}K zVGIf3bxTH)u>og)ODDIuzaOiZ~+vOp9{jA-^e%|03 zEWW4`T~YKgQBAxb_ZD~-@(I`-AdT^WeE?LxQEhi|jx`mubrL|DHv&ZG6g%amI?!&) zQUZ=zO)Ym7ZV2-BS|$A28+wH%=g9F6R6WZ=_;p3kWK4|h#tPh@GJ8Zcyq66f*fJCk zNS1;FpRTr94!^yFuYlZa_XbWmm~sPrFeIc18XZUnFfj(>O;B zm2;M_XofZ6YXeA+IJ?Pz(ag+r0AiIbF^+vdQuX@B;ZaN*8vi@iE}AW33yP6&5!0~9 z6agUHUTZOoQ`}Z&Yvwa60=cRKP~Z<=$Q9L_av}PwIL;}JK`Dioc5rXVw#>r8!7qUO z+g0oW)lYV0d5mJV?S`m@KoV6`y~T2k4I#@RbGQj>J-}{4Va&b;ol(FSc#fW%9D8ME z;)EBPn|a%knU)E?pysn?Ppgm2((zqJj`GIV_TfZ~rwh$q6(Yc$wyUHnbpe%udo-fK zjq$KvjG>p$`J_Vn7p@-pT3kvE$P@U5pxfu? zCgL39#1TrHdK~9tsVPH_69v}cbKK@xQ*NU;eq%X0)BJs)#qlp`z<6(8yl{_#&a9dT z$9Np3%c!?~Vw<(GMSZM{S{*Dew~%JwEM@sP4jC8J_srD>6xA!sXY;4)YMC`#QIfEw zXul#%<|#CeLwZWhKGk{9Pw&hSz|7!xMBa5imUO=DVdn|X{Y`YBicJP@rFqw_Pfu4A zG-^qbNb9#414FeYW92c}itpBl0khbD{%eoPYciQ*g8VvNaI;z$o3NqzlHQLN^xt6SD$5Fkn$ a*M975Kfqg|$*M#Vv+QMA%oJ>|vFauZVnr1I literal 0 HcmV?d00001 diff --git a/docs/make.jl b/docs/make.jl new file mode 100644 index 000000000..6c110db26 --- /dev/null +++ b/docs/make.jl @@ -0,0 +1,12 @@ +using Documenter, OptimDoc + +# use include("Rosenbrock.jl") etc + +# assuming linux. +#run('mv ../LICENSE.md ./LICENSE.md') +#run('mv ../CONTRIBUTING.md ./dev/CONTRIBUTING.md') +makedocs() + +deploydocs( + repo = "github.com/JuliaOpt/Optim.jl.git" +) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml new file mode 100644 index 000000000..7214e47d0 --- /dev/null +++ b/docs/mkdocs.yml @@ -0,0 +1,51 @@ +site_name: Optim.jl +repo_url: https://github.com/JuliaOpt/Optim.jl/ +site_description: Pure Julia implementations of optimization algorithms. +site_author: JuliaOpt + +theme: readthedocs + + +extra: + palette: + primary: 'indigo' + accent: 'blue' + +markdown_extensions: + - codehilite + - extra + - tables + - fenced_code + +extra_javascript: + - https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML + - assets/mathjaxhelper.js + +docs_dir: 'build' + +pages: + - Home: 'index.md' + - General information: + - Minimizing a function: 'user/minimization.md' + - Configurable Options: 'user/config.md' + - Tips and tricks: 'user/tipsandtricks.md' + - Planned Changes: 'user/planned.md' + - Algorithms: + - Solvers: + - Gradient Free: + - Nelder Mead: 'algo/nelder_mead.md' + - Simulated Annealing: 'algo/simulated_annealing.md' +# - Univariate: +# - Brent's Method: 'algo/brent.md' +# - Golden Section: 'algo/goldensection.md' + - Gradient Required: +# - 'Conjugate Gradient': 'algo/conjugategradient.md' + - 'Gradient Descent': 'algo/gradientdescent.md' + - '(L-)BFGS': 'algo/lbfgs.md' + - Hessian Required: + - Newton: 'algo/newton.md' + - Linesearch: 'algo/linesearch.md' + - Preconditioners: 'algo/precondition.md' + - 'Contributing': + - 'Contributing': 'dev/contributing.md' + - License: 'LICENSE.md' diff --git a/docs/src/.Rhistory b/docs/src/.Rhistory new file mode 100644 index 000000000..e69de29bb diff --git a/docs/src/LICENSE.md b/docs/src/LICENSE.md new file mode 100644 index 000000000..2daa4e88b --- /dev/null +++ b/docs/src/LICENSE.md @@ -0,0 +1,9 @@ +Optim.jl is licensed under the MIT License: + + Copyright (c) 2012: John Myles White and other contributors. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/src/algo/brent.md b/docs/src/algo/brent.md new file mode 100644 index 000000000..28308a87f --- /dev/null +++ b/docs/src/algo/brent.md @@ -0,0 +1,7 @@ +# Brent's Method +## Constructor + +## Description +## Example +## References +R. P. Brent (2002) Algorithms for Minimization Without Derivatives. Dover edition. diff --git a/docs/src/algo/conjugategradient.md b/docs/src/algo/conjugategradient.md new file mode 100644 index 000000000..5819ac07f --- /dev/null +++ b/docs/src/algo/conjugategradient.md @@ -0,0 +1,14 @@ +# Conjugate Gradient Descent +## Constructor +```julia +ConjugateGradient(; linesearch! = hz_linesearch!, + eta = 0.4, + P = nothing, + precondprep! = (P, x) -> nothing) +``` + +## Description + +## Example +## References +W. W. Hager and H. Zhang (2006) Algorithm 851: CG_DESCENT, a conjugate gradient method with guaranteed descent. ACM Transactions on Mathematical Software 32: 113-137. diff --git a/docs/src/algo/goldensection.md b/docs/src/algo/goldensection.md new file mode 100644 index 000000000..b85adf533 --- /dev/null +++ b/docs/src/algo/goldensection.md @@ -0,0 +1,5 @@ +# Golden Section +## Constructor +## Description +## Example +## References diff --git a/docs/src/algo/gradientdescent.md b/docs/src/algo/gradientdescent.md new file mode 100644 index 000000000..bdb624fcd --- /dev/null +++ b/docs/src/algo/gradientdescent.md @@ -0,0 +1,29 @@ +# Gradient Descent +## Constructor +```julia +GradientDescent(; linesearch!::Function = hz_linesearch!, + P = nothing, + precondprep! = (P, x) -> nothing) +``` +## Description +Gradient Descent a common name for a quasi-Newton solver. This means that it takes +steps according to + +$ x_{n+1} = x_n - P^{-1}\nabla f(x_n)$ + +where $P$ is a positive definite matrix. If $P$ is the Hessian, we get Newton's method. +In Gradient Descent, $P$ is simply an appropriately dimensioned identity matrix, +such that we go in the exact opposite direction of the gradient. This means +that we do not use the curvature information from the Hessian, or an approximation +of it. While it does seem quite logical to go in the opposite direction of the fastest +increase in objective value, the procedure can be very slow if the problem is ill-conditioned. +See the section on preconditioners for ways to remedy this when using Gradient Descent. + +As with the other quasi-Newton solvers in this package, a scalar $\alpha$ is introduced +as follows + +$ x_{n+1} = x_n - \alpha P^{-1}\nabla f(x_n)$ + +and is chosen by a linesearch algorithm such that each step gives sufficient descent. +## Example +## References diff --git a/docs/src/algo/index.md b/docs/src/algo/index.md new file mode 100644 index 000000000..bcdc8fc4c --- /dev/null +++ b/docs/src/algo/index.md @@ -0,0 +1 @@ +# Solvers diff --git a/docs/src/algo/lbfgs.md b/docs/src/algo/lbfgs.md new file mode 100644 index 000000000..9fd80d8ca --- /dev/null +++ b/docs/src/algo/lbfgs.md @@ -0,0 +1,43 @@ +# (L-)BFGS +This page contains information about BFGS and its limited memory version L-BFGS. +## Constructors +```julia +BFGS(; linesearch! = hz_linesearch!, + P = nothing, + precondprep! = (P, x) -> nothing) +``` + +```julia +LBFGS(; m = 10, + linesearch! = hz_linesearch!, + P = nothing, + precondprep! = (P, x) -> nothing) +``` +## Description +This means that it takes steps according to + +$ x_{n+1} = x_n - P^{-1}\nabla f(x_n)$ + +where $P$ is a positive definite matrix. If $P$ is the Hessian, we get Newton's method. +In (L-)BFGS, the matrix is an approximation to the Hessian built using differences +in the gradient across iterations. As long as the initial matrix is positive definite + it is possible to show that all the follow matrices will be as well. The starting +matrix could simply be the identity matrix, such that the first step is identical +to the Gradient Descent algorithm, or even the actual Hessian. + +There are two versions of BFGS in the package: BFGS, and L-BFGS. The latter is different +from the former because it doesn't use a complete history of the iterative procedure to +construct $P$, but rather only the latest $m$ steps. It doesn't actually build the Hessian +approximation matrix either, but computes the direction directly. This makes more suitable for +large scale problems, as the memory requirement to store the relevant vectors will +grow quickly in large problems. + +As with the other quasi-Newton solvers in this package, a scalar $\alpha$ is introduced +as follows + +$ x_{n+1} = x_n - \alpha P^{-1}\nabla f(x_n)$ + +and is chosen by a linesearch algorithm such that each step gives sufficient descent. +## Example +## References +Wright, Stephen, and Jorge Nocedal (2006) "Numerical optimization." Springer diff --git a/docs/src/algo/linesearch.md b/docs/src/algo/linesearch.md new file mode 100644 index 000000000..a7b565a4c --- /dev/null +++ b/docs/src/algo/linesearch.md @@ -0,0 +1,17 @@ +# Line search +## Description + +### Available line search algorithms + +* `hz_linesearch!` , the default line search algorithm +* `backtracking_linesearch!` +* `interpolating_linesearch!` +* `mt_linesearch!` + +The default line search algorithm is taken from the Conjugate Gradient implementation +by Hager and Zhang (HZ). + +## Example +## References +W. W. Hager and H. Zhang (2006) "Algorithm 851: CG_DESCENT, a conjugate gradient method with guaranteed descent."" ACM Transactions on Mathematical Software 32: 113-137. +Wright, Stephen, and Jorge Nocedal (2006) "Numerical optimization." Springer diff --git a/docs/src/algo/nelder_mead.md b/docs/src/algo/nelder_mead.md new file mode 100644 index 000000000..e2c980459 --- /dev/null +++ b/docs/src/algo/nelder_mead.md @@ -0,0 +1,38 @@ +# Nelder-Mead +Nelder-Mead is currently the standard algorithm when no derivatives are provided. +## Constructor +```julia +NelderMead(; a = 1.0, + g = 2.0, + b = 0.5) +``` +## Description +Our current implementation of the Nelder-Mead algorithm follows the original implementation +very closely, see Nelder and Mead (1965). This means that there is scope for improvement, but +also that it should be quite clear what is going on in the code relative to the original paper. + +Instead of using gradient information, we keep track of the function value at a number +of points in the search space. Together, the points form a simplex. Given a simplex, +we can perform one of four actions: reflect, expand, contract, or shrink. Basically, +the goal is to iteratively replace the worst point with a better point. More information +can be found in Nelder and Mead (1965) or Gao and Han (2010). + +The stopping rule is the same as in the original paper, and is basically the standard +error of the function values at the vertices. To set the tolerance level for this +convergence criterion, set the `g_tol` level as described in the Configurable Options +section. + +When the solver finishes, we return a minimizer which is either the centroid or one of the vertices. +The function value at the centroid adds a function evaluation, as we need to evaluate the objection +at the centroid to choose the smallest function value. Howeever, even if the function value at the centroid can be returned +as the minimum, we do not trace it during the optimization iterations. This is to avoid +too many evaluations of the objective function which can be computationally expensive. +Typically, there should be no more than twice as many `f_calls` than `iterations`, +and adding an evaluation at the centroid when `tracing` could considerably increase the total +run-time of the algorithm. + +## Example + +## References +Nelder, John A. and R. Mead (1965). "A simplex method for function minimization". Computer Journal 7: 308–313. doi:10.1093/comjnl/7.4.308. +Gao, Fuchang and Lixing Han (2010). "Implementing the Nelder-Mead simplex algorithm with adaptive parameters". Computational Optimization and Applications [DOI 10.1007/s10589-010-9329-3] diff --git a/docs/src/algo/newton.md b/docs/src/algo/newton.md new file mode 100644 index 000000000..84fc64972 --- /dev/null +++ b/docs/src/algo/newton.md @@ -0,0 +1,59 @@ +# Newton's Method +## Constructor +```julia +Newton(; linesearch! = hz_linesearch!) +``` + +The constructor takes one keyword + +* `linesearch! = a(d, x, p, x_new, g_new, lsr, c, mayterminate)`, a function performing line search, see the line search section. + +## Description +Newton's method for optimization has a long history, and is in some sense the +gold standard in unconstrained optimization of smooth functions, at least from a theoretical viewpoint. +The main benefit is that it has a quadratic rate of convergence near a local optimum. The main +disadvantage is that the user has to provide a Hessian. This can be difficult, complicated, or simply annoying. +It can also be computationally expensive to calculate it. + +Newton's method for optimization consists of applying Newton's method for solving +systems of equations, where the equations are the first order conditions, saying +that the gradient should equal the zero vector. + +$ \nabla f(x) = 0 $ + +A second order Taylor expansion of the left-hand side leads to the iterative scheme + +$ x_{n+1} = x_n - H(x_n)^{-1}\nabla f(x_n)$ + +where the inverse is not calculated directly, but the step size is instead calculated by solving + +$ H(x) \textbf{s} = \nabla f(x_n) $. + +This is equivalent to minimizing a quadratic model, $m_k$ around the current $x_n$ + +$ m_k(s) = f(x_n) + \nabla f(x_n)^\top \textbf{s} + \frac{1}{2} \textbf{s}^\top H(x_n) \textbf{s} $ + +For functions where $H(x_n)$ is difficult, or computationally expensive to obtain, we might +replace the Hessian with another positive definite matrix that approximates it. +Such methods are called Quasi-Newton methods; see (L-)BFGS and Gradient Descent. + +In a sufficiently small neighborhood around the minimizer, Newton's method has +quadratic convergence, but globally it might have slower convergence, or it might +even diverge. To ensure convergence, a line search is performed for each $\textbf{s}$. +This amounts to replacing the step formula above with + +$ x_{n+1} = x_n - \alpha \textbf{s}$ + +and finding a scalar $\alpha$ such that we get sufficient descent; see the line search section for more information. + +Additionally, if the function is locally +concave, the step taken in the formulas above will go in a direction of ascent, + as the Hessian will not be positive (semi)definite. +To avoid this, we use a specialized method to calculate the step direction. If +the Hessian is positive semidefinite then the method used is standard, but if +it is not, a correction is made using the functionality in [PositiveFactorizations.jl](https://github.com/timholy/PositiveFactorizations.jl). + +## Example +show the example from the issue + +## References diff --git a/docs/src/algo/plap.png b/docs/src/algo/plap.png new file mode 100644 index 0000000000000000000000000000000000000000..cadfff132b1b4e1efb2e91455d50bb8b297b400c GIT binary patch literal 123958 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 z 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ξ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 literal 0 HcmV?d00001 diff --git a/docs/src/algo/precondition.md b/docs/src/algo/precondition.md new file mode 100644 index 000000000..eab534878 --- /dev/null +++ b/docs/src/algo/precondition.md @@ -0,0 +1,58 @@ +# Preconditioning + +The `GradientDescent`, `ConjugateGradient` and `LBFGS` methods support preconditioning. A preconditioner +can be thought of as a change of coordinates under which the Hessian is better conditioned. With a +good preconditioner substantially improved convergence is possible. + +A preconditioner `P`can be of any type as long as the following two methods are +implemented: + +* `A_ldiv_B!(pgr, P, gr)` : apply `P` to a vector `gr` and store in `pgr` + (intuitively, `pgr = P \ gr`) +* `dot(x, P, y)` : the inner product induced by `P` + (intuitively, `dot(x, P * y)`) + +Precisely what these operations mean, depends on how `P` is stored. Commonly, we store a matrix `P` which +approximates the Hessian in some vague sense. In this case, + +* `A_ldiv_B!(pgr, P, gr) = copy!(pgr, P \ A)` +* `dot(x, P, y) = dot(x, P * y)` + +Finally, it is possible to update the preconditioner as the state variable `x` +changes. This is done through `precondprep!` which is passed to the +optimizers as kw-argument, e.g., +```jl + method=ConjugateGradient(P = precond(100), precondprep! = precond(100)) +``` +though in this case it would always return the same matrix. +(See `fminbox.jl` for a more natural example.) + +Apart from preconditioning with matrices, `Optim.jl` provides +a type `InverseDiagonal`, which represents a diagonal matrix by +its inverse elements. + +## Example +Below, we see an example where a function is minimized without and with a preconditioner +applied. +```jl +using ForwardDiff +plap(U; n = length(U)) = (n-1)*sum((0.1 + diff(U).^2).^2 ) - sum(U) / (n-1) +plap1 = ForwardDiff.gradient(plap) +precond(n) = spdiagm((-ones(n-1), 2*ones(n), -ones(n-1)), (-1,0,1), n, n)*(n+1) +df = DifferentiableFunction(x -> plap([0; X; 0]), + (x, g) -> copy!(g, (plap1([0; X; 0]))[2:end-1])) +result = Optim.optimize(df, zeros(100), method = ConjugateGradient(P = nothing)) +result = Optim.optimize(df, zeros(100), method = ConjugateGradient(P = precond(100))) +``` +The former optimize call converges at a slower rate than the latter. Looking at a + plot of the 2D version of the function shows the problem. + +![plap](./plap.png) + +The contours are shaped like ellipsoids, but we would rather want them to be circles. +Using the preconditioner effectively changes the coordinates such that the contours +becomes less ellipsoid-like. Benchmarking shows that using preconditioning provides + an approximate speed-up factor of 15 in this 100 dimensional case. + + +## References diff --git a/docs/src/algo/simulated_annealing.md b/docs/src/algo/simulated_annealing.md new file mode 100644 index 000000000..97d6a8084 --- /dev/null +++ b/docs/src/algo/simulated_annealing.md @@ -0,0 +1,58 @@ +# Simulated Annealing +## Constructor +```julia +SimulatedAnnealing(; neighbor! = default_neighbor!, + T = default_temperature, + p = kirkpatrick) +``` + +The constructor takes three keywords: + +* `neighbor! = a!(x_proposed, x_current)`, a mutating function of the current x, and the proposed x +* `T = b(iteration)`, a function of the current iteration that returns a temperature +* `p = c(f_proposal, f_current, T)`, a function of the current temperature, current function value and proposed function value that returns an acceptance probability + +## Description +Simulated Annealing is a derivative free method for optimization. It is based on +the Metropolis-Hastings algorithm that was originally used to generate samples +from a thermodynamics system, and is often used to generate draws from a posterior +when doing Bayesian inference. As such, it is a probabilistic method for finding +the minimum of a function, often over a quite large domains. For the historical +reasons given above, the algorithm uses terms such as cooling, temperature, and +acceptance probabilities. + +As the constructor shows, a simulated annealing implementation is characterized +by a temperature, a neighbor function, and +an acceptance probability. The temperature controls how volatile the changes in +minimizer candidates are allowed to be, as it enters the acceptance probability. +For example, the original Kirkpatrick et al. acceptance probability function can be written +as follows +```julia +p(f_proposal, f_current, T) = exp(-(f_proposal - f_current)/T) +``` +A high temperature makes it more likely that a draw is accepted, by pushing acceptance +probability to 1. As in the Metropolis-Hastings +algorithm, we always accept a smaller function value, but we also sometimes accept a +larger value. As the temperature decreases, we're more and more likely to only accept +candidate `x`'s that lowers the function value. To obtain a new `f_proposal`, we need +a neighbor function. A simple neighbor function adds a standard normal draw to each +dimension of `x` +```julia +function neighbor!(x_proposal::Array, x::Array) + for i in eachindex(x) + x_proposal[i] = x[i]+randn() + end +end +``` +As we see, it is not really possible +to disentangle the role of the different components of the algorithm. For example, both the +functional form of the acceptance function, the temperature and (indirectly) the neighbor +function determine if the next draw of `x` is accepted or not. + +The current implementation of Simulated Annealing is very rough. It lacks quite +a few features which are normally part of a proper SA implementation. +A better implementation is under way, see [this issue](https://github.com/JuliaOpt/Optim.jl/issues/200). + +## Example + +## References diff --git a/docs/src/dev/contributing.md b/docs/src/dev/contributing.md new file mode 100644 index 000000000..33616698c --- /dev/null +++ b/docs/src/dev/contributing.md @@ -0,0 +1,55 @@ +## Notes for contributing + +### Add a note in NEWS.md +If a change is more than just changing a typo, it will often be required to add +a bullet point to the `NEWS.md` file at the root of the repository. This makes it +easier for users to keep track of the changes since last version. A short description, +and a link to the PR or issue is sufficient. + +### Adding a solver +If you're contributing a new solver, you shouldn't need to touch any of the code in +`src/optimize.jl`. You should rather add a file named (`solver` is the name of the solver) +`solver.jl` in `src`, and make sure that you define a trace macro `solvertrace`, an `Optimizer` subtype +`immutable Solver <: Optimizer end` with appropriate fields, a default constructor with a keyword +for each field, and an `optimize` method. Say you want to contribute a solver called +`Minim`, then your `src/minim.jl` file would look something like + +``` +macro minimtrace() + quote + if tracing + dt = Dict() + if o.extended_trace + dt["x"] = copy(x) + dt["g(x)"] = copy(g) + dt["~inv(H)"] = copy(invH) + end + g_norm = vecnorm(g, Inf) + update!(tr, + iteration, + f_x, + g_norm, + dt, + o.store_trace, + o.show_trace, + o.show_every, + o.callback) + end + end +end + +immutable Minim{T} <: Optimizer + linesearch!::Function + minim_parameter::T +end + +Minim(; linesearch!::Function = hz_linesearch!, minim_parameter = 1.0) = + Minim(linesearch!, minim_parameter) + +function optimize{T}(d::DifferentiableFunction, + initial_x::Vector{T}, + mo::Minim, + o::OptimizationOptions) + ... +end +``` diff --git a/docs/src/dev/index.md b/docs/src/dev/index.md new file mode 100644 index 000000000..98a84fbad --- /dev/null +++ b/docs/src/dev/index.md @@ -0,0 +1 @@ +### Using Nelder Mead diff --git a/docs/src/index.md b/docs/src/index.md new file mode 100644 index 000000000..de4a0748b --- /dev/null +++ b/docs/src/index.md @@ -0,0 +1,43 @@ +# Optim.jl +## How +Optim is registered in [METADATA.jl](https://github.com/JuliaLang/METADATA.jl). +This means that all you need to do to install Optim, is to run +```julia +Pkg.add("Optim") +``` +## What +Optim is a Julia package for optimizing functions of +various kinds. While there is some support for box constrained optimization, most +of the solvers tries to find an $x$ that minimizes a function $f(x)$ without any constraints. + Thus, the main focus is on unconstrained optimization. + +## Why +There are many solvers available from both free and commercial sources, and many +of them are accessible from Julia. Few of them are written in Julia. +Performance-wise this is rarely a problem, as they are often written in either +Fortran or C. However, solvers written directly in Julia +does come with some advantages. + +When writing Julia software (packages) that require something to be optimized, the programmer +can either choose to write their own optimization routine, or use one of the many +available solvers. For example, this could be something from the [NLOpt](...) suite. +This means adding a dependency which is not written in Julia, and more assumptions +have to be made as to the environment the user is in. Does the user have the proper +compilers? Is it possible to use GPL'ed code in the project? Optim is released +under the MIT license, and installation is a simple `Pkg.add`, so it really doesn't +get much freer, easier, and lightweight than that. + +It is also true, that using a solver written in C or Fortran makes it impossible to leverage one +of the main benefits of Julia: multiple dispatch. Since Optim is entirely written +in Julia, we can currently use the dispatch system to ease the use of custom preconditioners. +A planned feature along these lines is to allow for user controlled choice of solvers +for various steps in the algorithm, entirely based on dispatch, and not predefined +possibilities chosen by the developers of Optim. + +Being a Julia package also means that Optim has access to the automatic differentiation +features through the packages in [JuliaDiff](http://www.juliadiff.org/). + +## But... +Optim is a work in progress. There are still some rough edges to be sanded down, +and features we want to implement. There are also planned breaking changes that +are good to be aware of. Please see the section on Planned Changes. diff --git a/docs/src/user/config.md b/docs/src/user/config.md new file mode 100644 index 000000000..c9d38da9f --- /dev/null +++ b/docs/src/user/config.md @@ -0,0 +1,71 @@ +## Configurable options +There are several options that simply take on some default values if the user +doensn't supply anything else than a function (and gradient) and a starting point. +### Solver options +There quite a few different solvers available in Optim, and they are all listed +below. Notice that the constructors are written without input here, but they +generally take keywords to tweak the way they work. See the pages describing each +solver for more detail. + +Requires only a function handle: + +* `NelderMead()` +* `SimulatedAnnealing()` + +Requires a function and gradient (will be approximated if omitted): + +* `BFGS()` +* `LBFGS()` +* `ConjugateGradient()` +* `GradientDescent()` +* `MomentumGradientDescent()` +* `AcceleratedGradientDescent()` + +Requires a function, a gradient, and a Hessian (cannot be omitted): + +* `Newton()` + +Box constrained minimization: + +* `Fminbox()` + +Special methods for univariate optimization: + +* `Brent()` +* `GoldenSection()` + +### General Options +In addition to the solver, you can alter the behavior of the Optim package by using the following keywords: + +* `x_tol`: What is the threshold for determining convergence in the input vector? Defaults to `1e-32`. +* `f_tol`: What is the threshold for determining convergence in the objective value? Defaults to `1e-32`. +* `g_tol`: What is the threshold for determining convergence in the gradient? Defaults to `1e-8`. For gradient free methods, this will control the main convergence tolerance, which is solver specific. +* `iterations`: How many iterations will run before the algorithm gives up? Defaults to `1_000`. +* `store_trace`: Should a trace of the optimization algorithm's state be stored? Defaults to `false`. +* `show_trace`: Should a trace of the optimization algorithm's state be shown on `STDOUT`? Defaults to `false`. +* `extended_trace`: Save additional information. Solver dependent. +* `autodiff`: When only an objective function is provided, use automatic differentiation to compute exact numerical gradients. If not, finite differencing will be used. This functionality is experimental. Defaults to `false`. +* `show_every`: Trace output is printed every `show_every`th iteration. + +We currently recommend the statically dispatched interface by using the `OptimizationOptions` +constructor: +```jl +res = optimize(f, g!, + [0.0, 0.0], + GradientDescent(), + OptimizationOptions(g_tol = 1e-12, + iterations = 10, + store_trace = true, + show_trace = false)) +``` +Another interface is also available, based directly on keywords: +```jl +res = optimize(f, g!, + [0.0, 0.0], + method = GradientDescent(), + g_tol = 1e-12, + iterations = 10, + store_trace = true, + show_trace = false) +``` +Notice the need to specify the method using a keyword if this syntax is used. It is likely that this will be deprecated in the future. diff --git a/docs/src/user/minimization.md b/docs/src/user/minimization.md new file mode 100644 index 000000000..9e1a0e0c7 --- /dev/null +++ b/docs/src/user/minimization.md @@ -0,0 +1,126 @@ +## Minimizing a function +To show how the Optim package can be used, we implement the +[Rosenbrock function](http://en.wikipedia.org/wiki/Rosenbrock_function), +a classic problem in numerical optimization. We'll assume that you've already +installed the Optim package using Julia's package manager. +First, we load Optim and define the Rosenbrock function: +```jl +using Optim +f(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2 +``` +Once we've defined this function, we can find the minimum of the Rosenbrock +function using any of our favorite optimization algorithms. With a function defined, +we just specify an initial point `x` and run: +```jl +optimize(f, [0.0, 0.0]) +``` +Optim will default to using the Nelder-Mead method in this case, as we did not provide a gradient. This can also +be explicitly specified using: +```jl +optimize(f, [0.0, 0.0], NelderMead()) +``` +Other solvers are available. Below, we use L-BFGS, a quasi-Newton method that requires a gradient. +If we pass `f` alone, Optim will construct an approximate gradient for us +using central finite differencing: +```jl +optimize(f, [0.0, 0.0], LBFGS()) +``` +Alternatively, the `autodiff` keyword will use atomatic differentiation to construct +the gradient. +```jl +optimize(f, [0.0, 0.0], LBFGS(), OptimizationOptions(autodiff = true)) +``` +For better performance and greater precision, you can pass your own gradient function. For the Rosenbrock example, the analytical gradient can be shown to be: +```jl +function g!(x::Vector, storage::Vector) +storage[1] = -2.0 * (1.0 - x[1]) - 400.0 * (x[2] - x[1]^2) * x[1] +storage[2] = 200.0 * (x[2] - x[1]^2) +end +``` +Note that the functions we're using to calculate the gradient (and later the Hessian `h!`) of the Rosenbrock function mutate a fixed-sized storage array, which is passed as an additional argument called `storage`. By mutating a single array over many iterations, this style of function definition removes the sometimes considerable costs associated with allocating a new array during each call to the `g!` or `h!` functions. You can use `Optim` without manually defining a gradient or Hessian function, but if you do define these functions, they must take these two arguments in this order. +Returning to our optimization, you simply pass `g!` together with `f` from before to use the gradient: +```jl +optimize(f, g!, [0.0, 0.0], LBFGS()) +``` +For some methods, like simulated annealing, the gradient will be ignored: +```jl +optimize(f, g!, [0.0, 0.0], SimulatedAnnealing()) +``` +In addition to providing gradients, you can provide a Hessian function `h!` as well. In our current case this is: +```jl +function h!(x::Vector, storage::Matrix) +storage[1, 1] = 2.0 - 400.0 * x[2] + 1200.0 * x[1]^2 +storage[1, 2] = -400.0 * x[1] +storage[2, 1] = -400.0 * x[1] +storage[2, 2] = 200.0 +end +``` +Now we can use Newton's method for optimization by running: +```jl +optimize(f, g!, h!, [0.0, 0.0]) +``` +Which defaults to `Newton()` since a Hessian was provided. Like gradients, the Hessian function will be ignored if you use a method that does not require it: +```jl +optimize(f, g!, h!, [0.0, 0.0], LBFGS()) +``` +Note that Optim will not generate approximate Hessians using finite differencing +because of the potentially low accuracy of approximations to the Hessians. Other +than Newton's method, none of the algorithms provided by the Optim package employ +exact Hessians. + +## Obtaining results +After we have our results in `res`, we can use the API for getting optimization results. +This consists of a collection of functions. They are not exported, so they have to be prefixed by `Optim.`. +Say we do the following optimization: +```jl +res = optimize(x->dot(x,[1 0. 0; 0 3 0; 0 0 1]*x), zeros(3)) +``` + If we can't remember what method we used, we simply use +```jl +Optim.method(res) +``` +which will return `"Nelder Mead"`. A bit more useful information is the minimizer and minimum of the objective functions, which can be found using +```jlcon +julia> Optim.minimizer(res) +3-element Array{Float64,1}: + -0.499921 + -0.3333 + -1.49994 + +julia> Optim.minimum(res) + -2.8333333205768865 +``` + +### Complete list of functions +A complete list of functions can be found below. + +Defined for all methods: + +* `method(res)` +* `minimizer(res)` +* `minimum(res)` +* `iterations(res)` +* `iteration_limit_reached(res)` +* `trace(res)` +* `x_trace(res)` +* `f_trace(res)` +* `f_calls(res)` +* `converged(res)` + +Defined for univariate optimization: + +* `lower_bound(res)` +* `upper_bound(res)` +* `x_lower_trace(res)` +* `x_upper_trace(res)` +* `rel_tol(res)` +* `abs_tol(res)` + +Defined for multivariate optimization: + +* `g_norm_trace(res)` +* `g_calls(res)` +* `x_converged(res)` +* `f_converged(res)` +* `g_converged(res)` +* `initial_state(res)` diff --git a/docs/src/user/planned.md b/docs/src/user/planned.md new file mode 100644 index 000000000..da7084792 --- /dev/null +++ b/docs/src/user/planned.md @@ -0,0 +1,22 @@ +## Planned Changes +Some features and changes have been identified as "wanted". Some of these are breaking +changes, but for the better. + +One important change is the ordering of the preallocated array, and the current +iterate in the mutating gradient and Hessian functions. Currently, we have +```julia +g!(x, stor) +h!(x, stor) +``` +But with the next version of Optim, we intend to be more in line with the rest +of the Julia ecosystem and write +```julia +g!(stor, x) +h!(stor, x) +``` + +Ít is also quite possible that the keywords-style tuning of options will be removed. +Instead of writing `optimize(..., g_tol = 1e-4)` users will have to write `optimize(..., OptimizationOptions(g_tol = 1e-4))`. +Obviously, it is a bit more verbose, but it will allow the internals to work entirely through +dispatch, and avoid a lot of keyword handling. Simpler code is easier to maintain, +and less prone to bugs. diff --git a/docs/src/user/tipsandtricks.md b/docs/src/user/tipsandtricks.md new file mode 100644 index 000000000..473a8c405 --- /dev/null +++ b/docs/src/user/tipsandtricks.md @@ -0,0 +1,148 @@ +## Dealing with constant parameters +In many applications, there may be factors that are relevant to the function evaluations, +but are fixed throughout the optimization. An obvious example is using data in a +likelihood function, but it could also be parameters we wish to hold constant. + +Consider a squared error loss function that depends on some data `x` and `y`, +and parameters `betas`. As far as the solver is concerned, there should only be one +input argument to the function we want to minimize, call it `sqerror`. + +The problem is that we want to optimize a function `sqerror` that really depends +on three inputs, and two of them are constant throught the optimization procedure. +To do this, we need to define the variables `x` and `y` +```jl +x = [1.0, 2.0, 3.0] +y = 1.0 + 2.0 * x + [-0.3, 0.3, -0.1] +``` +We then simply define a function in three variables +```julia +function sqerror(betas, X, Y) + err = 0.0 + for i in 1:length(X) + pred_i = betas[1] + betas[2] * X[i] + err += (Y[i] - pred_i)^2 + end + return err +end +``` +and then optimize the following anonymous function +```jl +res = optimize(b -> sqerror(b, x, y), [0.0, 0.0]) +``` +Alternatively, we can define a closure `sqerror(betas)` that is aware of the variables we +just defined +```jl +function sqerror(betas) + err = 0.0 + for i in 1:length(x) + pred_i = betas[1] + betas[2] * x[i] + err += (y[i] - pred_i)^2 + end + return err +end +``` +We can then optimize the `sqerror` function just like any other function +```jl +res = optimize(sqerror, [0.0, 0.0]) +``` + +## Avoid repeating computations +Say you are optimizing a function +```julia +f(x) = x[1]^2+x[2]^2 +g!(x, stor) = [2x[1], 2x[2]] +``` +In this situation, no calculations from `f` could be reused in `g!`. However, sometimes +there is a substantial similarity between the objective function, and gradient, and +some calculations can be reused. +The trick here is essentially the same as above. We use a closure or an anonymous function. +Basically, we define +```julia +function calculate_common!(x, last_x, buffer) + if x != last_x + copy!(last_x, x) + #do whatever common calculations and save to buffer + end +end + +function f(x, buffer, last_x) + calculate_common!(x, last_x, buffer) + f_body # depends on buffer +end + +function g!(x, stor, buffer, last_x) + calculate_common!(x, last_x, buffer) + g_body! # depends on buffer +end +``` +and then the following +```julia +using Optim +x0 = ... +buffer = Array(...) # Preallocate an appropriate buffer +last_x = similar(x0) +df = TwiceDifferentiableFunction(x -> f(x, buffer, x0), + (x, stor) -> g!(x, stor, buffer, last_x)) +optimize(df, x0) +``` +## Provide gradients +As mentioned in the general introduction, passing analytical gradients can have an +impact on performance. To show an example of this, consider the separable extension of the +Rosenbrock function in dimension 5000, see [SROSENBR](ftp://ftp.numerical.rl.ac.uk/pub/cutest/sif/SROSENBR.SIF) in CUTEst. + +Below, we use the gradients and objective functions from [mastsif](http://www.cuter.rl.ac.uk/Problems/mastsif.shtml) through [CUTEst.jl](https://github.com/JuliaOptimizers/CUTEst.jl). +We only show the first five iterations of an attempt to minimize the function using +Gradient Descent. +```jlcon +julia> @time optimize(f, x0, GradientDescent(), + OptimizationOptions(show_trace=true, iterations = 5)) +Iter Function value Gradient norm + 0 4.850000e+04 2.116000e+02 + 1 1.018734e+03 2.704951e+01 + 2 3.468449e+00 5.721261e-01 + 3 2.966899e+00 2.638790e-02 + 4 2.511859e+00 5.237768e-01 + 5 2.107853e+00 1.020287e-01 + 21.731129 seconds (1.61 M allocations: 63.434 MB, 0.03% gc time) +Results of Optimization Algorithm + * Algorithm: Gradient Descent + * Starting Point: [1.2,1.0, ...] + * Minimizer: [1.0287767703731154,1.058769439356144, ...] + * Minimum: 2.107853e+00 + * Iterations: 5 + * Convergence: false + * |x - x'| < 1.0e-32: false + * |f(x) - f(x')| / |f(x)| < 1.0e-32: false + * |g(x)| < 1.0e-08: false + * Reached Maximum Number of Iterations: true + * Objective Function Calls: 23 + * Gradient Calls: 23 + +julia> @time optimize(f, g!, x0, GradientDescent(), + OptimizationOptions(show_trace=true, iterations = 5)) +Iter Function value Gradient norm + 0 4.850000e+04 2.116000e+02 + 1 1.018769e+03 2.704998e+01 + 2 3.468488e+00 5.721481e-01 + 3 2.966900e+00 2.638792e-02 + 4 2.511828e+00 5.237919e-01 + 5 2.107802e+00 1.020415e-01 + 0.009889 seconds (915 allocations: 270.266 KB) +Results of Optimization Algorithm + * Algorithm: Gradient Descent + * Starting Point: [1.2,1.0, ...] + * Minimizer: [1.0287763814102757,1.05876866832087, ...] + * Minimum: 2.107802e+00 + * Iterations: 5 + * Convergence: false + * |x - x'| < 1.0e-32: false + * |f(x) - f(x')| / |f(x)| < 1.0e-32: false + * |g(x)| < 1.0e-08: false + * Reached Maximum Number of Iterations: true + * Objective Function Calls: 23 + * Gradient Calls: 23 +``` +The objective has obtained a value that is very similar between the two runs, but +the run with the analytical gradient is way faster. It is possible that the finite +differences code can be improved, but generally the optimization will be slowed down +by all the function evaluations required to do the central finite differences calculations.