主要内容

非线性平等和不等式约束

此示例显示如何解决包含非线性约束的优化问题。包括编写计算均等和不等式约束值的函数来包括非线性约束。非线性约束函数具有语法

[c,ceq] = nonllinconstr(x)

功能C(x)代表约束C(x)<= 0。功能CEQ(x)代表约束CEQ(x)= 0

笔记:您必须具有非线性约束函数返回C(x)CEQ(x),即使您只有一种类型的非线性约束。如果不存在约束,则具有函数返回[]对于那个约束。

非线性约束

假设您有非线性平等约束

X 1 2 + X 2 = 1

和非线性不等式约束

X 1 X 2 - 1 0.

重写这些约束

X 1 2 + X 2 - 1 = 0. - X 1 X 2 - 1 0. ≤. 0.

夹具辅助功能在此示例的结尾以正确的语法实现这些不等式。

目标职能

解决这个问题

X F X = E. X 1 4. X 1 2 + 2 X 2 2 + 4. X 1 X 2 + 2 X 2 + 1

受约束。这objfun.辅助功能在此示例的结尾实现这个目标函数。

解决问题

通过致电解决问题粉刺求解器。该求解器需要初始点;使用点x0 = [-1,-1]

x0 = [-1,-1];

问题没有界限或线性约束,因此将这些输入设置为[]

a = [];b = [];AEQ = [];beq = [];lb = [];UB = [];

打电话给求解器。

[,fval] = fmincon(@ objfun,x0,a,b,aeq,beq,lb,Ub,@ confuneq)
发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
X =1×2-0.7529 0.4332
fval = 1.5093.

求解器报告了解决方案满足的约束。检查解决方案的非线性约束。

[C,CEQ] = Confuneq(x)
c = -9.6739.
CEQ = 2.0668E-12

C根据需要小于0。CEQ.在默认约束公差范围内等于01E-6

辅助功能

以下代码创建了夹具帮手功能。

功能[C,CEQ] = Confuneq(x)%非线性不等式约束c = -x(1)* x(2) -  10;%非线性平等约束CEQ = x(1)^ 2 + x(2) -  1;结尾

以下代码创建了objfun.帮手功能。

功能f = objfun(x)f = exp(x(1))*(4 * x(1)^ 2 + 2 * x(2)^ 2 + 4 * x(1)* x(2)+ 2 * x(2)+1);结尾

相关话题