Документация Engee

SAMIN

Конструктор

SAMIN(; nt::Int = 5     # снижать температуру каждые nt*ns*dim(x_init) вычислений
        ns::Int = 5     # корректировать границы каждые ns*dim(x_init) вычислений
        rt::T = 0.9     # геометрический коэффициент снижения температуры: при изменении температуры новая температура равна t=rt*t
        neps::Int = 5   # количество предыдущих лучших значений, с которыми сравнивается конечный результат
        f_tol::T = 1e-12 # требуемый уровень допуска для сравнения значений функций
        x_tol::T = 1e-6 # требуемый уровень допуска для x
        coverage_ok::Bool = false, # если false, увеличивать температуру до тех пор, пока не будет охвачено пространство начальных параметров
        verbosity::Int = 0) # скаляр: 0, 1, 2 или 3 (значение по умолчанию — 0).

Описание

Метод SAMIN реализует алгоритм имитации отжига для задач с ограничениями по границам, как описано в работе Гоффа (Goffe) и соавторов (1994) и Гоффа (Goffe) (1996). Ключевым параметром управления является rt, геометрическая скорость снижения температуры, которая должна находиться в диапазоне от нуля до единицы. Если установить меньшее значение rt, алгоритм будет быстрее сужать пространство поиска, сокращая время работы. Слишком низкое значение rt приведет к тому, что алгоритм будет сужать поиск слишком быстро, и истинный минимизатор может быть пропущен. Если возможно, запустите алгоритм несколько раз, чтобы убедиться, что каждый раз находится одно и то же решение. В противном случае увеличьте значение rt. Если вы сомневаетесь, начните с консервативного значения rt, например rt=0,95, и разрешите большое количество итераций. Для алгоритма требуются нижние и верхние границы параметров, хотя эти границы часто задаются в довольно широком диапазоне и необязательно отражают ограничения в модели, а скорее являются границами, ограничивающими пространство параметров. Если итоговые x находятся очень близко к границе (что можно проверить, установив уровень детализации равным 1), рекомендуется перезапустить оптимизатор с более широкими границами, если только эти границы не отражают жесткие ограничения для x.

Пример

В этом примере демонстрируется успешная минимизация:

julia> using Optim, OptimTestProblems

julia> prob = UnconstrainedProblems.examples["Rosenbrock"];

julia> res = Optim.optimize(prob.f, fill(-100.0, 2), fill(100.0, 2), prob.initial_x, SAMIN(), Optim.Options(iterations=10^6))
================================================================================
SAMIN results
==> Normal convergence <==
total number of objective function evaluations: 23701

     Obj. value:      0.0000000000

       parameter      search width
         1.00000           0.00000
         1.00000           0.00000
================================================================================

Results of Optimization Algorithm
 * Algorithm: SAMIN
 * Starting Point: [-1.2,1.0]
 * Minimizer: [0.9999999893140956,0.9999999765350857]
 * Minimum: 5.522977e-16
 * Iterations: 23701
 * Convergence: false
   * |x - x'| ≤ 0.0e+00: false
     |x - x'| = NaN
   * |f(x) - f(x')| ≤ 0.0e+00 |f(x)|: false
     |f(x) - f(x')| = NaN |f(x)|
   * |g(x)| ≤ 0.0e+00: false
     |g(x)| = NaN
   * Stopped by an increasing objective: false
   * Reached Maximum Number of Iterations: false
 * Objective Calls: 23701
 * Gradient Calls: 0

Пример

В этом примере показана неудачная минимизация, поскольку скорость охлаждения rt=0,5 слишком высокая:

julia> using Optim, OptimTestProblems

julia> prob = UnconstrainedProblems.examples["Rosenbrock"];
julia> res = Optim.optimize(prob.f, fill(-100.0, 2), fill(100.0, 2), prob.initial_x, SAMIN(rt=0.5), Optim.Options(iterations=10^6))
================================================================================
SAMIN results
==> Normal convergence <==
total number of objective function evaluations: 12051

     Obj. value:      0.0011613045

       parameter      search width
         0.96592           0.00000
         0.93301           0.00000
================================================================================

Results of Optimization Algorithm
 * Algorithm: SAMIN
 * Starting Point: [-1.2,1.0]
 * Minimizer: [0.9659220825756248,0.9330054696322896]
 * Minimum: 1.161304e-03
 * Iterations: 12051
 * Convergence: false
   * |x - x'| ≤ 0.0e+00: false
     |x - x'| = NaN
   * |f(x) - f(x')| ≤ 0.0e+00 |f(x)|: false
     |f(x) - f(x')| = NaN |f(x)|
   * |g(x)| ≤ 0.0e+00: false
     |g(x)| = NaN
   * Stopped by an increasing objective: false
   * Reached Maximum Number of Iterations: false
 * Objective Calls: 12051
 * Gradient Calls: 0

Справочные материалы

  • Goffe, et. al. (1994) Global Optimization of Statistical Functions with Simulated Annealing, Journal of Econometrics, V. 60, N. 1/2.

  • Goffe, William L. (1996) SIMANN: A Global Optimization Algorithm using Simulated Annealing. Studies in Nonlinear Dynamics & Econometrics, Oct96, Vol. 1 Issue 3.