fmincon

求约束非线性多变量函数的最小值

描述

非线性规划求解器。

查找指定问题的最小值

最小值 x f x 以致 c x 0 c e x 0 一个 x b 一个 e x b e l b x u b

b贝基是向量,一个Aeq矩阵,cx)及量表信x)是返回向量的函数,以及fx)是一个返回标量的函数。fx),cx),及量表信x)可以是非线性函数。

x乌兰巴托可以作为向量或矩阵传递;看见矩阵参数

例子

x= fmincon (享乐x0一个b开始于x0并试图找到最小值x中所述函数的享乐服从线性不等式A*x≤ Bx0可以是标量、向量或矩阵。

笔记

传递额外参数解释如何在必要时向目标函数和非线性约束函数传递额外参数。

例子

x= fmincon (享乐x0一个bAeq贝基最小化享乐服从线性等式Aeq*x=beqA*x≤ B. 如果no inequalities exist, set一个= []b=[]

例子

x= fmincon (享乐x0一个bAeq贝基乌兰巴托定义中设计变量的一组上下限x,以便解决方案始终在范围内x乌兰巴托. 如果no equalities exist, setAeq = []说真的= []. 如果x(我)下面是无界的,集lb(i)=-Inf,如果x(我)上面是无界的,集乌兰巴托(i) =正无穷

笔记

如果问题的指定输入边界不一致,fmincon抛出一个错误。在本例中,输出xx0fval[]

默认情况下“内点”算法,fmincon集的组成部分x0这就违反了界限Lb≤x≤ub,或等于一个界限,到界限区域的内部。为“信任区域反射”算法,fmincon将冲突组件设置到绑定区域的内部。对于其他算法,fmincon将冲突组件设置为最近的边界。遵守边界的组件不会更改。请参阅迭代可能违反约束

例子

x= fmincon (享乐x0一个bAeq贝基乌兰巴托非LCON使极小化服从非线性不等式c(x)或平等量表(x)定义于非LCONfmincon优化,c(x)≤ 0ceq(x)=0。如果不存在边界,则设置磅= []和/或ub=[]

例子

x= fmincon (享乐x0一个bAeq贝基乌兰巴托非LCON选择权使用中指定的优化选项最小化选择权.使用optimoptions设置这些选项。如果没有非线性不等式或等式约束,则设置nonlcon = []

例子

x= fmincon (问题查找的最小值问题哪里问题是中描述的结构输入参数.创建问题结构通过从优化应用程序导出问题,如在出口你的工作

例子

xfval]=fmincon(___,对于任何语法,返回目标函数的值享乐在解决方案x

例子

xfvalexitflag输出]=fmincon(___另外还返回一个值exitflag它描述了fmincon,结构输出提供有关优化过程的信息。

例子

xfvalexitflag输出兰姆达毕业生黑森]=fmincon(___另外还返回:

  • 兰姆达-具有解处包含拉格朗日乘子的场的结构x

  • 毕业生-梯度享乐在解决方案x

  • 黑森-黑森享乐在解决方案x. 看见fmincon黑森

例子

全部折叠

当存在线性不等式约束时,求Rosenbrock函数的最小值。

设定目标函数享乐这是罗森布鲁克的职责。众所周知,Rosenbrock的函数很难最小化。它在点(1,1)处的最小目标值为0。有关详细信息,请参阅基于解算器求解约束非线性问题

@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

从该点开始查找最小值[-1,2],被迫 x 1 + 2 x 2 1 . 在表单中表示此约束Ax < = b采取A=[1,2]b=1.注意这个约束意味着解不在无约束解(1,1)处,因为在那一点 x 1 + 2 x 2 3. > 1

x0 = [1, 2];一个= [1,2];b = 1;x=fmincon(乐趣,x0,A,b)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
x =1×20.5022 - 0.2489

当同时存在线性不等式约束和线性等式约束时,求Rosenbrock函数的最小值。

设定目标函数享乐这是罗森布鲁克的职责。

@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

从该点开始查找最小值(0.5, 0),被迫 x 1 + 2 x 2 1 2 x 1 + x 2 1

  • 将线性不等式约束表示为A*x<=b采取A=[1,2]b=1

  • 将线性等式约束表示为Aeq*x=beq采取Aeq=[2,1]说真的= 1

x0=[0.5,0];A=[1,2];b=1;Aeq=[2,1];beq=1;x=fmincon(乐趣,x0,A,b,Aeq,beq)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
x =1×20.4149 0.1701

求有约束条件下目标函数的最小值。

目标函数是两个变量的简单代数函数。

有趣= @ (x) 1 + x (1) / (1 + x (2)) - 3 * x (1) * (2) + x (2) * (1 + x (1));

看看这个地区 x 有正面价值,, x 1 1 x 2 2

磅= (0,0);乌兰巴托= [1,2];

没有线性约束,所以将这些参数设置为[]

一个= [];b = [];Aeq = [];说真的= [];

在这个区域中间尝试一个初始点。

x0=(lb+ub)/2;

解决这个问题。

x=fmincon(趣味、x0、A、b、Aeq、beq、lb、ub)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
x =1×21.0000 2.0000

不同的初始点可能导致不同的解决方案。

x0=x0/5;x=fmincon(fun、x0、A、b、Aeq、beq、lb、ub)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
x =1×210-6× 0.4000 0.4000

要确定哪种解决方案更好,请看获得目标函数值

求受非线性约束的函数的最小值

找出罗森布罗克函数在一个圆内最小的点,也受约束。

@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

看看这个地区$0\le x(1)\le 0.5$$0.2\le x(2)\le 0.8$

lb=[0,0.2];ub=[0.5,0.8];

也可以在半径为1/3的圆心[1/3,1/3]内观察。复制以下代码到你的MATLAB®路径上的一个文件circlecon.m

%MathWorks,Inc.版权所有2015。作用[c,ceq]=circlecon(x)c=(x(1)-1/3)^2+(x(2)-1/3)^2-(1/3)^2;ceq=[];

没有线性约束,所以将这些参数设置为[]

一个= [];b = [];Aeq = [];说真的= [];

选择一个满足所有约束条件的初始点。

x0 = (1/4, 1/4);

解决这个问题。

非LCON=@circlecon;x=fmincon(趣味、x0、A、b、Aeq、beq、lb、ub、非LCON)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。x=0.5000 0.2500

设置选项以在迭代发生时查看迭代,并使用不同的算法。

观察fmincon解决方案过程中,设置显示选择“通路”.另外,试试“sqp”算法,有时比默认值更快或更精确“内点”算法。

选择= optimoptions (“fmincon”“显示”“通路”“算法”“sqp”);

在单位磁盘上找到Rosenbrock函数的最小值,x $ | | | | ^ 2 \勒1美元.首先创建一个表示非线性约束的函数。将其保存为一个名为unitdisk.m在您的MATLAB®路径。

作用[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;测查= [];

创建剩余的问题规范,然后运行fmincon

@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = @unitdisk;x0 = (0,0);x=fmincon(fun、x0、A、b、Aeq、beq、lb、ub、非LCON、选项)
Iter函数计数Fval可行性一阶阶阶跃最优性步长范数0.311.000000e+00 0.000e+00 1.000e+00 0.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 1723 28 4.197517172e-01 0.000e+00 3.430e-01 1.217e-01 1 6.000e-01 0+3700.7315.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.2.7 7.4.4电子-02 3.6+0 0 0 6 6 6 6 6 6.7 7 7.7.7 7 7.7.5.4.4.4.4.4.7 7 7 7 7.7 7 7.6.7 7 7 7 7.6.7 7 7 7 7 7 7 7 7.6.7 7电子-2.3.7 7 7 7 7 7 7 7 7 7 7 7 7 7.7 7 7 7 7 7 7.2.2.6电子-0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7电子--0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 10494.533081e-02 2.898e-03 1.000e+005.393e-02 1.252e-01 11 52 4.567454e-02 2.225e-06 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.406e-12 1.000e+00 2.095e-06 1.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.159e-09 1.511e-05局部最小可能限制条件得到满足。fmincon停止,因为当前步长的大小小于步长公差a的值nd约束满足在约束公差值范围内。x=0.7864 0.6177

为了更快或更可靠的计算,在目标函数中包含梯度计算。

将梯度计算作为条件化输出包含在目标函数文件中。有关详细信息,请参阅包括梯度和黑森人.目标函数是Rosenbrock函数,

$$f(x)=100{\左({{x_2}-x_1^2}\右)^2}+&xA;{(1-{x_1}^2}$$

的梯度

$$\nabla f(x)=\left[{\begin{array}{*{20}{c}}}
;{-400\ left({x_2}-x_1^2}\right){x_1}-2\ left({1-{x_1}\right)\\\\\\\\\\\\\\\\\\ xA 200\ left({x_2}-x_1^2}\right)}\end}\xA$$

作用(f, g) = rosenbrockwithgrad (x)%计算目标ff=100*(x(2)-x(1)^2^2+(1-x(1))^2;如果nargout>1%所需梯度g=[-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));200*(x(2)-x(1)^2)];结束

将此代码另存为名为罗森布罗克维斯格拉德医学院在您的MATLAB®路径。

创建使用目标函数渐变的选项。

选择= optimoptions (“fmincon”“SpecificyObjectiveGradient”,对);

为问题创建其他输入。然后调用fmincon

有趣= @rosenbrockwithgrad;x0 = [1, 2];一个= [];b = [];Aeq = [];说真的= [];磅= (2,2);乌兰巴托= (2,2);nonlcon = [];x=fmincon(fun、x0、A、b、Aeq、beq、lb、ub、非LCON、选项)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。x=1.0000 1.0000

解决相同的问题默认的选项使用问题结构而不是单独的参数。

创建选项和问题结构。看到问题字段名和必需字段。

选择= optimoptions (“fmincon”“显示”“通路”“算法”“sqp”); problem.options=选项;问题解决者=“fmincon”;问题。目标= @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;问题。x0=[0,0];

非线性约束函数单位盘出现在本例结束. 将非线性约束函数包含在问题

problem.nonlcon=@unitdisk;

解决这个问题。

x=fmincon(问题)
Iter funct -count Fval可行性步骤长度范数的一阶步骤优化03 1.0000e +00 0.000e+00 1.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 3 31 2.73370e -01 0.000e+00 1.000e+005.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 40 1.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 8 43 1.161753e-01 0.000e+00 1.000e+00 1.754e-01 7.383e - 00 9 49 4.53308e -02 1.88e -03 1.000e+005.393e-02 1.252e-01 11 52 4.567481e-02 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.406e- 02 1.000e+00 2.095e-06 1.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.159e-09 1.511e-05约束满足。Fmincon停止,因为当前步长小于步长公差的值,约束满足到约束公差的值之内。
x =1×20.7864 - 0.6177

迭代显示和解决方案与中相同默认的选项

下面的代码创建单位盘函数。

作用[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;测查= [];结束

调用fminconfval输出以获得解的目标函数值。

带界约束的极小化示例显示了两种解决方案。哪个更好?运金宝搏官方网站行示例,请求fval输出以及解决方案。

乐趣=@(x)1+x(1)。/(1+x(2))-3*x(1)。*x(2)+x(2)。*(1+x(1));lb=[0,0];ub=[1,2];A=[];b=[];Aeq=[];beq=[];x0=(lb+ub)/2;[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
x =1×21.0000 2.0000
fval = -0.6667

使用不同的起点运行问题x0

x0=x0/5;[x2,fval2]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
x2=1×210-6× 0.4000 0.4000
fval2 = 1.0000

此解决方案具有目标函数值fval2= 1,大于第一个值fval= –0.6667. 第一个解决方案x具有较低的局部最小目标函数值。

要轻松检查解决方案的质量,请请求exitflag输出产出。

在单位圆盘上建立最小化罗森布罗克函数的问题,x $ | | | | ^ 2 \勒1美元.首先创建一个表示非线性约束的函数。将其保存为一个名为unitdisk.m在您的MATLAB®路径。

作用[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;测查= [];

创建剩余的问题规范。

@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;nonlcon = @unitdisk;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];x0 = (0,0);

调用fmincon使用fvalexitflag输出产出。

[x, fval exitflag、输出]= fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon)
找到满足约束条件的局部极小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。x=0.7864 0.6177 fval=0.0457 exitflag=1 output=struct带字段:迭代次数:24 funcCount:84 CONSTROUPTION:0步长:6.9162e-06算法:“内部点”firstorderopt:2.4373e-08 CG迭代次数:4消息:“…”
  • exitflag价值1表示解是局部最小值。

  • 输出structure报告有关解决方案过程的若干统计信息。特别是,它给出了中的迭代次数output.iterations,中函数求值的次数output.funcCount,以及output.construction冲突

fmincon可选地返回几个输出,您可以使用这些输出来分析报告的解决方案。

设置最小化单元磁盘上Rosenbrock函数的问题。首先创建一个表示非线性约束的函数。将此保存为名为的文件unitdisk.m在您的MATLAB®路径。

作用[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;测查= [];

创建剩余的问题规范。

@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;nonlcon = @unitdisk;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];x0 = (0,0);

要求所有的fmincon产出。

[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
找到满足约束的局部最小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。x=0.7864 0.6177 fval=0.0457 exitflag=1输出=结构,带字段:迭代次数:24次funcCount:84次:0步长:6.9162e-06算法:“内部点”firstorderopt:2.4373e-08 cgiterations:4消息:“…”lambda=struct,带字段:eqlin:[0x1 double]eqnonlin:[0x1 double]ineqlin:[0x1 double]下限:[2x1 double]上限:[2x1 double]伊内克诺林:0.1215梯度=-0.1911-0.1501黑森=497.2903-314.5589-314.5589 200.2392
  • 伊内克诺林输出表明非线性约束在解处是主动的,并给出了相应的拉格朗日乘子的值。

  • 毕业生输出给出目标函数在解处的梯度值x

  • 黑森输出描述在fmincon黑森

输入参数

全部折叠

要最小化的函数,指定为函数句柄或函数名。享乐接受向量或数组的函数x并返回一个实标量f,目标函数的取值为x

具体说明享乐作为文件的函数句柄:

x=fmincon(@myfun,x0,A,b)

哪里myfunMATLAB是一种®等功能

函数f=myfun(x)f=…%计算x处的函数值

您还可以指定享乐作为匿名函数的函数句柄:

x=fmincon(@(x)范数(x)^2,x0,A,b);

如果你能计算出享乐SpecifyObjectiveGradient选项设置为符合事实的,按

选择= optimoptions(‘fmincon’,‘SpecifyObjectiveGradient’,真的)
然后享乐必须返回梯度向量g(x)在第二个输出参数中。

如果你也能计算出海森矩阵HessianFcn选项设置为“目标”通过optimoptions算法选择是“信任区域反射”享乐必须返回Hessian值H (x),第三个输出参数中的对称矩阵。享乐可以给稀疏的黑森。看到Hessian用于fminunc信任区域或fmincon信任区域反射算法获取详细信息。

如果你也能计算出Hessian矩阵算法选项设置为“内点”在美国,有一种不同的方式来传递黑森人fmincon。有关详细信息,请参阅fmincon内点算法的Hessian算法. 例如,使用符号数学工具箱™ 要计算梯度,请看Hessian符号数学工具箱™ 计算渐变和黑森值

内点trust-region-reflective算法允许您提供Hessian乘法函数。此函数给出Hessian时间向量积的结果,而不直接计算Hessian时间。这可以节省内存。看见黑森乘法函数

例子:乐趣=@(x)sin(x(1))*cos(x(2))

数据类型:烧焦|function_handle|一串

初始点,指定为实向量或实数组。解算器使用中的图元数量和,x0来确定变量的数量和大小享乐接受。

  • “内点”算法-如果HonorBounds选择是符合事实的(违约),fmincon重置x0在边界上或边界外的组件乌兰巴托到边界之间的值。

  • “信任区域反射”算法,fmincon重置不可行x0关于边界或线性等式,组件是可行的。

  • “sqp”“sqp遗产”,或“激活集”算法,fmincon重置x0超出相应边界值边界的组件。

例子:x0=[1,2,3,4]

数据类型:双重的

线性不等式约束,指定为实矩阵。一个是一个-借-N矩阵,在哪里是不平等的数量,和N是变量数(中的元素数)x0).对于大问题,请通过一个作为一个稀疏矩阵。

一个编码线性不等式

A*x<=b

哪里x列向量是N变量x(:)b是一个具有元素。

例如,指定

x1+ 2x2≤ 10
3.x1+ 4x2≤ 20
5x1+ 6x2≤30日

输入以下约束条件:

= [1, 2, 3, 4, 5, 6);b =(10、20、30);

例子:要指定x分量的和为1或更小,请使用A=一(1,N)b=1

数据类型:双重的

线性不等式约束,指定为实向量。b是一个元素向量相关的一个矩阵。如果你通过b作为行向量,求解器内部转换b到列向量b(:). 对于大问题,请通过b作为稀疏向量。

b编码线性不等式

A*x<=b

哪里x列向量是N变量x(:)一个是一个大小矩阵-借-N

例如,指定

x1+ 2x2≤ 10
3.x1+ 4x2≤ 20
5x1+ 6x2≤30日

输入以下约束条件:

= [1, 2, 3, 4, 5, 6);b =(10、20、30);

例子:要指定x分量的和为1或更小,请使用A=一(1,N)b=1

数据类型:双重的

线性等式约束,指定为实矩阵。Aeq是一个-借-N矩阵,在哪里是相等数,并且N是变量数(中的元素数)x0).对于大问题,请通过Aeq作为一个稀疏矩阵。

Aeq编码线性等式

Aeq*x=beq

哪里x列向量是N变量x(:)贝基是一个具有元素。

例如,指定

x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,

输入以下约束条件:

Aeq =[1、2、3、2、4、1];说真的=(10、20);

例子:若要指定x分量的总和为1,请使用Aeq = 1 (1, N)说真的= 1

数据类型:双重的

线性等式约束,指定为实向量。贝基是一个元素向量相关的Aeq矩阵。如果你通过贝基作为行向量,求解器内部转换贝基到列向量贝基(:). 对于大问题,请通过贝基作为稀疏向量。

贝基编码线性等式

Aeq*x=beq

哪里x列向量是N变量x(:)Aeq是一个大小矩阵-借-N

例如,指定

x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,

输入以下约束条件:

Aeq =[1、2、3、2、4、1];说真的=(10、20);

例子:若要指定x分量的总和为1,请使用Aeq = 1 (1, N)说真的= 1

数据类型:双重的

下限,指定为实向量或实数组。如果x0等于中的元素数,然后指定

x(我)> =磅(我)总的来说

如果努美尔(磅)<努美尔(x0),然后指定

x(我)> =磅(我)1<=i<=numel(磅)

如果元素较少比在x0,解算器发出警告。

例子:要指定所有x分量都为正值,请使用lb=零(尺寸(x0))

数据类型:双重的

上界,指定为实向量或实数组。如果元素的数量x0等于中的元素数乌兰巴托,然后乌兰巴托指定

x(i)<=ub(i)总的来说

如果努梅尔(ub)<努梅尔(x0),然后乌兰巴托指定

x(i)<=ub(i)1<=i<=numel(ub)

如果元素较少乌兰巴托比在x0,解算器发出警告。

例子:要指定所有x分量都小于1,使用ub=个(尺寸(x0))

数据类型:双重的

非线性约束,指定为函数句柄或函数名。非LCON接受向量或数组的函数x并返回两个数组,c(x)量表(x)

  • c(x)是非线性不等式约束的数组xfmincon试图满足

    c(x)<=0的所有条目c

  • 量表(x)数组的非线性等式约束在xfmincon试图满足

    ceq(x)=0的所有条目量表信

例如

x=fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

哪里麦肯是MATLAB函数之类的

函数[c,ceq]=mycon(x)c=…%计算x上的非线性不等式。ceq=…%计算x处的非线性等式。
如果还可以计算约束的梯度SpecifyConstraintGradient选择是符合事实的,按
options=optimoptions('fmincon','specifyconstraintgradent',true)
然后非LCON必须在第三和第四个输出参数中返回,GC的梯度c(x)GCeq的梯度量表(x)GCGCeq可以是稀疏的,也可以是密集的。如果GCGCeq较大,且非零项相对较少,可节省运行时间和内存内点算法,将它们表示为稀疏矩阵。有关更多信息,请参阅非线性约束

数据类型:烧焦|function_handle|一串

优化选项,指定为optimoptions或一种结构,如optimset返回。

有些选项适用于所有算法,而另一些则与特定算法相关。看见优化选项参考的详细信息。

控件中缺少一些选项optimoptions陈列下表中以斜体显示这些选项。有关详细信息,请参阅视图选项

所有算法
算法

选择优化算法:

  • “内点”(默认)

  • “信任区域反射”

  • “sqp”

  • “sqp遗产”optimoptions(仅限)

  • “激活集”

有关选择算法的信息,请参阅选择算法

trust-region-reflective算法要求:

  • 在目标函数中提供的梯度

  • SpecifyObjectiveGradient设置为符合事实的

  • 约束约束或线性等式约束,但不能两者都有

如果您选择“信任区域反射”算法和这些条件都不满足,fmincon抛出一个错误。

“激活集”“sqp遗产”“sqp”算法不是大规模的。看见大规模与中型算法

CheckGradients

将用户提供的导数(目标或约束的梯度)与有限差分导数进行比较(默认)或符合事实的

optimset,名字是导数切克这些值是“上”“关”. 看见当前和遗留选项名称表

约束耐受性

约束违背的公差,一个正标量。默认值是1e-6. 看见公差和停止标准

optimset,名字是托尔康. 看见当前和遗留选项名称表

诊断

显示有关要最小化或解决的功能的诊断信息。选项包括“关”(默认)或“上”

DiffMaxChange

有限差分梯度变量的最大变化(正标量)。默认值是

DiffMinChange

有限差分梯度(正标量)变量变化的最小值。默认值是0

显示

显示级别(请参见迭代显示):

  • “关”“没有”不显示任何输出。

  • “通路”显示每次迭代的输出,并给出默认的退出消息。

  • “国际热核实验堆详细说明”在每次迭代时显示输出,并给出技术退出消息。

  • “通知”仅在函数不收敛时显示输出,并给出默认退出消息。

  • “通知详细信息”仅当功能不收敛时显示输出,并给出技术退出消息。

  • “决赛”(默认)仅显示最终输出,并给出默认退出消息。

  • 最后详细的只显示最终输出,并给出技术性退出消息。

有限差分步长

有限差分的标量或向量步长因子。当你设定有限差分步长指向向量v前向有限差分法希腊字母表的第4个字母

δ=v.*符号′(x)。*最大值(绝对值(x),典型值x);

哪里符号“(x) =符号(x)除了符号′(0)=1. 中心有限差分是

delta=v.*max(绝对值x,典型值x);

标量有限差分步长展开为向量。默认值为sqrt (eps)对于正向有限差分,和每股收益^(1/3)对于中心有限差分。

optimset,名字是FinDiffRelStep. 看见当前和遗留选项名称表

有限差分类型

用于估计梯度的有限差分是“前进”(默认),或“中央”(居中)。“中央”需要两倍的函数求值,但应该更准确。信任区域反射算法使用有限差分类型只有当CheckGradients被设置为符合事实的

fmincon在估计这两种类型的有限差分时,都要小心遵守边界。因此,举例来说,它可能需要一个向后的差异,而不是向前的差异,以避免在边界之外的点上求值。然而,对于内点算法,“中央”如果HonorBounds选项设置为

optimset,名字是FinDiffType. 看见当前和遗留选项名称表

欢乐支票

检查目标函数值是否有效。默认设置,“关”,不执行检查。这个“上”当目标函数返回的值为复杂的,或

MaxFunctionEvaluations

允许的最大函数求值数,为正整数。除内点100*numberOfVariables; 对于内点默认算法为3000. 看见公差和停止标准迭代和功能计数

optimset,名字是MaxFunEvals. 看见当前和遗留选项名称表

MaxIterations

允许的最大迭代次数,一个正整数。所有算法的默认值内点400; 对于内点默认算法为1000. 看见公差和停止标准迭代和功能计数

optimset,名字是麦克斯特. 看见当前和遗留选项名称表

OptimalityTolerance

一阶最优性的终止容限(正标量)。默认值是1e-6. 看见一阶最优性测量

optimset,名字是托尔芬. 看见当前和遗留选项名称表

输出FCN

指定优化函数在每次迭代时调用的一个或多个用户定义函数。传递函数句柄或函数句柄的单元格数组。默认值为“无”([]).看输出函数的语法

PlotFcn

绘制算法执行时的各种进度度量;从预定义的情节中选择或编写您自己的。传递内置绘图函数名、函数句柄或内置绘图函数名或函数句柄的单元格数组。对于定制的绘图函数,传递函数句柄。默认为none ([]):

  • “optimplotx”绘制当前点

  • '最佳打印功能计数'绘制函数计数

  • “optimplotfval”绘制函数值

  • “optimplotfvalconstr”将找到的最佳可行目标函数值绘制成线图。该图以红色表示不可行点,以蓝色表示可行点,使用的可行性公差为1e-6

  • “优化冲突”绘制最大约束违背

  • “最佳步长”绘制步长

  • “optimplotfirstorderopt”绘制一阶最优测度

自定义打印函数使用与输出函数相同的语法。看见输出函数输出函数的语法

optimset,名字是PlotFcns. 看见当前和遗留选项名称表

SpecifyConstraintGradient

由用户定义的非线性约束函数的梯度。设置为默认值时,fmincon用有限差分估计非线性约束的梯度。当设置为符合事实的fmincon期望约束函数有四个输出,如非LCON.的trust-region-reflective算法不接受非线性约束。

optimset,名字是GradConstr这些值是“上”“关”. 看见当前和遗留选项名称表

SpecifyObjectiveGradient

由用户定义的目标函数的梯度。参见享乐来了解如何定义渐变享乐. 默认情况下,,原因fmincon用有限差分估计梯度。设置为符合事实的fmincon使用用户定义的目标函数梯度。使用“信任区域反射”算法,你必须提供梯度,并设置SpecifyObjectiveGradient符合事实的

optimset,名字是格拉多布这些值是“上”“关”. 看见当前和遗留选项名称表

阶跃公差

终止上公差x,一个正标量。除此之外的所有算法的默认值“内点”1e-6; 对于“内点”算法,默认为1e-10. 看见公差和停止标准

optimset,名字是TolX. 看见当前和遗留选项名称表

TypicalX

典型的x值。元素的数量TypicalX等于中的元素数x0,起始点。默认值为一(numberofvariables,1)fmincon使用TypicalX用于缩放梯度估计的有限差分。

“信任区域反射”算法使用TypicalX只为CheckGradients选项

UseParallel

什么时候符合事实的fmincon平行估计梯度。通过设置为默认值来禁用,trust-region-reflective需要一个渐变的目标,所以UseParallel不适用。看见并行计算

Trust-Region-Reflective算法
FunctionTolerance

函数值的终止容差,一个正标量。默认值为1e-6. 看见公差和停止标准

optimset,名字是托尔芬. 看见当前和遗留选项名称表

HessianFcn

如果[](违约),fmincon使用有限差分近似Hessian函数,或使用Hessian乘函数(带选项HessianMultiplyFcn).如果“目标”fmincon使用用户定义的Hessian(在享乐).看Hessian作为输入

optimset,名字是赫斯本. 看见当前和遗留选项名称表

HessianMultiplyFcn

Hessian乘法函数,指定为函数句柄。对于大规模结构化问题,此函数计算Hessian矩阵乘积H*Y没有真正形成H.功能在于形式

W=hmfun(Hinfo,Y)

哪里Hinfo包含用于计算的矩阵H*Y

第一个参数与目标函数返回的第三个参数相同享乐例如

[f, g, Hinfo] =乐趣(x)

Y是一个矩阵,其行数与问题中的维度数相同。矩阵W=H*Y虽然H不是明确形成的。fmincon使用Hinfo计算前置条件。有关如何为任何其他参数提供值的信息嗯哼需要,见传递额外参数

笔记

使用HessianMultiplyFcn选项HessianFcn必须设置为[]SubproblemAlgorithm必须是“cg”(默认)。

看到黑森乘法函数. 看见稠密结构Hessian的最小化,线性等式举个例子。

optimset,名字是赫斯穆特. 看见当前和遗留选项名称表

海斯帕滕

有限差分集的Hessian稀疏模式HessPattern(i,j)=1当你可以拥有∂2享乐/∂x(我)x(j)≠ 0.否则,设置HessPattern(i,j)=0

使用海斯帕滕当计算Hessian矩阵不方便时H享乐,但你可以确定(说,通过检查)何时的梯度的第Th分量享乐取决于x(j)fmincon可以近似H通过稀疏有限差分(梯度),如果您提供稀疏结构属于H作为价值海斯帕滕. 换句话说,提供非零的位置。

当结构未知时,不要设置海斯帕滕。默认行为是海斯帕滕是一个密集的1矩阵。然后fmincon在每次迭代中计算完全有限差分近似。这种计算对于大问题来说是非常昂贵的,所以通常最好确定稀疏性结构。

MaxPCGIter

预处理共轭梯度(PCG)迭代的最大次数,正标量。默认值是马克斯(1楼(numberOfVariables / 2))对于有界约束问题,是变量数约束问题。有关详细信息,请参阅预条件共轭梯度法

预带宽

PCG预处理程序的上限带宽,非负整数。默认情况下,使用对角预处理(上限带宽为0)。对于某些问题,增加带宽会减少PCG迭代次数。设置预带宽使用直接因子分解(Cholesky)而不是共轭梯度(CG)。直接因式分解在计算上比CG更昂贵,但能产生更高质量的求解步骤。

SubproblemAlgorithm

确定迭代步骤的计算方式。默认,“cg”,比“分解”. 看见fmincon信赖域反射算法

托尔普克

PCG迭代的终止容限,一个正标量。默认值是0.1

活动集算法
FunctionTolerance

函数值的终止容差,一个正标量。默认值为1e-6. 看见公差和停止标准

optimset,名字是托尔芬. 看见当前和遗留选项名称表

MaxSQPIter

允许的最大SQP迭代次数,为正整数。默认值为10*max(numberOfVariables, numberoffinequalities + numberOfBounds)

RelLineSrchBnd

直线搜索步长上的相对界限(实非负标量值)。总排水量x满足x)|≤relLineSrchBnd·max(| . b0x)|,|typicalx)|). 此选项提供对中位移大小的控制x对于求解器所采取的步骤被认为过大的情况。默认值是无边界的([]).

RelLineSrchBndDuration

中指定的边界所对应的迭代次数RelLineSrchBnd应该是活动的(默认是1).

TolConSQP

内部迭代SQP约束冲突的终止容差,正标量。默认值是1e-6

内点算法
HessianApproximation

选择如何fmincon计算Hessian值(请参见Hessian作为输入).的选择是:

  • “bfgs”(默认)

  • 有限差分的

  • “lbfgs”

  • {“lbfgs”,正整数}

笔记

使用HessianApproximation二者都HessianFcnHessianMultiplyFcn必须为空项([]).

optimset,名字是黑森这些值是用户提供的“bfgs”“lbfgs”“fin-diff-grads”“上”,或“关”. 看见当前和遗留选项名称表

HessianFcn

如果[](违约),fmincon使用有限差分近似Hessian,或使用提供的HessianMultiplyFcn. 如果a function handle,fmincon使用HessianFcn来计算黑森。看到Hessian作为输入

optimset,名字是赫斯本. 看见当前和遗留选项名称表

HessianMultiplyFcn

用户提供的函数,给出Hessian时间向量乘积(参见黑森乘法函数).传递函数句柄。

笔记

使用HessianMultiplyFcn选项HessianFcn必须设置为[]SubproblemAlgorithm必须是“cg”

optimset,名字是赫斯穆特. 看见当前和遗留选项名称表

HonorBounds

默认值符合事实的确保在每次迭代时满足绑定约束。通过设置为禁用

optimset,名字是AlwaysHonorConstraints这些值是“界限”“没有”. 看见当前和遗留选项名称表

初始参数

初始势垒值,一个正标量。有时,尝试一个高于默认值的值可能会有帮助0.1,特别是当目标函数或约束函数较大时。

初始信任区域半径

信赖域的初始半径,一个正标量。在规模严重的问题上,选择一个小于默认值的值可能会有所帮助 n 哪里n是变量的数量。

MaxProjCGIter

投影共轭梯度迭代次数的容差(停止标准);这是一个内部迭代,而不是算法的迭代次数。此正整数的默认值为2*(numberOfVariables-numberOfEqualities)

客观限度

作为标量的公差(停止标准)。如果目标函数值低于客观限度迭代是可行的,迭代停止,因为问题可能是无界的。默认值为-1e20

尺度问题

符合事实的使算法规范化所有约束和目标函数。通过设置为默认值禁用

optimset,值为“obj和constr”“没有”. 看见当前和遗留选项名称表

SubproblemAlgorithm

确定迭代步骤的计算方式。默认,“分解”,通常比“cg”(共轭梯度)“cg”对于人口稠密的黑森人来说可能更快。看见fmincon内点算法

TolProjCG

投影共轭梯度算法的相对容差(停止标准);用于内部迭代,而不是算法迭代。此正标量的默认值为0.01

TolProjCGAbs

投影共轭梯度算法的绝对公差(停止标准);这是用于内部迭代,而不是算法迭代。此正标量的默认值为1e-10

SQP和SQP遗留算法
客观限度

作为标量的公差(停止标准)。如果目标函数值低于客观限度迭代是可行的,迭代停止,因为问题可能是无界的。默认值为-1e20

尺度问题

符合事实的使算法规范化所有约束和目标函数。通过设置为默认值禁用

optimset,值为“obj和constr”“没有”. 看见当前和遗留选项名称表

例子:options=optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)

问题结构,指定为具有以下字段的结构:

字段名 进入

客观的

目标函数

x0

起始点x

艾奈克

线性不等式约束的矩阵

bineq

线性不等式约束向量

Aeq

线性等式约束的矩阵

贝基

线性等式约束的向量
下界向量
乌兰巴托 上界向量

非LCON

非线性约束函数

解算器

“fmincon”

选择权

使用创建的选项optimoptions

你必须至少提供客观的x0解算器选择权田野问题结构

得到a的最简单的方法问题结构是从优化应用程序导出问题。

数据类型:结构

输出参数

全部折叠

解,返回实向量或实数组。的大小x大小与x0典型的x是问题的局部解决方案,当exitflag这是积极的。有关解决方案质量的信息,请参阅当求解成功时

解的目标函数值,以实数形式返回。通常地fval有趣的(x)

原因fmincon已停止,作为整数返回。

所有算法:

1

一阶最优测度小于选项。最优性公差,最大约束违背小于选项。约束耐受性

0

超过迭代次数options.MaxIterations或超过函数求值次数options.MaxFunctionEvaluations

-1

被输出函数或绘图函数停止。

-2

没有找到可行点。

所有算法,除了有效集

2

的变化x不到选项.阶跃公差最大约束冲突小于选项。约束耐受性

trust-region-reflective算法只:

3.

目标函数值的变化小于选项.功能公差最大约束冲突小于选项。约束耐受性

有效集算法只:

4

搜索方向的大小小于2*选项.阶跃公差最大约束冲突小于选项。约束耐受性

5

搜索方向方向导数值小于2*选项。最优性公差最大约束冲突小于选项。约束耐受性

内点sqp遗产sqp算法:

-3

下面是当前迭代的目标函数options.ObjectiveLimit最大约束冲突小于选项。约束耐受性

有关优化过程的信息,作为带字段的结构返回:

迭代

迭代次数

功能计数

功能评估的数量

lssteplength

直线搜索步骤相对于搜索方向的大小(有效集sqp(仅限算法)

违反合同

约束函数的极大值

步长

最后排水量的长度x(不在有效集算法)

算法

使用的优化算法

CG迭代

PCG迭代的总数(trust-region-reflective内点算法)

第一顺序选择

一阶最优性测度

消息

退出消息

解的拉格朗日乘子,作为带字段的结构返回:

较低的

下界对应于

上面的

对应于乌兰巴托

线性不等式

对应于一个b

eqlin

对应于Aeq贝基

伊内克诺林

对应的非线性不等式c非LCON

埃克诺林

对应于量表信非LCON

解的梯度,作为实向量返回。毕业生给出的梯度享乐当时x(:)

近似Hessian,作为实矩阵返回。对于黑森,请参阅黑森输出

局限性

  • fmincon是一种基于梯度的方法,用于处理目标函数和约束函数都连续且具有连续一阶导数的问题。

  • “信任区域反射”算法,必须在享乐设定“SpecificyObjectiveGradient”选择符合事实的

  • “信任区域反射”算法不允许相等的上限和下限。例如,如果lb(2)=ub(2)fmincon让这个错误:

    信赖域反射算法不允许上下界相等。改用内点算法或SQP算法。
  • 传递黑森语有两种不同的语法,传递黑森语有两种不同的语法HessianMultiplyFcn作用一个trust-region-reflective,另一个用于内点. 看见包括黑森人

    • trust-region-reflective,拉格朗日函数的Hessian与目标函数的Hessian相同。你传递那个Hessian作为目标函数的第三个输出。

    • 内点拉格朗日的黑森函数包括拉格朗日乘子和非线性约束函数的黑森函数。将Hessian作为一个单独的函数传递,该函数考虑了当前点和x以及拉格朗日乘子结构兰姆达

  • 当问题不可行时,fmincon尝试最小化最大约束值。

更多关于

全部折叠

Hessian作为输入

fmincon使用Hessian作为可选输入。这个黑森矩阵是拉格朗日二阶导数的矩阵(参见方程式1),即,

x x 2 l x λ 2 f x + λ 2 c x + λ 2 c e x (1)

有关如何向用户提供粗麻布的详细信息trust-region-reflective内点算法,请参见包括黑森人

有效集sqp算法不接受Hessian输入,而是计算拉格朗日方程Hessian的拟牛顿近似值。

内点算法有几种选择“HessianApproximation”选项看见选择输入Hessian近似值作为内点fmincon

  • “bfgs”- - - - - -fmincon用稠密的拟牛顿近似计算Hessian。这是默认的Hessian近似。

  • “lbfgs”- - - - - -fmincon通过有限内存、大规模准牛顿近似计算Hessian。使用默认内存10次迭代。

  • {'lbfgs',正整数}- - - - - -fmincon通过有限内存、大规模准牛顿近似计算Hessian。正整数指定应记住的过去迭代次数。

  • 有限差分的- - - - - -fmincon通过梯度的有限差分计算Hessian时间向量积。必须提供目标函数的梯度,以及非线性约束的梯度(如果存在)。设置“SpecificyObjectiveGradient”选择符合事实的如果适用的话“SpecifyConstraintGradient”选择符合事实的.你必须设置“子问题算法”“cg”

黑森乘法函数

内点trust-region-reflective算法允许您提供Hessian乘法函数。此函数给出Hessian时间向量积的结果,而不直接计算Hessian时间。这可以节省内存。有关详细信息,请参阅黑森乘法函数

算法

全部折叠

选择算法

有关选择算法的帮助,请参阅fmincon算法. 要设置算法,请使用optimoptions创造选择权,并使用“算法”名称-值对。

本节的其余部分给出了关于每种算法信息的简要总结或指针。

内点优化

该算法在中进行了描述fmincon内点算法.中有更广泛的描述[1][41][9]

SQP和SQP遗留优化

fmincon“sqp”“sqp遗产”算法类似于“激活集”算法中描述主动集优化fmincon-SQP算法描述了主要区别。总之,这些差异是:

主动集优化

fmincon使用序列二次规划(SQP)方法。在这种方法中,函数求解a每次迭代的二次规划(QP)子问题。fmincon使用BFGS公式更新每次迭代时拉格朗日海森函数的估计值(参见fminunc和参考资料[7][8]).

fmincon使用类似于[6][7][8].QP子问题使用一种类似于中描述的活动集策略来解决[5]fmincon活动集算法详细描述了该算法。

另请参阅SQP实现有关所用算法的更多详细信息。

Trust-Region-Reflective优化

“信任区域反射”该算法是一种子空间信赖域方法,基于中描述的内部反射牛顿法[3][4].每次迭代都涉及到使用预条件共轭梯度(PCG)方法求解一个大线性系统的近似解。见信赖域和预条件共轭梯度法的描述fmincon信赖域反射算法

参考文献

Byrd, R. H., J. C. Gilbert和J. Nocedal。“基于内点技术的非线性规划信赖域方法”。数学规划,第89卷,第1期,2000年,第149-185页。

Byrd, r.h., Mary E. Hribar和Jorge Nocedal。“大规模非线性规划的内点算法”。暹罗优化杂志,第9卷,第4期,1999年,第877-900页。

[3] 科尔曼、T.F.和Y.Li。有界非线性极小化的内部信赖域方法暹罗优化杂志, 1996年第6卷,418-445页。

[4] Coleman, t.f.和Y. Li。关于有界大规模非线性极小化的反射牛顿方法的收敛性数学规划,第67卷,第2期,1994年,第189-224页。

[5] 吉尔,P.E.,W.Murray和M.H.Wright。实用优化,伦敦,学术出版社,1981年。

[6] 非线性规划的一种全局收敛方法优化理论与应用学报, 1977年第22卷,第297页。

[7] 非线性约束优化计算的快速算法数值分析,ed.G.A.Watson,数学课堂讲稿, Springer-Verlag出版社,1978年,630卷。

[8] 非线性约束优化计算的变尺度方法的收敛性非线性规划3(O.L.Mangasarian,R.R.Meyer和S.M.Robinson编辑),学术出版社,1978年。

瓦尔兹,R. A., J. L.莫拉莱斯,J. Nocedal,和D. Orban。“一种非线性优化的内部算法,结合了线搜索和信任区域步骤。”数学规划,第107卷,第3期,2006年,第391-408页。

扩展功能

在R2006a之前引入