exponenta event banner

Влияние автоматического дифференцирования в оптимизации на основе проблем

При использовании автоматического дифференцирования проблема основана на solve функция обычно требует меньшего количества оценок функций и может работать более надежно.

По умолчанию solve использует автоматическое дифференцирование для оценки градиентов целевых и нелинейных функций ограничения, когда это применимо. Автоматическое дифференцирование применяется к функциям, которые выражены в терминах операций над переменными оптимизации без использования fcn2optimexpr функция. См. разделы Автоматическое дифференцирование на панели инструментов оптимизации и Преобразование нелинейной функции в выражение оптимизации.

Проблема минимизации

Рассмотрим проблему минимизации следующей целевой функции:

fun1 = 100 (x2-x12) 2 + (1-x1) 2fun2 = exp (- (xi-yi) 2) exp (-exp (-y1)) sech (y2) цель = fun1-fun2.

Создайте задачу оптимизации, представляющую эти переменные и выражение целевой функции.

prob = optimproblem;
x = optimvar('x',2);
y = optimvar('y',2);
fun1 = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
fun2 = exp(-sum((x - y).^2))*exp(-exp(-y(1)))*sech(y(2));
prob.Objective = fun1 - fun2;

Минимизация зависит от x12+x22+y12+y22≤4 нелинейных ограничений.

prob.Constraints.cons = sum(x.^2 + y.^2) <= 4;

Решение проблемы и анализ процесса решения

Решите проблему, начиная с начальной точки.

init.x = [-1;2];
init.y = [1;-1];
[xproblem,fvalproblem,exitflagproblem,outputproblem] = solve(prob,init);
Solving problem using fmincon.

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
disp(fvalproblem)
   -0.5500
disp(outputproblem.funcCount)
    77
disp(outputproblem.iterations)
    46

output структура показывает, что solve требования fmincon, что требует 77 оценок функций и 46 итераций для решения проблемы. Значение целевой функции в решении fvalproblem = -0.55.

Решение проблемы без автоматической дифференциации

Для определения повышения эффективности от автоматического дифференцирования установите solve аргументы пары имя-значение, чтобы использовать градиенты конечных разностей.

[xfd,fvalfd,exitflagfd,outputfd] = solve(prob,init,...
    "ObjectiveDerivative",'finite-differences',"ConstraintDerivative",'finite-differences');
Solving problem using fmincon.

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
disp(fvalfd)
   -0.5500
disp(outputfd.funcCount)
   264
disp(outputfd.iterations)
    46

Использование аппроксимации градиента конечных разностей solve провести 269 оценок функций по сравнению с 77. Количество итераций почти одинаково, как и значение целевой функции в решении. Конечные точки решения одинаковы для отображения точности.

disp([xproblem.x,xproblem.y])
    0.8671    1.0433
    0.7505    0.5140
disp([xfd.x,xfd.y])
    0.8671    1.0433
    0.7505    0.5140

Таким образом, основной эффект автоматического дифференцирования в оптимизации заключается в уменьшении количества оценок функций.

См. также

Связанные темы