# Error when trying to specify the initial simplex of Nelder Mead method in GalacticOptim.jl

**URL:** <https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506>\
**Category:** Specific Domains\
**Tags:** package\
**Created:** [May 23, 2022, 12:23pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506 "2022-05-23T12:23:56Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![martinmestre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmestre/32/215857_2.png) [@martinmestre](https://discourse.julialang.org/u/martinmestre)\
**Post date:** [May 23, 2022, 12:23pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/1 "2022-05-23T12:23:56Z")

</div>

Hello,  
I would need help with the following error when trying specify the a,b parameters of the initial simplex constructor. I gives the same error even if I call the constructor without arguments.  
I have Julia 1.7.2.  
The output of Pkg.installed() is the following:

```julia
Dict{String, VersionNumber} with 16 entries:
  "CSV" => v"0.10.4"
  "DynamicalSystems" => v"2.3.0"
  "Interact" => v"0.10.4"
  "Mux" => v"0.7.6"
  "AlgebraOfGraphics" => v"0.6.6"
  "PyCall" => v"1.93.1"
  "GalacticOptimJL" => v"0.1.0"
  "CairoMakie" => v"0.7.5"
  "HDF5" => v"0.16.7"
  "Blink" => v"0.12.5"
  "Plots" => v"1.28.0"
  "WebIO" => v"0.8.17"
  "DataFrames" => v"1.3.3"
  "GalacticOptim" => v"3.2.1"
  "GLM" => v"1.7.0"
  "PalmerPenguins" => v"0.1.4"

```

The code that gives the error is the following:

```julia
"""Optimization trials."""

# %%
using AlgebraOfGraphics, CairoMakie
using PyCall
using GalacticOptim
using GalacticOptimJL

# %%
pushfirst!(PyVector(pyimport("sys")."path"), "")
stream = pyimport("stream")

# %%
function chi2(x,p)
    θ = x[1]
    Δθ = x[2]
    β = x[3]
    ϵ = p[1]
    ic = [1.493370985649168858e+02, 3.669966976308609219e+01, 7.917039545144660018e+00,
          -7.050282547954606294e+00, -1.254565799483599520e+01, -1.636083097847286538e+01]
    r☼ = 8.122
    return stream.chi2(θ, Δθ, β, ϵ, ic, r☼)
end

# %%
x₀ = [3.621802786938911822e+01, 2.745899649967862999e+01, 1.25e-5]
p = [60.0]

prob = OptimizationProblem(chi2, x₀, p)

sol = solve(prob, NelderMead(;initial_simplex=AffineSimplexer(0, 0.2)))

```

When running I obtain the following error:

```julia
ERROR: UndefVarError: AffineSimplexer not defined

```

Even if I call with

```julia
sol = solve(prob, NelderMead(;initial_simplex=AffineSimplexer()))

```

I obtain the same error message  
Thank you in advance!

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [May 23, 2022, 12:31pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/2 "2022-05-23T12:31:32Z")

</div>

I’ve never used `GalacticOptim` but it looks like it’s not reexporting the `Optim` definitions? `Optim.AffineSimplexer()` seems to work.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 23, 2022, 12:56pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/3 "2022-05-23T12:56:11Z")

</div>

Oh we should make GalacticOptimJL reexport it.

---

<div class="post-metadata">

