主要内容

非线性约束

等非线性约束优化解决者接受fmincon,fseminf,fgoalattain,fminimax,全局优化工具箱解决者遗传算法(全局优化工具箱),gamultiobj(全局优化工具箱),patternsearch(全局优化工具箱),paretosearch(全局优化工具箱),GlobalSearch(全局优化工具箱),MultiStart(全局优化工具箱)。非线性约束允许您限制的解决方案可以描述任何地区的光滑函数。

非线性不等式约束的形式c(x)≤0,在那里c是一个向量的限制,每个约束的一个组件。同样,非线性等式约束的形式量表信(x)= 0

请注意

非线性约束函数必须返回c量表信不等式和等式约束函数,即使他们都不存在。返回一个空条目[]为一个不存在的约束。

例如,假设你有下列不等式约束:

x 1 2 9 + x 2 2 4 1 , x 2 x 1 2 1。

写这些约束在一个函数文件如下:

函数测查[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选项)

如果你有一个符号数学工具箱™许可,可以自动计算梯度和麻布,中描述计算梯度和麻布使用符号数学工具箱

匿名非线性约束函数

非线性约束函数必须返回两个输出。第一个输出对应于非线性不等式,第二个对应非线性等式。

匿名函数返回一个输出。所以你如何写一个匿名函数的非线性约束?

交易函数分配多个输出。例如,假设你有非线性的不平等

x 1 2 9 + x 2 2 4 1 , x 2 x 1 2 - - - - - - 1

假设你有非线性的平等

x 2 = 双曲正切 ( x 1 )

编写一个非线性约束函数如下。

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));

最小化函数 cosh ( x 1 ) + sinh ( x 2 ) 受到的约束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

在匿名的目标函数的更多信息,请参阅匿名函数的目标

另请参阅

||(全局优化工具箱)|(全局优化工具箱)|(全局优化工具箱)|(全局优化工具箱)

相关的话题