求约束非线性多变量函数的最小值
非线性规划求解器。
查找指定的问题的最小值
b而且说真的是向量,一个而且Aeq矩阵,c(x),量表信(x)是返回向量的函数,和f(x)是一个返回标量的函数。f(x),c(x),量表信(x)可以是非线性函数。
x,磅,乌兰巴托可以作为向量或矩阵传递;看到矩阵的参数.
中定义设计变量的一组下界和上界x
= fmincon (有趣的
,x0
,一个
,b
,Aeq
,说真的
,磅
,乌兰巴托
)x
,使解总是在值域内磅
≤x
≤乌兰巴托
.如果不存在等式,则设置Aeq = []
而且Beq = []
.如果x(我)
下面是无界的吗lb(i) = -无穷大
,如果x(我)
上面是无界的吗ub(i) =无穷大
.
请注意
如果问题的指定输入边界不一致,fmincon
抛出错误。在本例中,是输出x
是x0
而且fval
是[]
.
对于默认“内点”
算法,fmincon
设置x0
违反了边界Lb≤x≤ub
,或等于一个定界,到定界区域的内部。为“trust-region-reflective”
算法,fmincon
将违规组件设置为绑定区域的内部。对于其他算法,fmincon
将违例组件设置为最近的边界。尊重边界的组件不会被改变。看到迭代可能会违反约束.
求存在线性不等式约束时Rosenbrock函数的最小值。
设定目标函数有趣的
是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];A = [1,2];B = 1;x = fmincon(fun,x0,A,b)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
x =1×20.5022 - 0.2489
求同时存在线性不等式约束和线性等式约束时Rosenbrock函数的最小值。
设定目标函数有趣的
是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]
而且Beq = 1
.
X0 = [0.5,0];A = [1,2];B = 1;Aeq = [2,1];Beq = 1;x = fmincon(fun,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));
看看这个地区 有正的值, , .
Lb = [0,0];Ub = [1,2];
这个问题没有线性约束,所以把这些参数设为[]
.
A = [];B = [];Aeq = [];Beq = [];
试着在区域的中间找一个起始点。
X0 = (lb + ub)/2;
解决问题。
x = fmincon(fun,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×2106× 0.4000 0.4000
要确定哪种解决方案更好,请参见获得目标函数值.
求受非线性约束的函数的最小值
找到一个圆内Rosenbrock函数最小的点,同样受约束。
趣味= @(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
.
版权所有The MathWorks, Inc.函数测查[c] = circlecon c (x) = (x (1) 1/3) ^ 2 + (x (2) 1/3) ^ 2 - (1/3) ^ 2;Ceq = [];
这里没有线性约束,所以把这些参数设为[]
.
A = [];B = [];Aeq = [];Beq = [];
选择一个满足所有约束条件的初始点。
X0 = [1/4,1/4];
解决问题。
Nonlcon = @circlecon;x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。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;Ceq = [];
创建剩下的问题规范。然后运行fmincon
.
趣味= @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = @unitdisk;X0 = [0,0];x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Iter Func-count Fval可行性步长规范一阶步长优化03 1.000000e+00 0.000e+00 1.000e+00 1.000e+00 0.000e+00 1.353e -01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+ 00 3 28 4.197517e-01 0.000e+00 3.430e-01 1.172e +00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 5.498e -02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 401.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 1.754e-01 7.383e+00 1.383e - 00 9 46 4.533081e-02 0.000e+00 1.898e +00 1.5393e -02 1.278e -01 10 49 4.533081e-02 2.898e-03 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 1.000e+00 2.095e-06 1.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.212e-12 1.406e-05本地最小可能值。约束满足。Fmincon停止,因为当前步长的大小小于步长公差的值,并且约束被满足到约束公差的值之内。X = 0.7864 0.6177
在目标函数中包含梯度评估,以便更快或更可靠的计算。
将梯度计算作为条件化输出包含在目标函数文件中。详细信息请参见包括梯度和黑森.目标函数是Rosenbrock函数,
它有梯度
函数[f,g] = rosenbrockwithgrad(x)计算目标fF = 100*(x(2) -x(1)²)²+ (1-x(1))²;如果Nargout > 1所需梯度百分比G = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));200 * (x (2) - x (1) ^ 2)];结束
将此代码保存为一个名为rosenbrockwithgrad.m
在MATLAB®路径上。
创建使用目标函数梯度的选项。
选项= optimoptions(“fmincon”,“SpecifyObjectiveGradient”,真正的);
为问题创建其他输入。然后调用fmincon
.
乐趣= @rosenbrockwithgrad;X0 = [-1,2];A = [];B = [];Aeq = [];Beq = [];Lb = [- 2,2];Ub = [2,2];Nonlcon = [];x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。X = 1.0000 1.0000
解决同样的问题默认的选项使用问题结构而不是单独的论点。
创建选项和问题结构。看到问题字段名和必填字段。
选项= optimoptions(“fmincon”,“显示”,“通路”,“算法”,“sqp”);问题。选项=选项;问题。解算器=“fmincon”;问题。目标= @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;问题。x0=[0,0];
非线性约束函数unitdisk
出现在本例结束.中包含非线性约束函数问题
.
问题。nonlcon=@unitdisk;
解决问题。
X = fmincon(问题)
Iter Func-count Fval可行性步长规范一阶步长优化03 1.000000e+00 0.000e+00 1.000e+00 1.000e+00 0.000e+00 1.353e -01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+ 00 3 28 4.197517e-01 0.000e+00 3.430e-01 1.172e +00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 5.498e -02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 401.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 1.754e-01 7.383e+00 1.383e - 00 9 46 4.533081e-02 0.000e+00 1.898e +00 1.5393e -02 1.278e -01 10 49 4.533081e-02 2.898e-03 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 1.000e+00 2.095e-06 1.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.212e-12 1.406e-05本地最小可能值。约束满足。Fmincon停止,因为当前步长的大小小于步长公差的值,并且约束被满足到约束公差的值之内。
x =1×20.7864 - 0.6177
迭代显示和解与中相同默认的选项.
下面的代码创建unitdisk
函数。
函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];结束
调用fmincon
与fval
输出以获得目标函数在解处的值。
的使用约束最小化示例显示了两种解决方案。金宝搏官方网站哪个更好?方法运行请求的示例fval
输出以及解决方案。
有趣= @ (x) 1 + x (1) / (1 + x (2)) - 3 * x(1)。* x (2) + (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×2106× 0.4000 0.4000
Fval2 = 1.0000
这个解有一个目标函数值fval2
= 1,比第一个值高fval
= -0.6667。第一个解决方案x
具有较低的局部最小目标函数值。
要方便地检查溶液的质量,请使用exitflag
而且输出
输出。
在单位圆盘上建立最小化Rosenbrock函数的问题,.首先创建一个表示非线性约束的函数。保存为一个名为unitdisk.m
在MATLAB®路径上。
函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];
创建剩下的问题规范。
趣味= @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;Nonlcon = @unitdisk;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];X0 = [0,0];
调用fmincon
使用fval
,exitflag
,输出
输出。
[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: ' internal -point' firstorderopt: 2.4373e-08 cgiterations: 4 message: '…' bestviable: [1x1 struct]
的exitflag
价值1
表示该解为局部最小值。
的输出
结构报告关于解决方案过程的若干统计信息。特别地,它给出了迭代的次数output.iterations
中函数求值的个数output.funcCount
的可行性output.constrviolation
.
fmincon
可选地返回几个输出,可用于分析报告的解决方案。
在单位圆盘上建立Rosenbrock函数的最小化问题。首先创建一个表示非线性约束的函数。保存为一个名为unitdisk.m
在MATLAB®路径上。
函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];
创建剩下的问题规范。
趣味= @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;Nonlcon = @unitdisk;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];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 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: ' internal -point' firstorderopt: 2.4373e-08 cgiterations: 4 message: '…' bestviable: [1x1 struct]λ=结构体与f我elds: eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: [0x1 double] lower: [2x1 double] upper: [2x1 double] ineqnonlin: 0.1215 grad = -0.1911 -0.1501 hessian = 497.2903 -314.5589 -314.5589 200.2392
的lambda.ineqnonlin
输出表明非线性约束在解处是活跃的,并给出了相关的拉格朗日乘子的值。
的研究生
输出给出了目标函数在解处的梯度值x
.
的黑森
输出描述在fmincon黑森.
有趣的
- - - - - -函数最小化函数来最小化,指定为函数句柄或函数名。有趣的
函数接受向量或数组吗x
并返回一个实标量f
的目标函数x
.
fmincon
通过x
你的目标函数和任何非线性约束函数的形状x0
论点。例如,如果x0
是一个5乘3的数组吗fmincon
通过x
来有趣的
作为一个5 × 3的数组。然而,fmincon
乘以线性约束矩阵一个
或Aeq
与x
转换后x
对列向量x (:)
.
指定有趣的
作为文件的函数句柄:
x = fmincon(@myfun,x0,A,b)
在哪里myfun
是一个MATLAB®函数如
函数F = myfun(x) F =...计算x处的函数值
你也可以指定有趣的
作为匿名函数的函数句柄:
x = fmincon(@(x)norm(x)^2,x0,A,b);
如果你能计算的梯度有趣的
而且的SpecifyObjectiveGradient
选项设置为真正的
,由
选项= optimoptions(“fmincon”,“SpecifyObjectiveGradient”,真正的)
有趣的
必须返回梯度向量g (x)
在第二个输出参数中。
如果你也能计算黑森矩阵而且的HessianFcn
选项设置为“目标”
通过optimoptions
而且的算法
选择是“trust-region-reflective”
,有趣的
必须返回黑森值H (x)
,一个对称矩阵,在第三个输出参数中。有趣的
可以给稀疏黑森。看到Hessian for fminunc信任区域或fmincon信任区域反射算法获取详细信息。
如果你也能计算黑森矩阵和算法
选项设置为“内点”
,有一种不同的方式来传递黑森fmincon
.有关更多信息,请参见Hessian for fmincon内点算法.有关使用符号数学工具箱™计算梯度和黑森的示例,请参见计算梯度和黑森使用符号数学工具箱™.
的内点
而且trust-region-reflective
算法允许你提供一个黑森乘法函数。这个函数给出了一个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日
通过输入以下约束来指定不等式。
A = [1,2;3,4;5,6];B = [10;20;30];
例子:要指定x分量的和为1或更小,请使用A = ones(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。
通过输入以下约束来指定不等式。
A = [1,2;3,4;5,6];B = [10;20;30];
例子:要指定x分量的和为1或更小,请使用A = ones(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];Beq = [10;20];
例子:要指定x分量的和为1,使用Aeq = ones(1,N)
而且Beq = 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];Beq = [10;20];
例子:要指定x分量的和为1,使用Aeq = ones(1,N)
而且Beq = 1
.
数据类型:双
磅
- - - - - -下界下界,指定为实向量或实数组。如果元素的个数x0
等于里面元素的个数磅
,然后磅
指定
X (i) >= lb(i)
对所有我
.
如果数值(lb) <数值(x0)
,然后磅
指定
X (i) >= lb(i)
为1 <= I <= number (lb)
.
如果磅
元素少于x0
,解算器发出警告。
例子:要指定所有x分量都是正的,使用Lb = 0 (size(x0))
.
数据类型:双
乌兰巴托
- - - - - -上界上界,指定为实向量或实数组。如果元素的个数x0
等于里面元素的个数乌兰巴托
,然后乌兰巴托
指定
X (i) <= ub(i)
对所有我
.
如果Numel (ub) < Numel (x0)
,然后乌兰巴托
指定
X (i) <= ub(i)
为1 <= I <= numel(ub)
.
如果乌兰巴托
元素少于x0
,解算器发出警告。
例子:要指定所有x分量都小于1,使用Ub = ones(size(x0))
.
数据类型:双
nonlcon
- - - - - -非线性约束非线性约束,指定为函数句柄或函数名。nonlcon
函数接受向量或数组吗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)
在哪里mycon
是一个MATLAB函数,如
函数[c,ceq] = mycon(x) c =…计算x上的非线性不等式ceq =…计算x处的非线性等式。
SpecifyConstraintGradient
选择是真正的
,由options = optimoptions('fmincon',' specyconstraintgradient ',true)
nonlcon
还必须在第三和第四个输出参数中返回,GC
,的梯度c (x)
,GCeq
,的梯度量表(x)
.GC
而且GCeq
可以是稀疏的也可以是密集的。如果GC
或GCeq
较大,具有相对较少的非零项,节省运行时间和内存在内点
通过将它们表示为稀疏矩阵的算法。有关更多信息,请参见非线性约束.
数据类型:字符
|function_handle
|字符串
选项
- - - - - -优化选项optimoptions
|结构,例如optimset
返回的优化选项,指定为的输出optimoptions
或者一个结构,比如optimset
的回报。
一些选项适用于所有算法,而其他选项则与特定算法相关。看到优化选项参考有关详细信息。
中缺少一些选项optimoptions
显示。这些选项在下表中以斜体字显示。详细信息请参见视图选项.
所有的算法 | |
算法 |
选择优化算法:
有关选择算法的信息,请参见算法选择. 的
如果您选择 的 |
CheckGradients |
比较用户提供的导数(目标或约束的梯度)与有限差分导数。的选择是 为 |
ConstraintTolerance |
约束违反的容差,一个正标量。默认为 为 |
诊断 | 显示有关要最小化或解决的功能的诊断信息。的选择是 |
DiffMaxChange | 有限差梯度(正标量)变量的最大变化。默认为 |
DiffMinChange | 有限差分梯度(正标量)的最小变量变化。默认为 |
显示 |
显示水平(见迭代显示):
|
FiniteDifferenceStepSize |
有限差分的标量或矢量步长因子。当你设置
符号' (x) =符号(x) 除了符号' (0)= 1 .中心有限差分为
FiniteDifferenceStepSize 展开成一个向量。默认为sqrt (eps) 对于正向有限差分,和eps ^ (1/3) 对于中心有限差分。为 |
FiniteDifferenceType |
有限差分,用来估计梯度,是
为 |
FunValCheck | 检查目标函数值是否有效。默认设置, |
MaxFunctionEvaluations |
允许的最大函数求值数,一个正整数。所有算法的默认值,除了 为 |
MaxIterations |
允许的最大迭代次数,一个正整数。所有算法的默认值,除了 为 |
OptimalityTolerance |
一阶最优性(正标量)上的终止容差。默认为 为 |
OutputFcn |
指定优化函数在每次迭代时调用的一个或多个用户定义函数。传递一个函数句柄或函数句柄的单元格数组。默认值为none ( |
PlotFcn |
在算法执行时绘制各种进度度量;从预定义的情节中选择或编写自己的。传递内置绘图函数名、函数句柄或内置绘图函数名或函数句柄的单元格数组。对于自定义绘图函数,传递函数句柄。默认值为none (
自定义绘图函数使用与输出函数相同的语法。看到优化工具箱的输出函数而且输出函数和图函数语法. 为 |
SpecifyConstraintGradient |
用户定义的非线性约束函数的梯度。当设置为默认值时, 为 |
SpecifyObjectiveGradient |
由用户定义的目标函数的梯度。参见 为 |
StepTolerance |
终止公差 为 |
TypicalX |
典型的 的 |
UseParallel |
当 |
Trust-Region-Reflective算法 | |
FunctionTolerance |
函数值上的终止公差为正标量。默认为 为 |
HessianFcn |
如果 为 |
HessianMultiplyFcn |
黑森乘法函数,指定为函数句柄。对于大规模的结构化问题,这个函数计算黑森矩阵乘积 W = hmfun(Hinfo,Y) 在哪里 第一个参数与目标函数返回的第三个参数相同 [f,g,Hinfo] = fun(x)
请注意 使用 看到黑森乘法函数.看到密结构黑森最小化,线性等式举个例子。 为 |
HessPattern | 有限差分Hessian的稀疏模式。集 使用 当结构未知时,不要设置 |
MaxPCGIter | 预条件共轭梯度(PCG)迭代的最大次数,一个正标量。默认为 |
PrecondBandWidth | PCG预调节器的上带宽,非负整数。缺省情况下,使用对角预处理(上带宽为0)。对于某些问题,增加带宽可以减少PCG迭代次数。设置 |
SubproblemAlgorithm |
确定如何计算迭代步骤。默认的, |
TolPCG | PCG迭代上的终止公差为正标量。默认为 |
有效集算法 | |
FunctionTolerance |
函数值上的终止公差为正标量。默认为 为 |
MaxSQPIter | 允许的最大SQP迭代数,一个正整数。默认为 |
RelLineSrchBnd | 直线搜索步长上的相对界(一个实非负标量值)。总位移x满足|Δx(我|≤relLineSrchBnd·max(| .x(我) | |typicalx(我) |).这个选项提供了对位移大小的控制x对于求解器采取的步骤被认为太大的情况。默认为无边界( |
RelLineSrchBndDuration | 中指定的边界的迭代次数 |
TolConSQP | 内部迭代SQP约束违反的终止容差,一个正标量。默认为 |
内点算法 | |
BarrierParamUpdate |
指定如何
这个选项会影响解算器的速度和收敛性,但效果不容易预测。 |
EnableFeasibilityMode |
当 可行性模式通常在 |
HessianApproximation |
指定如何
请注意 使用 为 |
HessianFcn |
如果 为 |
HessianMultiplyFcn |
用户提供的函数,给出一个黑森-时间向量积(见黑森乘法函数).传递一个函数句柄。 请注意 使用 为 |
HonorBounds |
默认的 为 |
InitBarrierParam | 初始势垒值为正标量。有时,尝试一个高于默认值的值可能会有所帮助 |
InitTrustRegionRadius | 信任区域的初始半径,一个正的标量。对于规模不好的问题,选择一个比默认值更小的值可能会有所帮助 ,在那里n是变量的数量。 |
MaxProjCGIter | 投影共轭梯度迭代次数的公差(停止准则);这是一个内部迭代,而不是算法的迭代次数。此正整数的默认值为 |
ObjectiveLimit |
一个标量的公差(停止标准)。如果目标函数值低于 |
ScaleProblem |
为 |
SubproblemAlgorithm |
确定如何计算迭代步骤。默认的, |
TolProjCG | 投影共轭梯度算法的相对容差(停止判据)这是针对内部迭代,而不是算法迭代。这个正标量的默认值是 |
TolProjCGAbs | 投影共轭梯度算法的绝对容差(停止判据)这是针对内部迭代,而不是算法迭代。这个正标量的默认值是 |
SQP和SQP遗留算法 | |
ObjectiveLimit |
一个标量的公差(停止标准)。如果目标函数值低于 |
ScaleProblem |
为 |
例子:options = optimoptions('fmincon',' specyobjectivegradient ',true,' specyconstraintgradient ',true)
问题
- - - - - -问题的结构问题结构,指定为具有以下字段的结构:
字段名 | 条目 |
---|---|
|
目标函数 |
|
起始点x |
|
线性不等式约束的矩阵 |
|
线性不等式约束的向量 |
|
矩阵的线性等式约束 |
|
线性等式约束的向量 |
磅 |
下界向量 |
乌兰巴托 |
上界向量 |
|
非线性约束函数 |
|
“fmincon” |
|
创建的选项optimoptions |
你必须提供至少客观的
,x0
,解算器
,选项
字段问题
结构。
数据类型:结构体
fval
-求解时的目标函数值目标函数在解处的值,作为实数返回。一般来说,fval
=有趣的(x)
.
exitflag
- - -原因fmincon
停止原因fmincon
停止,以整数形式返回。
所有的算法: |
|
|
一阶最优测度小于 |
|
超过迭代次数 |
|
被输出函数或绘图函数停止。 |
|
没有找到可行点。 |
除了所有算法 |
|
|
的变化 |
|
|
|
目标函数值的变化小于 |
|
|
|
搜索方向的幅度小于2* |
|
搜索方向方向导数的大小小于2* |
|
|
|
当前迭代的目标函数如下 |
输出
—优化过程信息关于优化过程的信息,作为一个带字段的结构返回:
迭代 |
迭代次数 |
funcCount |
函数求值的数量 |
lssteplength |
直线搜索步长相对于搜索方向的大小( |
constrviolation |
约束函数的最大值 |
stepsize |
最后位移长度 |
算法 |
所使用的优化算法 |
cgiterations |
PCG的总迭代次数( |
firstorderopt |
一阶最优性的度量 |
bestfeasible |
遇到的最佳(最低目标函数)可行点。一个包含这些字段的结构:
如果找不到可行点,则采用 |
消息 |
退出消息 |
研究生
-溶液的梯度解处的梯度,作为实向量返回。研究生
给出的梯度有趣的
在这一点上x (:)
.
黑森
-近似黑森近似黑森矩阵,返回实矩阵。因为黑森
,请参阅黑森输出.
fmincon
是一种基于梯度的方法,设计用于解决目标函数和约束函数都是连续的并且具有连续一阶导数的问题。
为“trust-region-reflective”
算法中,必须提供梯度有趣的
并设置“SpecifyObjectiveGradient”
选项真正的
.
的“trust-region-reflective”
算法不允许上下界相等。例如,如果磅(2)= =乌兰巴托(2)
,fmincon
给出这个错误:
信任区域反射算法不允许上下界相等。可以使用内点算法或SQP算法。
传递黑森语有两种不同的语法,传递a也有两种不同的语法HessianMultiplyFcn
函数;一个用于trust-region-reflective
,另一个是内点
.看到包括麻布.
为trust-region-reflective
,拉格朗日函数的黑森函数与目标函数的黑森函数是相同的。你把这个黑森函数作为目标函数的第三个输出。
为内点
,拉格朗日函数的黑森函数涉及非线性约束函数的拉格朗日乘子和黑森函数。你传递黑森作为一个单独的函数,考虑到当前点x
以及拉格朗日乘子结构λ
.
当问题不可行时,fmincon
试图最小化最大约束值。
fmincon
使用黑森作为可选的输入。这个黑森矩阵是拉格朗日矩阵的二阶导数矩阵(见方程1),即
(1) |
有关如何提供黑森的细节trust-region-reflective
或内点
算法,看到包括麻布.
的有效集
而且sqp
算法不接受输入黑森。他们计算了拉格朗日黑森量的准牛顿近似。
的内点
算法有几个选择“HessianApproximation”
选择;看到选择输入黑森近似内点fmincon:
“蓄热”
- - - - - -fmincon
用密集准牛顿近似计算黑森。这是默认的黑森近似。
“lbfgs”
- - - - - -fmincon
通过有限内存,大规模准牛顿近似计算黑森。使用默认内存,即10次迭代。
{“lbfgs”,正整数}
- - - - - -fmincon
通过有限内存,大规模准牛顿近似计算黑森。正整数指定应该记住多少个过去的迭代。
有限差分的
- - - - - -fmincon
通过梯度(s)的有限差分计算hessian -乘向量积。你必须提供目标函数的梯度,以及非线性约束的梯度(如果它们存在的话)。设置“SpecifyObjectiveGradient”
选项真正的
以及,如果适用的话“SpecifyConstraintGradient”
选项真正的
.您必须设置“SubproblemAlgorithm”
来“重心”
.
的内点
而且trust-region-reflective
算法允许你提供一个黑森乘法函数。这个函数给出了一个Hessian-乘以向量乘积的结果,而不直接计算Hessian。这可以节省内存。详细信息请参见黑森乘法函数.
该算法在fmincon内点算法.中有更广泛的描述[1],[41],[9].
的fmincon
“sqp”
而且“sqp-legacy”
算法类似于“激活集”
算法描述于激活集优化.fmincon SQP算法描述主要的区别。总的来说,这些差异是:
的“trust-region-reflective”
算法是一种子空间信赖域方法,基于中所述的内反射牛顿方法[3]而且[4].每次迭代都涉及使用预处理共轭梯度(PCG)方法求解大型线性系统的近似解。参见中可信域和预处理共轭梯度方法的描述fmincon信任域反射算法.
的优化活动编辑器任务提供了一个可视化界面fmincon
.
伯德,R. H., J. C.吉尔伯特,J.诺西德尔。非线性规划中基于内点技术的信赖域方法。数学规划,第89卷第1期,2000年,第149-185页。
[2]伯德,R. H.,玛丽E.赫里巴尔,豪尔赫·诺西德尔。大规模非线性规划的内点算法SIAM优化期刊, 1999年第9卷第4期,第877-900页。
[3] Coleman, t.f., Li Y.。有边界的非线性极小化的内部信赖域方法。SIAM优化期刊, Vol. 6, 1996, pp. 418-445。
[4] Coleman, t.f., Li Y.。大尺度非线性有界极小化问题的反射牛顿方法的收敛性数学规划,第67卷第2期,1994年,第189-224页。
[5]吉尔,p.e., W.默里和M. H.赖特。实用的优化伦敦,学术出版社,1981年。
[6] Han s.p.,“非线性规划的一种全局收敛方法”。优化理论与应用杂志,卷22,1977,第297页。
[7] Powell m.j. D. <非线性约束优化计算的快速算法>。数值分析, ed. G. A. Watson,数学课堂讲稿,施普林格出版社,1978年,第630卷。
[8] Powell, m.j. D. <非线性约束优化计算的变度量方法的收敛性>。非线性规划3(O. L.曼加萨里安、R. R.迈耶和S. M.罗宾逊主编),学术出版社,1978年。
华尔兹,R. A., J. L.莫拉莱斯,J.诺西德尔和D.欧尔班。一种结合了直线搜索和信赖域步骤的非线性优化内部算法。数学规划, 2006年第3期,第391-408页。
使用注意事项和限制:
fmincon
金宝app方法支持代码生成codegen
(MATLAB编码器)函数或MATLAB编码器™你必须有一个MATLAB编码器生成代码的许可。
目标硬件必须支持标准的双精度浮点计算。金宝app不能为单精度或定点计算生成代码。
代码生成目标不使用与MATLAB求解器相同的数学内核库。因此,代码生成解决方案可能与求解器解决方案不同,特别是金宝搏官方网站对于条件较差的问题。
所有用于生成的代码必须为MATLAB代码。特别是,不能使用自定义黑盒函数作为目标函数fmincon
.你可以使用coder.ceval
计算用C或c++编写的自定义函数。然而,自定义函数必须在MATLAB函数中调用。
fmincon
不支持金宝app问题
用于代码生成的参数。
[x,fval] = fmincon(问题)%不支持金宝app
必须使用函数句柄(而不是字符串或字符名)指定目标函数和任何非线性约束函数。
x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon)%的金宝app支持%不支持:f金宝appmincon(‘有趣的’,…)或fmincon(“有趣”,…)
所有fmincon
输入矩阵,例如一个
,Aeq
,磅
,乌兰巴托
一定要满,不能疏。方法可以将稀疏矩阵转换为完整矩阵完整的
函数。
的磅
而且乌兰巴托
参数的项数必须与x0
参数或必须为空[]
.
对于涉及嵌入式处理器的高级代码优化,还需要一个嵌入式编码器®许可证。
您必须包含的选项fmincon
并使用optimoptions
.选项必须包括算法
选项,设置为“sqp”
或“sqp-legacy”
.
选项= optimoptions(“fmincon”,“算法”,“sqp”);[x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
代码生成支持以下选项:金宝app
算法
-肯定是“sqp”
或“sqp-legacy”
ConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
TypicalX
生成的代码具有有限的选项错误检查。更新选项的推荐方法是使用optimoptions
,不是点表示法。
Opts = optimoptions(“fmincon”,“算法”,“sqp”);Opts = optimoptions(Opts,“MaxIterations”1 e4);%推荐选择。米axIterations = 1e4;%不推荐
不要从文件中加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。
通常,如果您指定了一个不受支持的选项,那么在代码生成期间,该选项将被无声地忽略。金宝app但是,如果使用点表示法指定绘图函数或输出函数,则代码生成可能会产生错误。为了可靠性,请只指定支持的选项。金宝app
由于不支持输出函数和绘图函数,金宝appfmincon
不返回退出标志-1。
生成的代码fmincon
不包含bestfeasible
返回的字段输出
结构。
有关示例,请参见优化基础代码生成.
要并行运行,请设置“UseParallel”
选项真正的
.
Options = optimoptions('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见在优化工具箱中使用并行计算.
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。