求约束非线性多变量函数的最小值
非线性规划求解器。
查找指定问题的最小值
b和贝基是向量,一个和Aeq矩阵,c(x)及量表信(x)是返回向量的函数,以及f(x)是一个返回标量的函数。f(x),c(x),及量表信(x)可以是非线性函数。
x,磅和乌兰巴托可以作为向量或矩阵传递;看见矩阵参数.
定义中设计变量的一组上下限x
= fmincon (享乐
,x0
,一个
,b
,Aeq
,贝基
,磅
,乌兰巴托
)x
,以便解决方案始终在范围内磅
≤x
≤乌兰巴托
. 如果no equalities exist, setAeq = []
和说真的= []
. 如果x(我)
下面是无界的,集lb(i)=-Inf
,如果x(我)
上面是无界的,集乌兰巴托(i) =正无穷
.
如果问题的指定输入边界不一致,fmincon
抛出一个错误。在本例中,输出x
是x0
和fval
是[]
.
默认情况下“内点”
算法,fmincon
集的组成部分x0
这就违反了界限Lb≤x≤ub
,或等于一个界限,到界限区域的内部。为“信任区域反射”
算法,fmincon
将冲突组件设置到绑定区域的内部。对于其他算法,fmincon
将冲突组件设置为最近的边界。遵守边界的组件不会更改。请参阅迭代可能违反约束.
当存在线性不等式约束时,求Rosenbrock函数的最小值。
设定目标函数享乐
这是罗森布鲁克的职责。众所周知,Rosenbrock的函数很难最小化。它在点(1,1)处的最小目标值为0。有关详细信息,请参阅基于解算器求解约束非线性问题.
@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
从该点开始查找最小值[-1,2]
,被迫
. 在表单中表示此约束Ax < = b
采取A=[1,2]
和b=1
.注意这个约束意味着解不在无约束解(1,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)
,被迫
和
.
将线性不等式约束表示为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));
看看这个地区 有正面价值,, 和 .
磅= (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;
看看这个地区,.
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函数的最小值,.首先创建一个表示非线性约束的函数。将其保存为一个名为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, 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;测查= [];结束
调用fmincon
和fval
输出以获得解的目标函数值。
的带界约束的极小化示例显示了两种解决方案。哪个更好?运金宝搏官方网站行示例,请求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
和输出
产出。
在单位圆盘上建立最小化罗森布罗克函数的问题,.首先创建一个表示非线性约束的函数。将其保存为一个名为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
使用fval
,exitflag
和输出
产出。
[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)
哪里myfun
MATLAB是一种®等功能
函数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
|一串
一个
- - - - - -线性不等式约束线性不等式约束,指定为实矩阵。一个
是一个米
-借-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
作为稀疏向量。
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
- - - - - -线性等式约束线性等式约束,指定为实矩阵。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
- - - - - -非线性约束非线性约束,指定为函数句柄或函数名。非LCON
接受向量或数组的函数x
并返回两个数组,c(x)
和量表(x)
.
c(x)
是非线性不等式约束的数组x
.fmincon
试图满足
c(x)<=0
的所有条目c
.
量表(x)
数组的非线性等式约束在x
.fmincon
试图满足
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)
.GC
和GCeq
可以是稀疏的,也可以是密集的。如果GC
或GCeq
较大,且非零项相对较少,可节省运行时间和内存内点
算法,将它们表示为稀疏矩阵。有关更多信息,请参阅非线性约束.
数据类型:烧焦
|function_handle
|一串
选择权
- - - - - -优化选项optimoptions
|结构,如optimset
返回优化选项,指定为optimoptions
或一种结构,如optimset
返回。
有些选项适用于所有算法,而另一些则与特定算法相关。看见优化选项参考的详细信息。
控件中缺少一些选项optimoptions
陈列下表中以斜体显示这些选项。有关详细信息,请参阅视图选项.
所有算法 | |
算法 |
选择优化算法:
有关选择算法的信息,请参阅选择算法. 的
如果您选择 的 |
CheckGradients |
将用户提供的导数(目标或约束的梯度)与有限差分导数进行比较 为 |
约束耐受性 |
约束违背的公差,一个正标量。默认值是 为 |
诊断 | 显示有关要最小化或解决的功能的诊断信息。选项包括 |
DiffMaxChange | 有限差分梯度变量的最大变化(正标量)。默认值是 |
DiffMinChange | 有限差分梯度(正标量)变量变化的最小值。默认值是 |
显示 |
显示级别(请参见迭代显示):
|
有限差分步长 |
有限差分的标量或向量步长因子。当你设定
符号“(x) =符号(x) 除了符号′(0)=1 . 中心有限差分是
有限差分步长 展开为向量。默认值为sqrt (eps) 对于正向有限差分,和每股收益^(1/3) 对于中心有限差分。为 |
有限差分类型 |
用于估计梯度的有限差分是
为 |
欢乐支票 | 检查目标函数值是否有效。默认设置, |
MaxFunctionEvaluations |
允许的最大函数求值数,为正整数。除 为 |
MaxIterations |
允许的最大迭代次数,一个正整数。所有算法的默认值 为 |
OptimalityTolerance |
一阶最优性的终止容限(正标量)。默认值是 为 |
输出FCN |
指定优化函数在每次迭代时调用的一个或多个用户定义函数。传递函数句柄或函数句柄的单元格数组。默认值为“无”( |
PlotFcn |
绘制算法执行时的各种进度度量;从预定义的情节中选择或编写您自己的。传递内置绘图函数名、函数句柄或内置绘图函数名或函数句柄的单元格数组。对于定制的绘图函数,传递函数句柄。默认为none (
自定义打印函数使用与输出函数相同的语法。看见输出函数和输出函数的语法. 为 |
SpecifyConstraintGradient |
由用户定义的非线性约束函数的梯度。设置为默认值时, 为 |
SpecifyObjectiveGradient |
由用户定义的目标函数的梯度。参见 为 |
阶跃公差 |
终止上公差 为 |
TypicalX |
典型的 的 |
UseParallel |
什么时候 |
Trust-Region-Reflective算法 | |
FunctionTolerance |
函数值的终止容差,一个正标量。默认值为 为 |
HessianFcn |
如果 为 |
HessianMultiplyFcn |
Hessian乘法函数,指定为函数句柄。对于大规模结构化问题,此函数计算Hessian矩阵乘积 W=hmfun(Hinfo,Y) 哪里 第一个参数与目标函数返回的第三个参数相同 [f, g, Hinfo] =乐趣(x)
笔记使用 看到黑森乘法函数. 看见稠密结构Hessian的最小化,线性等式举个例子。 为 |
海斯帕滕 | 有限差分集的Hessian稀疏模式 使用 当结构未知时,不要设置 |
MaxPCGIter | 预处理共轭梯度(PCG)迭代的最大次数,正标量。默认值是 |
预带宽 | PCG预处理程序的上限带宽,非负整数。默认情况下,使用对角预处理(上限带宽为0)。对于某些问题,增加带宽会减少PCG迭代次数。设置 |
SubproblemAlgorithm |
确定迭代步骤的计算方式。默认, |
托尔普克 | PCG迭代的终止容限,一个正标量。默认值是 |
活动集算法 | |
FunctionTolerance |
函数值的终止容差,一个正标量。默认值为 为 |
MaxSQPIter | 允许的最大SQP迭代次数,为正整数。默认值为 |
RelLineSrchBnd | 直线搜索步长上的相对界限(实非负标量值)。总排水量x满足|Δx(我)|≤relLineSrchBnd·max(| . b0x(我)|,|typicalx(我)|). 此选项提供对中位移大小的控制x对于求解器所采取的步骤被认为过大的情况。默认值是无边界的( |
RelLineSrchBndDuration | 中指定的边界所对应的迭代次数 |
TolConSQP | 内部迭代SQP约束冲突的终止容差,正标量。默认值是 |
内点算法 | |
HessianApproximation |
选择如何
笔记使用 为 |
HessianFcn |
如果 为 |
HessianMultiplyFcn |
用户提供的函数,给出Hessian时间向量乘积(参见黑森乘法函数).传递函数句柄。 笔记使用 为 |
HonorBounds |
默认值 为 |
初始参数 | 初始势垒值,一个正标量。有时,尝试一个高于默认值的值可能会有帮助 |
初始信任区域半径 | 信赖域的初始半径,一个正标量。在规模严重的问题上,选择一个小于默认值的值可能会有所帮助 哪里n是变量的数量。 |
MaxProjCGIter | 投影共轭梯度迭代次数的容差(停止标准);这是一个内部迭代,而不是算法的迭代次数。此正整数的默认值为 |
客观限度 |
作为标量的公差(停止标准)。如果目标函数值低于 |
尺度问题 |
为 |
SubproblemAlgorithm |
确定迭代步骤的计算方式。默认, |
TolProjCG | 投影共轭梯度算法的相对容差(停止标准);用于内部迭代,而不是算法迭代。此正标量的默认值为 |
TolProjCGAbs | 投影共轭梯度算法的绝对公差(停止标准);这是用于内部迭代,而不是算法迭代。此正标量的默认值为 |
SQP和SQP遗留算法 | |
客观限度 |
作为标量的公差(停止标准)。如果目标函数值低于 |
尺度问题 |
为 |
例子:options=optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)
问题
- - - - - -问题结构问题结构,指定为具有以下字段的结构:
字段名 | 进入 |
---|---|
|
目标函数 |
|
起始点x |
|
线性不等式约束的矩阵 |
|
线性不等式约束向量 |
|
线性等式约束的矩阵 |
|
线性等式约束的向量 |
磅 |
下界向量 |
乌兰巴托 |
上界向量 |
|
非线性约束函数 |
|
“fmincon” |
|
使用创建的选项optimoptions |
你必须至少提供客观的
,x0
,解算器
和选择权
田野问题
结构
得到a的最简单的方法问题
结构是从优化应用程序导出问题。
数据类型:结构
fval
-解的目标函数值解的目标函数值,以实数形式返回。通常地fval
=有趣的(x)
.
exitflag
- - -原因fmincon
停止原因fmincon
已停止,作为整数返回。
所有算法: |
|
|
一阶最优测度小于 |
|
超过迭代次数 |
|
被输出函数或绘图函数停止。 |
|
没有找到可行点。 |
所有算法,除了 |
|
|
的变化 |
|
|
|
目标函数值的变化小于 |
|
|
|
搜索方向的大小小于2* |
|
搜索方向方向导数值小于2* |
|
|
|
下面是当前迭代的目标函数 |
输出
—优化过程信息有关优化过程的信息,作为带字段的结构返回:
迭代 |
迭代次数 |
功能计数 |
功能评估的数量 |
lssteplength |
直线搜索步骤相对于搜索方向的大小( |
违反合同 |
约束函数的极大值 |
步长 |
最后排水量的长度 |
算法 |
使用的优化算法 |
CG迭代 |
PCG迭代的总数( |
第一顺序选择 |
一阶最优性测度 |
消息 |
退出消息 |
毕业生
-解的梯度解的梯度,作为实向量返回。毕业生
给出的梯度享乐
当时x(:)
.
黑森
——近似黑森近似Hessian,作为实矩阵返回。对于黑森
,请参阅黑森输出.
fmincon
是一种基于梯度的方法,用于处理目标函数和约束函数都连续且具有连续一阶导数的问题。
为“信任区域反射”
算法,必须在享乐
设定“SpecificyObjectiveGradient”
选择符合事实的
.
的“信任区域反射”
算法不允许相等的上限和下限。例如,如果lb(2)=ub(2)
,fmincon
让这个错误:
信赖域反射算法不允许上下界相等。改用内点算法或SQP算法。
传递黑森语有两种不同的语法,传递黑森语有两种不同的语法HessianMultiplyFcn
作用一个trust-region-reflective
,另一个用于内点
. 看见包括黑森人.
为trust-region-reflective
,拉格朗日函数的Hessian与目标函数的Hessian相同。你传递那个Hessian作为目标函数的第三个输出。
为内点
拉格朗日的黑森函数包括拉格朗日乘子和非线性约束函数的黑森函数。将Hessian作为一个单独的函数传递,该函数考虑了当前点和x
以及拉格朗日乘子结构兰姆达
.
当问题不可行时,fmincon
尝试最小化最大约束值。
fmincon
使用Hessian作为可选输入。这个黑森矩阵是拉格朗日二阶导数的矩阵(参见方程式1),即,
(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内点算法.中有更广泛的描述[1],[41]和[9].
的fmincon
“sqp”
和“sqp遗产”
算法类似于“激活集”
算法中描述主动集优化.fmincon-SQP算法描述了主要区别。总之,这些差异是:
的“信任区域反射”
该算法是一种子空间信赖域方法,基于中描述的内部反射牛顿法[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页。
使用说明和限制:
fmincon
金宝app支持使用codegen
功能或MATLAB编码器™应用程序。你必须有一个MATLAB编码器生成代码的许可。
目标硬件必须支持标准的双精度浮点计算。不能为单精度金宝app或定点计算生成代码。
所有生成的代码必须是MATLAB代码。特别是,您不能使用自定义黑盒函数作为目标函数fmincon
.您可以使用塞瓦尔编码员
评估用C或C++编码的自定义函数。但是,必须在MATLAB函数中调用自定义函数。
fmincon
不支持金宝app问题
用于代码生成的参数。
[x, fval] = fmincon(问题)%不支持金宝app
必须使用函数句柄(而不是字符串或字符名)指定目标函数和任何非线性约束函数。
x = fmincon (Aeq @fun x0, A, b,说真的,磅,乌兰巴托,@nonlcon)%支金宝app持%不支持:f金宝appmincon(‘有趣的’,…)或fmincon(“有趣”,…)
全部的fmincon
输入矩阵如一个
,Aeq
,磅
和乌兰巴托
必须充实,不能稀疏。您可以将稀疏矩阵转换为完整的满的
函数。
的磅
和乌兰巴托
参数的条目数必须与x0
参数或必须为空[]
.
对于涉及嵌入式处理器的高级代码优化,还需要一个嵌入式编码器®许可证。
您必须包括以下选项:fmincon
并使用optimoptions
.选项必须包括算法
选项,设置为“sqp”
或“sqp遗产”
.
选择= optimoptions (“fmincon”,“算法”,“sqp”); [x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,非LCON,选项);
代码生成支持以下选项:金宝app
算法
-一定是“sqp”
或“sqp遗产”
约束耐受性
有限差分步长
有限差分类型
MaxFunctionEvaluations
MaxIterations
客观限度
OptimalityTolerance
尺度问题
SpecifyConstraintGradient
SpecifyObjectiveGradient
阶跃公差
TypicalX
生成的代码对选项有有限的错误检查。所以推荐的更新选项的方法是使用optimoptions
,而不是点符号。
选择= optimoptions (“fmincon”,“算法”,“sqp”);选择= optimoptions(选择,“MaxIterations”,1e4);%推荐opts.MaxIterations=1e4;%不推荐
不要从文件加载选项。这样做可能会导致代码生成失败。相反,请在代码中创建选项。
通常,如果指定了不受支持的选项,则该选项在代码生成期间将被忽略。但是,如果使用点表示法指定绘金宝app图函数或输出函数,代码生成可能会出错。为确保可靠性,请仅指定支持的选项。
因为不支持输出函数和绘图函数,金宝appfmincon
不返回退出标志-1。
有关示例,请参见用于优化基础的代码生成.
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。