SimultaneousPerturbationStochasticApproximation
using SimultaneousPerturbationStochasticApproximation
f(x) = sum(abs2, x)
result = minimize(f, lower = fill(-10, 10), upper = fill(10, 10), maxfevals = 10^5)
1-element Array{Any,1}:
(x = [5.709728947263545e-21, 2.5332645667262345e-21, 2.037385585780084e-20, 1.1949949632333856e-20, -2.41682064852466e-20, 1.7430842882710955e-20, -1.9709712546525954e-20, -9.674114437961352e-21, 1.3385675841053994e-20, -1.2440646770159904e-20], f = 1.8730950287147333e-6, evals = 8201)
SimultaneousPerturbationStochasticApproximation.ConvergenceWelchTest
— MethodConvergenceWelchTest(; N = 1000, K = 25, T = Float64, N_positivetests = 3)
SimultaneousPerturbationStochasticApproximation.LearningRateUpdate
— MethodLearningRateUpdate(lower, upper; pi_a = .7, N = 1000, factor = 1.5)
SimultaneousPerturbationStochasticApproximation.NoInitializer
— TypeNoInitializer()
SimultaneousPerturbationStochasticApproximation.RandomInitializer
— TypeRandomInitializer()
SimultaneousPerturbationStochasticApproximation.SPSA
— MethodSPSA(; lower, upper,
heuristic = SimpleHeuristic(elementwise = true,
update = LearningRateUpdate(lower, upper)),
initializer = SobolInitializer(restarts = 1, N = 100),
convergencetest = ConvergenceWelchTest(),
pi_max = .1,
init = lower)
SimultaneousPerturbationStochasticApproximation.SimpleHeuristic
— MethodSimpleHeuristic(; elementwise = false, A = 500, c = 0., c_min = 1e-3,
a_max = 1e4, α = .602, γ = .101, ninit = 100,
update = nothing)
update
could also be LearningRateUpdate
.
SimultaneousPerturbationStochasticApproximation.minimize!
— Methodminimize!(spsa::SPSA, f; kwargs...) = minimize!(Random.GLOBAL_RNG, spsa, f; kwargs...)
SimultaneousPerturbationStochasticApproximation.minimize!
— Methodminimize!(rng::Random.AbstractRNG,
spsa::SPSA{<:Any,<:Any,<:Any,T},
f;
callback = () -> nothing,
maxfevals,
gamma_fhat = .9, # just for tracking the learning progress
verbose = true) where T
SimultaneousPerturbationStochasticApproximation.minimize
— Methodminimize(f; callback = () -> nothing, maxfevals, verbose = true, kwargs...)
kwargs
are passed to SPSA
.