几种优化求解器接受非线性约束,包括粉刺
那fseminf.
那Fgoalattain
那Fminimax.
,而且全局优化工具箱求解器GA.
(全局优化工具箱)那gamultiobj.
(全局优化工具箱)那Patternsearch.
(全局优化工具箱)那帕累托研究
(全局优化工具箱)那Globalsearch.
(全局优化工具箱), 和多层的
(全局优化工具箱)。非线性约束允许您将解决方案限制为可以在平滑函数方面描述的任何区域。
非线性不等式约束具有表单C(X)≤0., 在哪里C是约束的矢量,每个约束的一个组件。同样地,非线性平等约束具有表单CEQ.(X)= 0.。
笔记
非线性约束函数必须返回两者C
和CEQ.
,不等式和平等约束函数,即使它们不存在。返回空的条目[]
对于不存在的约束。
例如,假设您将以下不等式作为约束:
在函数文件中写下这些约束,如下所示:
功能[C,CEQ] =椭圆ePTepola(x)c(1)=(x(1)^ 2)/ 9 +(x(2)^ 2)/ 4 - 1;C(2)= x(1)^ 2 - x(2) - 1;CEQ = [];结尾
ellipseparabola.
返回一个空输入[]
为了CEQ.
,非线性平等约束函数。此外,第二个不等式被重写为≤0形式。
最小化功能EXP(x(1)+ 2 * x(2))
受到肯定ellipseparabola.
约束。
Fun = @(x)exp(x(1)+ 2 * x(2));nonlcon = @ellipseparabola;x0 = [0 0];a = [];%没有其他限制b = [];AEQ = [];beq = [];lb = [];UB = [];X = Fmincon(乐趣,X0,A,B,AEQ,BEQ,LB,UB,NONLCON)
发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。x = -0.2500 -0.9375
如果您提供梯度C和CEQ.,求解器可以更快地运行并提供更可靠的结果。
提供梯度具有另一个优点。求解器可以达到一个点X
这样X
是可行的,但有限的差异X
总是导致一个不可行的点。在这种情况下,求解器可以过早地失败或停止。提供梯度允许求解器进行。
要包括梯度信息,请写下条件化函数,如下所示:
功能[C,CEQ,GARC,GERCICEQ] =椭圆ePLABOLA(x)C(1)= x(1)^ 2/9 + x(2)^ 2/4 - 1;C(2)= x(1)^ 2 - x(2) - 1;CEQ = [];如果Nargout> 2 Gradc = [2 * x(1)/ 9,2 * x(1);......X(2)/ 2,-1];毕格= [];结尾
看写标量目标函数有关有条件化功能的信息。梯度矩阵具有表单
GRADC
我,J.= [∂C
(j)/∂X一世]。
梯度矩阵的第一列与C(1)
,第二列与之相关联C(2)
。这种衍生形式是雅可比人形式的转置。
要有一个求解器使用非线性约束的渐变,表示通过使用它们存在优化选择
:
选项= Optimoptions(@Fmincon,'specifyconstraintgradient',真的);
确保将选项结构传递给求解器:
[x,fval] = fmincon(@ myobj,x0,a,b,aeq,beq,lb,Ub,... @ ellipseparabola,选项)
如果您有符号数学工具箱™许可证,则可以根据中描述自动计算渐变和黑孔轴使用符号数学工具箱™计算渐变和Hessians。
非线性约束函数必须返回两个输出。第一输出对应于非线性不等式,第二个输出对应于非线性等分。
匿名函数只返回一个输出。那么你如何用非线性约束写一个匿名函数?
这交易
功能分发多个输出。例如,假设您有非线性不等式
假设你有非线性平等
。
写出如下所示的非线性约束函数。
c = @(x)[x(1)^ 2/9 + x(2)^ 2/4 - 1;X(1)^ 2 - x(2) - 1];CEQ = @(x)tanh(x(1)) - x(2);nonlinfcn = @(x)交易(c(x),ceq(x));
最小化功能
受限制的影响nonlinfcn.
, 用粉刺
。
obj = @(x)cosh(x(1))+ sinh(x(2));选择= Optimoptions(@Fmincon,'算法'那'SQP');z = fmincon(obj,[0; 0],[],[],[],[],[],[],非林FCN,OPTS)
发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
z =2×1-0.6530 -0.5737
检查结果点的程度如何Z.
满足约束,使用nonlinfcn.
。
[cout,ceqout] = nonlinfcn(z)
cout =2×1-0.8704 0
CEQOUT = 0.
Z.
满足所有约束在约束公差的默认值中约束特许
那1E-6
。
有关匿名目标函数的信息,请参阅匿名功能目标。
Fgoalattain
|粉刺
|GA.
(全局优化工具箱)|Globalsearch.
(全局优化工具箱)|多层的
(全局优化工具箱)|Patternsearch.
(全局优化工具箱)