SAMIN doesn't converge
@mcreel I don't know if you're still maintaining your own SAMIN or if you're still using Julia at all, but looking at https://github.com/JuliaNLSolvers/Optim.jl/pull/1136 I realized we're only testing himmelblau. That convergences, but almost all of the rest of the tests we have do not converge with SAMIN and many are quite far off. Many seem to never reach the coverage_ok situation, but even if I set that option to true it doesn't converge. I was wondering if we could try some of them and compare to your implementation?
Test Summary: | Pass Fail Total Time
SAMIN | 3 14 17 2.0s
SAMIN Rosenbrock | 1 1 0.1s
SAMIN Quadratic Diagonal | 1 1 0.1s
SAMIN Hosaki | 1 1 0.0s
SAMIN Large Polynomial | 1 1 0.4s
SAMIN Penalty Function I | 1 1 0.3s
SAMIN Beale | 1 1 0.0s
SAMIN Extended Rosenbrock | 1 1 0.1s
SAMIN Polynomial | 1 1 0.0s
SAMIN Powell | 1 1 0.0s
SAMIN Exponential | 1 1 0.0s
SAMIN Paraboloid Diagonal | 1 1 0.1s
SAMIN Paraboloid Random Matrix | 1 1 0.3s
SAMIN Extended Powell | 1 1 0.1s
SAMIN Trigonometric | 1 1 0.3s
SAMIN Fletcher-Powell | 1 1 0.0s
SAMIN Parabola | 1 1 0.0s
SAMIN Himmelblau | 1 1 0.0s
from
@testset "SAMIN" begin
@testset "SAMIN $i" for i in keys(MVP.UnconstrainedProblems.examples)
prob = MVP.UnconstrainedProblems.examples[i]
xtrue = prob.solutions
f = OptimTestProblems.MultivariateProblems.objective(prob)
x0 = prob.initial_x
res = optimize(
f,
x0 ./ 1.1 .- 2.0,
x0 .* 1.1 .+ 2.0,
x0,
Optim.SAMIN(t0 = 2.0, r_expand = 9.0, verbosity = 0),
Optim.Options(iterations = 100000),
)
@test Optim.minimum(res) < 1e-5
end
end
Hi Patrick,
Generally, I do use my own version. I'm not programming much these days, as I have pretty much finished my research activities.
I think that the problem is simply that there are not enough iterations to get to convergence. For these tests, I suggest:
- set coverage_ok=true There's no need for this in these simple test problems.
- Most importantly, increase the iteration limit to 10⁸ or even higher.
- Perhaps, set rt=0.5. If the iteration limit is high enough, this won't be necessary, but it could save time. The closer rt is to 1, the more iterations will be needed. The advantage is that you are more likely to get to the real global min.
Best, M.