基于问题求解有约束非线性优化
此示例说明如何通过使用基于问题的方法寻找具有非线性约束的非线性目标函数的最小值。
要使用基于问题的方法找到非线性目标函数的最小值,请首先将目标函数编写为文件或匿名函数。此示例的目标函数是
f(x,y)=ex(4x2+2y2+4xy+2y−1).
%% 创建优化问题变量 x 和 y。
x = optimvar('x');
y = optimvar('y');
%% 使用优化变量的表达式创建目标函数。
obj = objfunx(x,y);
%% 创建一个以 obj 为目标函数的优化问题。
prob = optimproblem('Objective',obj);
%% 不等式约束:非线性约束:
% 创建一个使解位于倾斜椭圆中的非线性约束
% 使用优化变量的不等式表达式创建约束。
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;
%% 检查此问题。(模型完整)
disp('显示问题:')
show(prob)
function f = objfunx(x,y)
f = exp(x).*(4*x.^2 + 2*y.^2 + 4*x.*y + 2*y - 1);
end
显示问题:
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
%% 创建优化问题变量 x 和 y。
x = optimvar('x');
y = opti