一些优化求解器接受非线性约束,包括粉刺
那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.
约束。
= @(x)exp(x(1) + 2*x(2));nonlcon = @ellipseparabola;X0 = [0 0];一个= [];%没有其他限制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];gradceq = [];结尾
看写标量目标函数有关条件化函数的信息。梯度矩阵有这样的形式
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
(全局优化工具箱)