Решите ограниченную нелинейную оптимизацию, основанную на проблеме

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

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

f(x,y)=ex(4x2+2y2+4xy+2y-1).

type objfunx
function f = objfunx(x,y)
f = exp(x).*(4*x.^2 + 2*y.^2 + 4*x.*y + 2*y - 1);
end

Создайте переменные задачи оптимизации x и y.

x = optimvar('x');
y = optimvar('y');

Создайте целевую функцию как выражение в переменных оптимизации.

obj = objfunx(x,y);

Создайте задачу оптимизации с obj как целевая функция.

prob = optimproblem('Objective',obj);

Создайте нелинейное ограничение, что решение лежит в наклонном эллипсе, заданном как

xy2+(x+2)2+(y-2)222.

Создайте ограничение как выражение неравенства в переменных оптимизации.

TiltEllipse = x.*y/2 + (x+2).^2 + (y-2).^2/2 <= 2;

Включите ограничение в задачу.

prob.Constraints.constr = TiltEllipse;

Создайте структуру, представляющую начальную точку как x = –3, y = 3.

x0.x = -3;
x0.y = 3;

Проверьте проблему.

show(prob)
  OptimizationProblem : 

	Solve for:
       x, y

	minimize :
       (exp(x) .* (((((4 .* x.^2) + (2 .* y.^2)) + ((4 .* x) .* y))
     + (2 .* y)) - 1))


	subject to constr:
       ((((x .* y) ./ 2) + (x + 2).^2) + ((y - 2).^2 ./ 2)) <= 2
     

Решите проблему.

[sol,fval] = solve(prob,x0)
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.
sol = struct with fields:
    x: -5.2813
    y: 4.6815

fval = 0.3299

Попробуйте другую начальную точку.

x0.x = -1;
x0.y = 1;
[sol2,fval2] = solve(prob,x0)
Solving problem using fmincon.

Feasible point with lower objective function value found.


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.
sol2 = struct with fields:
    x: -0.8210
    y: 0.6696

fval2 = 0.7626

Постройте график эллипса, контуров целевой функции и двух решений.

f = @objfunx;
g = @(x,y) x.*y/2+(x+2).^2+(y-2).^2/2-2;
rnge = [-5.5 -0.25 -0.25 7];
fimplicit(g,'k-')
axis(rnge);
hold on
fcontour(f,rnge,'LevelList',logspace(-1,1))
plot(sol.x,sol.y,'ro','LineWidth',2)
plot(sol2.x,sol2.y,'ko','LineWidth',2)
legend('Constraint','f Contours','Global Solution','Local Solution','Location','northeast');
hold off

Figure contains an axes. The axes contains 4 objects of type implicitfunctionline, functioncontour, line. These objects represent Constraint, f Contours, Global Solution, Local Solution.

Решения находятся на нелинейных границах ограничений. Контурный график показывает, что это единственные локальные минимумы. График также показывает, что есть стационарная точка около [-2,3/2], и локальные максимумы около [-2,0] и [-1,4].

Преобразуйте целевую функцию с помощью fcn2optimexpr

Для некоторых целевых функций или версий программного обеспечения необходимо преобразовать нелинейные функции в выражения оптимизации при помощи fcn2optimexpr. Смотрите Поддерживаемые Операции над Переменными Оптимизации и Выражениями и Преобразование Нелинейной Функции в Выражение Оптимизации. Передайте x и y переменные в fcn2optimexpr вызов, чтобы указать, какая переменная оптимизации соответствует каждой objfunx вход.

obj = fcn2optimexpr(@objfunx,x,y);

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

prob = optimproblem('Objective',obj);

Остальная часть процесса решения идентична.

Копирайт 2018-2020 The MathWorks, Inc.

См. также

Похожие темы