Skip to content

Commit 77501f4

Browse files
authored
Fix NelderMead trace aliasing issues (#1114)
* Fix NelderMead trace aliasing issues * Update optimize.jl
1 parent 1473f37 commit 77501f4

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/multivariate/solvers/zeroth_order/nelder_mead.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ function trace!(tr, d, state, iteration, method::NelderMead, options::Options, c
325325
dt["step_type"] = state.step_type
326326
end
327327
if options.trace_simplex
328-
dt["simplex"] = state.simplex
329-
dt["simplex_values"] = state.f_simplex
328+
dt["simplex"] = deepcopy(state.simplex) # vector of arrays
329+
dt["simplex_values"] = copy(state.f_simplex)
330330
end
331331
update!(tr,
332332
iteration,

test/general/optimize.jl

+18
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,21 @@
5555
results = optimize(cos, 0.0, 2pi, method = Brent())
5656
@test norm(Optim.minimizer(results) - pi) < 0.01
5757
end
58+
59+
60+
@testset "nm trace" begin
61+
# https://github.com/JuliaNLSolvers/Optim.jl/issues/1112
62+
f(x) = (x[1]^2 + x[2] - 11)^2 + (x[1] + x[2]^2 - 7)^2
63+
64+
x0 = [0.0, 0.0]
65+
opt = Optim.Options(store_trace = true,
66+
trace_simplex = true,
67+
extended_trace = true)
68+
res = optimize(f, x0, NelderMead(), opt)
69+
tr = Optim.simplex_trace(res)
70+
trval = Optim.simplex_value_trace(res)
71+
trcent = Optim.centroid_trace(res)
72+
@test tr[end] != tr[end-1]
73+
@test trval[end] != trval[end-1]
74+
@test trcent[end] != trcent[end-1]
75+
end

0 commit comments

Comments
 (0)