非线性约束
等非线性约束优化解决者接受fmincon
,fseminf
,fgoalattain
,fminimax
,全局优化工具箱解决者遗传算法
(全局优化工具箱),gamultiobj
(全局优化工具箱),patternsearch
(全局优化工具箱),paretosearch
(全局优化工具箱),GlobalSearch
(全局优化工具箱),MultiStart
(全局优化工具箱)。非线性约束允许您限制的解决方案可以描述任何地区的光滑函数。
非线性不等式约束的形式c(x)≤0,在那里c是一个向量的限制,每个约束的一个组件。同样,非线性等式约束的形式量表信(x)= 0。
请注意
非线性约束函数必须返回c
和量表信
不等式和等式约束函数,即使他们都不存在。返回一个空条目[]
为一个不存在的约束。
例如,假设你有下列不等式约束:
写这些约束在一个函数文件如下:
函数测查[c] = ellipseparabola c (1) (x) = (x (1) ^ 2) / 9 + (x (2) ^ 2) / 4 - 1;c (2) = x (1) ^ 2 - x (2) - 1;测查= [];结束
ellipseparabola
返回一个空条目[]
为量表信
非线性等式约束函数。另外,第二个不平等是重写≤0。
最小化函数exp (x (1) + 2 * x (2))
经ellipseparabola
约束。
有趣= @ (x) exp (x (1) + 2 * x (2));nonlcon = @ellipseparabola;0 x0 = [0];一个= [];%没有其他约束b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。x = -0.2500 - -0.9375
包括约束函数的梯度
如果你提供梯度c和量表信解算器可以运行更快,更可靠的结果。
提供一个梯度的另一个优势。解算器可以达到一个点x
这样x
是可行的,但有限的差异x
总是会导致一个不可行点。在这种情况下,解算器可以失败或过早地停止。提供一个梯度允许解算器。
包括梯度信息,编写一个条件化函数如下:
函数[c,测查,gradc, gradceq] = ellipseparabola (x) c (1) = x (1) ^ 2/9 + x (2) ^ 2/4 - 1;c (2) = x (1) ^ 2 - x (2) - 1;测查= [];如果nargout > 2 gradc = [2 * x (1) / 9, 2 * x (1);…x (2) / 2, 1];gradceq = [];结束
看到写作标量目标函数条件化的信息功能。梯度矩阵的形式
gradc
我,我= [∂c
(j)/∂x我]。
梯度矩阵的第一列相关联c (1)
,第二列是相关联的c (2)
。这个导数形式的转置雅克比的形式。
解算器使用梯度的非线性约束,通过使用表明他们存在optimoptions
:
选择= optimoptions (@fmincon,“SpecifyConstraintGradient”,真正的);
确保通过结构来解算器的选项:
[x, fval] = fmincon (Aeq @myobj x0, A, b,说真的,磅,乌兰巴托,…@ellipseparabola选项)
如果你有一个符号数学工具箱™许可,可以自动计算梯度和麻布,中描述计算梯度和麻布使用符号数学工具箱。
匿名非线性约束函数
非线性约束函数必须返回两个输出。第一个输出对应于非线性不等式,第二个对应非线性等式。
匿名函数返回一个输出。所以你如何写一个匿名函数的非线性约束?
的交易
函数分配多个输出。例如,假设你有非线性的不平等
假设你有非线性的平等
。
编写一个非线性约束函数如下。
c = @ (x) [x (1) ^ 2/9 + x (2) ^ 2/4 - 1;(1)^ 2 - x (2) - 1);测查= @ (x)双曲正切(x (1)) - x (2);nonlinfcn = @ (x)协议(c (x)量表(x));
最小化函数
受到的约束nonlinfcn
,使用fmincon
。
obj = @ (x) cosh (x (1)) + sinh (x (2));选择= optimoptions (@fmincon,“算法”,“sqp”);z = fmincon (obj, (0, 0), [], [], [], [], [], [], nonlinfcn,选择)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
z =2×1-0.6530 - -0.5737
检查结果如何z
满足约束,使用nonlinfcn
。
[cout, ceqout] = nonlinfcn (z)
cout =2×1-0.8704 0
ceqout = 1.1102 e-16
z
满足所有的约束内的默认值约束宽容ConstraintTolerance
,1 e-6
。
在匿名的目标函数的更多信息,请参阅匿名函数的目标。
另请参阅
fmincon
|fgoalattain
|遗传算法
(全局优化工具箱)|patternsearch
(全局优化工具箱)|GlobalSearch
(全局优化工具箱)|MultiStart
(全局优化工具箱)