**Author:** ![martinmestre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmestre/32/215857_2.png) [@martinmestre](https://discourse.julialang.org/u/martinmestre)\
**Post date:** [May 23, 2022, 1:26pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/4 "2022-05-23T13:26:37Z")

</div>

Thanks, it starts to run. After 4 evaluations of the the chi2 function, it gives the following error:

```julia
36.21802786938912 27.45899649967863 1.25e-05 --- chi2 = 84.18840989127727
43.46164594326694 27.45899649967863 1.25e-05 --- chi2 = 4407.345028091967
36.21802786938912 32.95080829961435 1.25e-05 --- chi2 = 8123495.394618369
36.21802786938912 27.45899649967863 2.75e-05 --- chi2 = 1478157.9699103832
ERROR: KeyError: key "x" not found
Stacktrace:
  [1] getindex(h::Dict{Any, Any}, key::String)
    @ Base ./dict.jl:481
  [2] (::GalacticOptimJL.var"#_cb#11"{GalacticOptimJL.var"#9#17", NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, Base.Iterators.Cycle{Tuple{GalacticOptim.NullData}}})(trace::OptimizationState{Float64, NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}})
    @ GalacticOptimJL ~/.julia/packages/GalacticOptimJL/isaca/src/GalacticOptimJL.jl:77
  [3] update!(tr::Vector{OptimizationState{Float64, NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}}}, iteration::Int64, f_x::Float64, grnorm::Float64, dt::Dict{Any, Any}, store_trace::Bool, show_trace::Bool, show_every::Int64, callback::GalacticOptimJL.var"#_cb#11"{GalacticOptimJL.var"#9#17", NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, Base.Iterators.Cycle{Tuple{GalacticOptim.NullData}}}, trace_simplex::Bool)
    @ Optim ~/.julia/packages/Optim/6Lpjy/src/utilities/update.jl:25
  [4] trace!(tr::Vector{OptimizationState{Float64, NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}}}, d::TwiceDifferentiable{Float64, Vector{Float64}, Matrix{Float64}, Vector{Float64}}, state::Optim.NelderMeadState{Vector{Float64}, Float64, Vector{Float64}}, iteration::Int64, method::NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, options::Optim.Options{Float64, GalacticOptimJL.var"#_cb#11"{GalacticOptimJL.var"#9#17", NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, Base.Iterators.Cycle{Tuple{GalacticOptim.NullData}}}}, curr_time::Float64)
    @ Optim ~/.julia/packages/Optim/6Lpjy/src/multivariate/solvers/zeroth_order/nelder_mead.jl:331
  [5] optimize(d::TwiceDifferentiable{Float64, Vector{Float64}, Matrix{Float64}, Vector{Float64}}, initial_x::Vector{Float64}, method::NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, options::Optim.Options{Float64, GalacticOptimJL.var"#_cb#11"{GalacticOptimJL.var"#9#17", NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, Base.Iterators.Cycle{Tuple{GalacticOptim.NullData}}}}, state::Optim.NelderMeadState{Vector{Float64}, Float64, Vector{Float64}})
    @ Optim ~/.julia/packages/Optim/6Lpjy/src/multivariate/optimize/optimize.jl:50
  [6] optimize(d::TwiceDifferentiable{Float64, Vector{Float64}, Matrix{Float64}, Vector{Float64}}, initial_x::Vector{Float64}, method::NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, options::Optim.Options{Float64, GalacticOptimJL.var"#_cb#11"{GalacticOptimJL.var"#9#17", NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, Base.Iterators.Cycle{Tuple{GalacticOptim.NullData}}}})
    @ Optim ~/.julia/packages/Optim/6Lpjy/src/multivariate/optimize/optimize.jl:36
  [7] ___solve(prob::OptimizationProblem{true, OptimizationFunction{true, SciMLBase.NoAD, typeof(chi2), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{Float64}, Vector{Float64}, Nothing, Nothing, Nothing, Nothing, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}}, opt::NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters}, data::Base.Iterators.Cycle{Tuple{GalacticOptim.NullData}}; callback::Function, maxiters::Nothing, maxtime::Nothing, abstol::Nothing, reltol::Nothing, progress::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ GalacticOptimJL ~/.julia/packages/GalacticOptimJL/isaca/src/GalacticOptimJL.jl:136
  [8] ___solve
    @ ~/.julia/packages/GalacticOptimJL/isaca/src/GalacticOptimJL.jl:68 [inlined]
  [9] #__solve#2
    @ ~/.julia/packages/GalacticOptimJL/isaca/src/GalacticOptimJL.jl:56 [inlined]
 [10] __solve (repeats 2 times)
    @ ~/.julia/packages/GalacticOptimJL/isaca/src/GalacticOptimJL.jl:44 [inlined]
 [11] #solve#482
    @ ~/.julia/packages/SciMLBase/nbKmA/src/solve.jl:3 [inlined]
 [12] solve(::OptimizationProblem{true, OptimizationFunction{true, SciMLBase.NoAD, typeof(chi2), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{Float64}, Vector{Float64}, Nothing, Nothing, Nothing, Nothing, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}}, ::NelderMead{Optim.AffineSimplexer, Optim.AdaptiveParameters})
    @ SciMLBase ~/.julia/packages/SciMLBase/nbKmA/src/solve.jl:3
 [13] top-level scope
    @ ~/casa/work/2020/halostream/sources/stream_fit/likelihood_grid/optim/optim.jl:33

```

What does “x” refer to?  
Thanks!

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 23, 2022, 1:34pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/5 "2022-05-23T13:34:29Z")

</div>

Oh open an issue. Optim’s callback interface isn’t the same for all solvers so we need to fix the access there.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 23, 2022, 2:05pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/6 "2022-05-23T14:05:32Z")

</div>

Fixed [Check against `NelderMead` type not object for callback branching by Vaibhavdixit02 · Pull Request #249 · SciML/Optimization.jl · GitHub](https://github.com/SciML/GalacticOptim.jl/pull/249)

---

<div class="post-metadata">

**Author:** ![martinmestre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmestre/32/215857_2.png) [@martinmestre](https://discourse.julialang.org/u/martinmestre)\
**Post date:** [May 23, 2022, 2:09pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/7 "2022-05-23T14:09:09Z")

</div>

Thanks!  
How should I proceed ? Update the GalacticOptim and GalacticOptimJL packages ?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 23, 2022, 2:11pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/8 "2022-05-23T14:11:43Z")

</div>

You have to wait until that is tagged and merged, but that shouldn’t be more than an hour from now.

---

<div class="post-metadata">

**Author:** ![martinmestre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmestre/32/215857_2.png) [@martinmestre](https://discourse.julialang.org/u/martinmestre)\
**Post date:** [May 23, 2022, 9:58pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/9 "2022-05-23T21:58:43Z")

</div>

Hi, I have recently updated GalacticOptim.

```julia
[a75be94c] GalacticOptim v3.3.1
[9d3c5eb1] GalacticOptimJL v0.1.0

```

When running the line:

```julia
sol = solve(prob, Optim.NelderMead(; initial_simplex=AffineSimplexer(a=1.25e-5,b=0.2)))

```

I obtain:

```julia
ERROR: UndefVarError: AffineSimplexer not defined

```

What could be happening?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 23, 2022, 10:04pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/10 "2022-05-23T22:04:23Z")

</div>

```julia
sol = solve(prob, Optim.NelderMead(; initial_simplex=Optim.AffineSimplexer(a=1.25e-5,b=0.2)))

```

?

---

<div class="post-metadata">

**Author:** ![martinmestre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmestre/32/215857_2.png) [@martinmestre](https://discourse.julialang.org/u/martinmestre)\
**Post date:** [May 23, 2022, 10:22pm UTC](https://discourse.julialang.org/t/error-when-trying-to-specify-the-initial-simplex-of-nelder-mead-method-in-galacticoptim-jl/81506/11 "2022-05-23T22:22:20Z")

</div>

Yes it works like that and also if I just use  
`(prob, NelderMead...`  
without making Optim explicit.

Thank you very much!
