При использовании автоматической дифференциации основанная на проблеме solve
функция обычно требует меньшего количества вычислений функции и может работать более устойчиво.
По умолчанию solve
использует автоматическую дифференциацию, чтобы вычислить градиенты целевых и нелинейных функций ограничения, когда это применимо. Автоматическая дифференциация применяется к функциям, которые выражаются в терминах использований с переменных оптимизации, не используя fcn2optimexpr
функция. Смотрите Автоматическую Дифференциацию в Optimization Toolbox и Преобразуйте нелинейную функцию в выражение оптимизации.
Рассмотрим задачу минимизации следующей целевой функции:
Создайте задачу оптимизации, представляющую эти переменные и выражение целевой функции.
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;
Минимизация зависит от нелинейного ограничения .
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
The 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
Сводные данные, основным эффектом автоматической дифференциации в оптимизации является снижение количества вычислений функции.