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

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

По умолчанию, solve использует автоматическое дифференцирование, чтобы оценить градиенты объективных и нелинейных ограничительных функций, когда применимо. Автоматическое дифференцирование применяется к функциям, которые описываются в терминах операций на переменных оптимизации, не используя fcn2optimexpr функция. Смотрите Автоматическое Дифференцирование в Optimization Toolbox и Преобразуйте Нелинейную Функцию в Выражение Оптимизации.

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

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

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

Функция sech(y)=1/cosh(y), и cosh одна из поддерживаемых функций, описанных в Поддерживаемых Операциях на Переменных и выражениях Оптимизации. Создайте задачу оптимизации, представляющую эти переменные и выражение целевой функции.

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)))/cosh(y(2));
prob.Objective = fun1 - fun2;

Минимизация подвергается нелинейному ограничению x12+x22+y12+y224.

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

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

Смотрите также

Похожие темы