此示例显示了如何使用衍生信息解决非线性约束的非线性问题。
通常,最小化例程使用通过有限差异近似计算的数值梯度。此过程系统地扰乱了每个变量,以便计算函数和约束部分导数。或者,您可以在分析上提供计算部分导数的函数。通常,当您提供衍生信息时,求解器更准确且有效地工作。
问题是解决
受限制
因为这粉刺
求解器预计将以表格写入的约束
,编写约束函数以返回以下值:
。
目标函数是
。
计算渐变 关于变量 和 。
。
这objfungrad.
辅助功能在此示例的结尾返回目标函数
它在第二个输出中的梯度GRADF.
。放@objfungrad.
作为目标。
有趣= @objfungrad;
辅助功能Confungrad.
是非线性约束函数;它出现在此示例的结尾。
不等式约束的衍生信息具有每个列对应于一个约束。换句话说,约束的梯度处于以下格式:
放@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 = [];结尾结尾