主要内容

具有梯度的非线性约束

此示例显示了如何使用衍生信息解决非线性约束的非线性问题。

通常,最小化例程使用通过有限差异近似计算的数值梯度。此过程系统地扰乱了每个变量,以便计算函数和约束部分导数。或者,您可以在分析上提供计算部分导数的函数。通常,当您提供衍生信息时,求解器更准确且有效地工作。

目标函数和非线性约束

问题是解决

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

受限制

X 1 X 2 - X 1 - X 2 ≤. - 1 5. X 1 X 2 - 1 0.

因为这粉刺求解器预计将以表格写入的约束 C X ≤. 0. ,编写约束函数以返回以下值:

C X = [ X 1 X 2 - X 1 - X 2 + 1 5. - 10. - X 1 X 2 ]

梯度目标函数

目标函数是

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

计算渐变 F X 关于变量 X 1 X 2

F X = [ F X + exp. X 1 8. X 1 + 4. X 2 exp. X 1 4. X 1 + 4. X 2 + 2 ]

objfungrad.辅助功能在此示例的结尾返回目标函数 F X 它在第二个输出中的梯度GRADF.。放@objfungrad.作为目标。

有趣= @objfungrad;

带渐变的约束函数

辅助功能Confungrad.是非线性约束函数;它出现在此示例的结尾

不等式约束的衍生信息具有每个列对应于一个约束。换句话说,约束的梯度处于以下格式:

[ C 1 X 1 C 2 X 1 C 1 X 2 C 2 X 2 ] = [ X 2 - 1 - X 2 X 1 - 1 - X 1 ]

@confungrad.作为非线性约束函数。

nonlcon = @confungrad;

设置使用衍生信息的选项

向这方面表明粉刺求解器,目标和约束函数提供衍生信息。这样做,使用优化选择设置specifyobjectivegradient.specifyConstraintGRadient.选项值到真的

选项= Optimoptions('粉丝'......'specifyobjectivegrient',真的,'specifyconstraintgradient',真的);

解决问题

将初始点设置为[-1,1]

x0 = [-1,1];

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

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

称呼粉刺解决问题。

[x,fval] = fmincon(有趣,x0,a,b,aeq,beq,lb,Ub,nonlcon,选项)
发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
X =1×2-9.5473 1.0474
FVAL = 0.0236.

解决方案与示例中的溶液相同非线性不平等约束,在不使用衍生信息的情况下解决问题。使用衍生物的优点在于解决问题在鲁棒性时,函数评估较少,尽管在该示例中,这种优点是不明显的。使用更多的衍生信息,如与分析幽灵的粉刺内部点算法,提供更多的好处,例如较少的求解器迭代。

辅助功能

此代码创建objfungrad.帮手功能。

功能[f,gradf] = objfungrad(x)f = exp(x(1))*(4 * x(1)^ 2 + 2 * x(2)^ 2 + 4 * x(1)* x(2)+ 2 * x(2)+1);目标函数的%梯度:如果nargout> 1 gradf = [f + exp(x(1))*(8 * x(1)+ 4 * x(2)),exp(x(1))*(4 * x(1)+ 4 *X(2)+2)];结尾结尾

此代码创建Confungrad.帮手功能。

功能[c,ceq,dc,dceq] = confungrad(x)c(1)= 1.5 + x(1)* x(2) -  x(1) -  x(2);%不平等约束C(2)= -x(1)* x(2)-10;%没有非线性平等约束CEQ = [];约束的%梯度:如果Nargout> 2 DC = [x(2)-1,-x(2);x(1)-1,-x(1)];dceq = [];结尾结尾

相关话题