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

Комплексная оптимизация

Оптимизация функций, определенных для комплексных входных данных ( ), поддерживается простой передачей комплексного в качестве входного значения. Поддерживаются все алгоритмы, которые естественным образом могут быть расширены для работы с комплексными числами: имитация отжига и все методы первого порядка.

Градиент функции преобразования комплексных значений в вещественные определяется как единственный вектор такой, что

Иногда это записывается как

Градиент функции является сопоставлением . Даже если она дифференцируема как функция в , она не может быть комплексно-дифференцируемой. Например, возьмем . Тогда не является комплексно-дифференцируемой (голоморфной). Поэтому гессиан функции в общем случае не вполне определен как комплексная матрица (только как вещественная матрица ), и поэтому алгоритмы оптимизации второго порядка не могут быть применены напрямую. Чтобы использовать оптимизацию второго порядка, необходимо выполнить преобразование в вещественные переменные.

Примеры

Покажем, как минимизировать функцию второй плюс четвертой степени с помощью алгоритма оптимизации LBFGS.

using Random
Random.seed!(0) # Зададим начальные значения для воспроизводимости
# μ — четвертая степень. μ = 0 — квадратичная задача.
n = 4
A = randn(n,n) + im*randn(n,n)
A = A'A + I
b = randn(n) + im*randn(n)
μ = 1.0

fcomplex(x) = real(dot(x,A*x)/2 - dot(b,x)) + μ*sum(abs.(x).^4)
gcomplex(x) = A*x-b + 4μ*(abs.(x).^2).*x
gcomplex!(stor,x) = copyto!(stor,gcomplex(x))

x0 = randn(n)+im*randn(n)

res = optimize(fcomplex, gcomplex!, x0, LBFGS())

Вот результат оптимизации:

Results of Optimization Algorithm
 * Algorithm: L-BFGS
 * Starting Point: [0.48155603952425174 - 1.477880724921868im,-0.3219431528959694 - 0.18542418173298963im, ...]
 * Minimizer: [0.14163543901272568 - 0.034929496785515886im,-0.1208600058040362 - 0.6125620908171383im, ...]
 * Minimum: -1.568997e+00
 * Iterations: 16
 * Convergence: true
   * |x - x'| ≤ 0.0e+00: false
     |x - x'| = 3.28e-09
   * |f(x) - f(x')| ≤ 0.0e+00 |f(x)|: false
     |f(x) - f(x')| = -4.25e-16 |f(x)|
   * |g(x)| ≤ 1.0e-08: true
     |g(x)| = 6.33e-11
   * Stopped by an increasing objective: false
   * Reached Maximum Number of Iterations: false
 * Objective Calls: 48
 * Gradient Calls: 48

Аналогично, с ConjugateGradient.

res = optimize(fcomplex, gcomplex!, x0, ConjugateGradient())
Results of Optimization Algorithm
 * Algorithm: Conjugate Gradient
 * Starting Point: [0.48155603952425174 - 1.477880724921868im,-0.3219431528959694 - 0.18542418173298963im, ...]
 * Minimizer: [0.1416354378490425 - 0.034929499492595516im,-0.12086000949769983 - 0.6125620892675705im, ...]
 * Minimum: -1.568997e+00
 * Iterations: 23
 * Convergence: false
   * |x - x'| ≤ 0.0e+00: false
     |x - x'| = 8.54e-10
   * |f(x) - f(x')| ≤ 0.0e+00 |f(x)|: false
     |f(x) - f(x')| = -4.25e-16 |f(x)|
   * |g(x)| ≤ 1.0e-08: false
     |g(x)| = 3.72e-08
   * Stopped by an increasing objective: true
   * Reached Maximum Number of Iterations: false
 * Objective Calls: 51
 * Gradient Calls: 29

Дифференцирование

Методы конечных разностей, используемые в Optim, поддерживают вещественные функции с комплексными входными данными.

res = optimize(fcomplex, x0, LBFGS())
Results of Optimization Algorithm
 * Algorithm: L-BFGS
 * Starting Point: [0.48155603952425174 - 1.477880724921868im,-0.3219431528959694 - 0.18542418173298963im, ...]
 * Minimizer: [0.1416354390108624 - 0.034929496786122484im,-0.12086000580073922 - 0.6125620908025359im, ...]
 * Minimum: -1.568997e+00
 * Iterations: 16
 * Convergence: true
   * |x - x'| ≤ 0.0e+00: false
     |x - x'| = 3.28e-09
   * |f(x) - f(x')| ≤ 0.0e+00 |f(x)|: true
     |f(x) - f(x')| = 0.00e+00 |f(x)|
   * |g(x)| ≤ 1.0e-08: true
     |g(x)| = 1.04e-10
   * Stopped by an increasing objective: false
   * Reached Maximum Number of Iterations: false
 * Objective Calls: 48
 * Gradient Calls: 48

Поддержка автоматического дифференцирования для комплексных входных данных может появиться, когда будет готов пакет Cassete.jl.

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

  • Sorber, L., Barel, M. V., & Lathauwer, L. D. (2012). Unconstrained optimization of real functions in complex variables. SIAM Journal on Optimization, 22(3), 879-898.

  • Kreutz-Delgado, K. (2009). The complex gradient operator and the CR-calculus. arXiv preprint arXiv:0906.4835.