Skip to content

Commit 658c39a

Browse files
authored
Minor improvements and bugfixes related to NelderMead (#1094)
1 parent 6f3b372 commit 658c39a

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

docs/src/user/minimization.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,12 @@ Defined for multivariate optimization:
214214
* `g_converged(res)`
215215
* `initial_state(res)`
216216

217+
Defined for `NelderMead` with the option `trace_simplex=true`:
218+
219+
* `centroid_trace(res)` (with `extended_trace=true`)
220+
* `simplex_trace(res)`
221+
* `simplex_values_trace(res)`
222+
217223
## Input types
218224
Most users will input `Vector`'s as their `initial_x`'s, and get an `Optim.minimizer(res)` out that is also a vector. For zeroth and first order methods, it is also possible to pass in matrices, or even higher dimensional arrays. The only restriction imposed by leaving the `Vector` case is, that it is no longer possible to use finite difference approximations or automatic differentiation. Second order methods (variants of Newton's method) do not support this more general input type.
219225

src/api.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ function simplex_trace(r::MultivariateOptimizationResults)
4949
[ state.metadata["simplex"] for state in tr ]
5050
end
5151
function simplex_value_trace(r::MultivariateOptimizationResults)
52+
tr = trace(r)
5253
if !isa(r.method, NelderMead)
5354
throw(ArgumentError("There are no simplex values involved in optimization using $(r.method). Please use f_trace(...) to grab the objective values from the trace."))
5455
end

test/general/api.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,18 @@
3232
Optim.optimize(d2, initial_x, LBFGS())
3333

3434
Optim.optimize(f, initial_x, NelderMead())
35+
ne_res = Optim.optimize(f, initial_x, NelderMead(), Optim.Options(store_trace=true,))
36+
@test_throws ErrorException Optim.simplex_trace(ne_res)
37+
@test_throws ErrorException Optim.simplex_value_trace(ne_res)
38+
@test_throws ErrorException Optim.centroid_trace(ne_res)
39+
ne_res2 = Optim.optimize(f, initial_x, NelderMead(), Optim.Options(store_trace=true,trace_simplex=true))
40+
Optim.simplex_trace(ne_res2)
41+
Optim.simplex_value_trace(ne_res2)
42+
@test_throws ErrorException Optim.centroid_trace(ne_res2)
43+
ne_res3 = Optim.optimize(f, initial_x, NelderMead(), Optim.Options(store_trace=true,extended_trace=true,trace_simplex=true))
44+
Optim.simplex_trace(ne_res3)
45+
Optim.simplex_value_trace(ne_res3)
46+
Optim.centroid_trace(ne_res3)
3547

3648
Optim.optimize(d3, initial_x, Newton())
3749

0 commit comments

Comments
 (0)