求约束非线性多变量函数的最小值
非线性规划求解器进行求解。
查找最低问题所指定的问题
b和说真的是向量,一个和Aeq矩阵,c(x),量表信(x)是返回向量的函数f(x)是返回标量的函数。f(x),c(x),量表信(x)可以是非线性函数。
x,磅, 和UB.可以作为向量或矩阵传递;看到矩阵论据.
中的设计变量定义一组上下限x
= fmincon (乐趣
,x0
,一个
,b
,Aeq
,说真的
,磅
,UB.
)x
,所以解总是在这个范围内磅
≤x
≤UB.
.如果不存在等式,则设置Aeq = []
和说真的= []
.如果x(我)
下面是无界的吗磅(i) =负无穷
, 而如果x(我)
上面是无界的,集合乌兰巴托(i) =正无穷
.
请注意
如果问题的指定输入界限不一致,粉刺
抛出一个错误。在这种情况下,输出x
是x0
和fval
是[]
.
为默认“内点”
算法,粉刺
集的组成部分x0
这就违反了界限Lb≤x≤ub
,或等于一个界限,到界限区域的内部。为“trust-region-reflective”
算法,粉刺
将违反组件设置到绑定区域内部。为其他算法,粉刺
将违反组件设置为最近的绑定。遵守边界的组件不会改变。看到迭代会违反约束.
求有线性不等式约束时Rosenbrock函数的最小值。
设置目标函数乐趣
是罗森布罗克的职责众所周知,罗森布罗克函数很难最小化。它在(1,1)点的最小目标值为0。有关更多信息,请参见求解一个约束非线性问题,基于求解器.
@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
求从点开始的最小值[-1,2]
,受限制拥有
.用形式表示这个约束Ax < = b
通过一个= [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 < =
通过一个= [1,2]
和b = 1
.
用形式表示线性等式约束Aeq * x =说真的
通过Aeq = (2, 1)
和说真的= 1
.
x0 = (0.5, 0);一个= [1,2];b = 1;Aeq = (2, 1);说真的= 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 (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
X =1×21.0000 - 2.0000
不同的初始点可能导致不同的解决方案。
x0 = x0/5;x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
X =1×210.-6×0.4000 - 0.4000
确定哪种解决方案更好,看到获得目标函数值.
求受非线性约束的函数的最小值
找出罗森布罗克函数在一个圆内最小的点,也受约束。
@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
看看区域内部,.
磅= [0,0.2];乌兰巴托= [0.5,0.8];
也可以在半径为1/3的圆心[1/3,1/3]内观察。复制以下代码到你的MATLAB®路径上的一个文件circlecon.m
.
版权所有2015 The MathWorks, Inc.函数测查[c] = circlecon c (x) = (x (1) 1/3) ^ 2 + (x (2) 1/3) ^ 2 - (1/3) ^ 2;测查= [];
没有线性约束,所以将这些参数设置为[]
.
一个= [];b = [];Aeq = [];说真的= [];
选择一个满足所有约束条件的初始点。
x0 = [1/4,1 / 4];
解决这个问题。
nonlcon = @circlecon;x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。X = 0.5000 0.2500
设置选项以查看发生的迭代,并使用不同的算法。
观察粉刺
解决方案过程,设置展示
选项“通路”
.另外,试一试“sqp”
算法,有时比默认值更快或更准确“内点”
算法。
选择= optimoptions (“fmincon”,“显示”,“通路”,“算法”,“sqp”);
求罗森布罗克函数在单位圆盘上的最小值,.首先创建一个表示非线性约束的函数。将其保存为一个名为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;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = @unitdisk;x0 = (0,0);x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
ITER Func-Count FVAL可行性步长规范一阶步骤最优值0 3 1.000000E + 00 0.000E + 00 1.000E + 00 0.000E + 00 2.000E + 00 1112 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 28 4.197517E-01 0.000E + 00 3.430E-01 1.217E-01 6.172E + 00 4 31 2.733703E-01 0.000E + 00 1.000E + 00 5.254E-02 5.705E-01 5 34 2.397111C-01 0.000E + 00 1.000E + 00 7.498E-02 3.164E + 00 6 37 2.036002E-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 +001。000e+001。754e-01 7.383e+00 9 46 5.901601e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.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 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177
包括目标函数中的梯度评估,以实现更快或更可靠的计算。
将梯度求值作为条件化输出包含在目标函数文件中。有关详细信息,请参见包括梯度和Hessians.目标函数是罗森布罗克函数,
的梯度
函数(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)];结束
将此代码保存为一个名为rosenbrockwithgrad.m
在您的Matlab®路径上。
创建使用目标函数梯度的选项。
选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真正的);
创建问题的其他输入。然后调用粉刺
.
有趣= @rosenbrockwithgrad;x0 = [1, 2];一个= [];b = [];Aeq = [];说真的= [];磅= (2,2);乌兰巴托= (2,2);nonlcon = [];x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。X = 1.0000
解决相同的问题默认的选项使用问题结构而不是单独的参数。
创建选项和问题结构。看到问题字段名和必需字段。
选择= optimoptions (“fmincon”,“显示”,“通路”,“算法”,“sqp”);问题.Options =选项;问题.Solver =.“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可行性步长规范一阶步骤最优值0 3 1.000000E + 00 0.000E + 00 1.000E + 00 0.000E + 00 2.000E + 00 1112 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 28 4.197517E-01 0.000E + 00 3.430E-01 1.217E-01 6.172E + 00 4 31 2.733703E-01 0.000E + 00 1.000E + 00 5.254E-02 5.705E-01 5 34 2.397111C-01 0.000E + 00 1.000E + 00 7.498E-02 3.164E + 00 6 37 2.036002E-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 +001。000e+001。754e-01 7.383e+00 9 46 5.901601e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.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 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
X =1×20.7864 - 0.6177
迭代的显示和求解方法与默认的选项.
下面的代码创建unitdisk
函数。
函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;测查= [];结束
称呼粉刺
与之fval
输出,以获得目标函数在解处的值。
的用有界约束最小化示例给出了两种解决方案。金宝搏官方网站哪个更好?运行请求的示例fval
输出以及解决方案。
有趣= @ (x) 1 + x (1) / (1 + x (2)) - 3 * x(1)。* x (2) + (2) * (1 + x (1));磅= (0,0);乌兰巴托= [1,2];一个= [];b = [];Aeq = [];说真的= [];X0 = (lb + ub)/2;[x, fval] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
X =1×21.0000 - 2.0000
fval = -0.6667
使用不同的起点运行问题x0
.
x0 = x0/5;(x2, fval2) = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
x2 =1×210.-6×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;测查= [];
创建剩余的问题规范。
@(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;nonlcon = @unitdisk;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];x0 = (0,0);
称呼粉刺
使用fval
,exitflag
, 和输出
输出。
[x,fval,出口,输出] = fmincon(乐趣,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 constructor: 0 stepsize: 6.9162 -06 algorithm: ' internal -point' firstderopt: 2.4373e-08 cgiterations: 4 message: '…'最佳可行:[1x1 struct]
的exitflag
价值1
表示解是局部最小值。
的输出
结构报告有关解决方案过程的几个统计数据。特别是,它给出了迭代的数量output.iterations
,功能评估数量output.funcCount
的可行性output.constrviolation
.
粉刺
可选地返回几个输出,您可以使用这些输出来分析报告的解决方案。
在单位圆盘上建立最小化罗森布罗克函数的问题。首先创建一个表示非线性约束的函数。将其保存为一个名为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);
要求所有的粉刺
输出。
[x, fval exitflag、输出λ,校友,黑森]= fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constructor: 0 stepsize: 6.9162 -06 algorithm: ' internal -point' firstderopt: 2.4373e-08 cgiterations: 4 message: '…'最佳可行:[1x1 struct]lambda.=结构体with fields: 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
.
指定乐趣
作为文件的函数句柄:
x = fmincon(@ myfun,x0,a,b)
在哪里myfun.
MATLAB是一种®等功能
函数f = myfun(x)f = ...%compute函数值x
您也可以指定乐趣
作为匿名函数的函数句柄:
x = fmincon (@ (x)规范(x) ^ 2, x0, A, b);
如果你能计算出梯度乐趣
和的SpecifyObjectiveGradient
选项设置为真的
按规定
选项= Optimoptions('fmincon','specifyobjectivegradient',true)
乐趣
必须返回梯度向量g (x)
在第二个输出参数中。
如果你也能计算出Hessian矩阵和的赫索斯·福克
选项设置为“目标”
通过optimoptions
和的算法
选择是“trust-region-reflective”
,乐趣
必须返回黑森州的价值H (x)
,一个对称矩阵,在第三个输出参数。乐趣
可以给一个稀疏的黑森州。看到Hessian用于fminunc信任区域或fmincon信任区域反射算法获取详细信息。
如果你也能计算出Hessian矩阵算法
选项设置为“内点”
在美国,有一种不同的方式来传递黑森人粉刺
.有关更多信息,请参见fmincon内点算法的Hessian.有关使用symbol Math Toolbox™计算梯度和Hessian的示例,请参见使用符号数学工具箱™计算梯度和Hessians.
的内点
和trust-region-reflective
算法允许你提供一个Hessian乘法函数。这个函数给出了一个Hessian-time -vector乘积的结果,而不直接计算Hessian。这可以节省内存。看到黑森乘法函数.
例子:有趣= @ (x) sin (x (1)) * cos (x (2))
数据类型:字符
|function_handle
|字符串
一个
- - - - - -线性不平等约束线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -N
矩阵,米
是不平等的数量,和N
是变量的数量(元素的数量x0
).对于大问题,不予考虑一个
作为一个稀疏矩阵。
一个
编码米
线性不等式
A * x < =
,
在哪里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或更小,请使用一个= 1 (1,N)
和b = 1
.
数据类型:双
b
- - - - - -线性不平等约束线性不等式约束,指定为实向量。b
是一个米
- 与...相关的矢量一个
矩阵。如果你通过b
作为行向量,求解器内部转换b
到列向量b (:)
.对于大问题,不予考虑b
作为稀疏的矢量。
b
编码米
线性不等式
A * x < =
,
在哪里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或更小,请使用一个= 1 (1,N)
和b = 1
.
数据类型:双
Aeq
- - - - - -线性等式约束线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -N
矩阵,我
是等式的个数,和N
是变量的数量(元素的数量x0
).对于大问题,不予考虑Aeq
作为一个稀疏矩阵。
Aeq
编码我
线性等式
Aeq * x =说真的
,
在哪里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 =说真的
,
在哪里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(lb)
.
如果元素较少磅
比在x0
,解决方案发出警告。
例子:要指定所有x分量都是正数,请使用磅= 0(大小(x0))
.
数据类型:双
UB.
- - - - - -上限上界,指定为实向量或实数组。如果元素的数量x0
等于元素的个数UB.
,然后UB.
指定
x (i) < =乌兰巴托(我)
对所有我
.
如果元素个数(乌兰巴托)<元素个数(x0)
,然后UB.
指定
x (i) < =乌兰巴托(我)
为1 <= I <= numel(ub)
.
如果元素较少UB.
比在x0
,解决方案发出警告。
例子:要指定所有x分量都小于1,使用乌兰巴托= 1(大小(x0))
.
数据类型:双
nonlcon
- - - - - -非线性约束非线性约束,指定为函数句柄或函数名。nonlcon
是接受向量还是数组的函数x
返回两个数组,C(x)
和量表(x)
.
C(x)
非线性不等式约束数组在x
.粉刺
试图满足
c (x) < = 0
对于所有参赛作品c
.
量表(x)
数组的非线性等式约束在x
.粉刺
试图满足
量表(x) = 0
对于所有参赛作品量表信
.
例如,
x = fmincon(@ myfun,x0,a,b,aeq,beq,lb,Ub,@ mycon)
在哪里mycon
是MATLAB函数之类的
函数[c,ceq] = mycon(x)%计算非线性不等式在x. ceq =…计算x处的非线性等式。
SpecifyConstraintGradient
选择是真的
按规定选择= optimoptions(‘fmincon’,‘SpecifyConstraintGradient’,真的)
nonlcon
必须在第三和第四个输出参数中返回,GC
,梯度C(x)
, 和GCeq
,梯度量表(x)
.GC
和GCeq
可以是稀疏的,也可以是密集的。如果GC
或者GCeq
较大,且非零项相对较少,可节省运行时间和内存内点
将它们表示为稀疏矩阵。有关更多信息,请参见非线性约束.
数据类型:字符
|function_handle
|字符串
选项
- - - - - -优化选项optimoptions
|结构如优化集
返回的输出,指定为优化选项optimoptions
或者一个结构优化集
的回报。
有些选项适用于所有算法,有些则与特定算法相关。看到优化选择参考的详细信息。
控件中缺少一些选项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 |
终止宽容 为 |
典型的 |
典型的 的 |
UseParallel |
当 |
Trust-Region-Reflective算法 | |
FunctionTolerance |
函数值的终止容限,一个正标量。默认值是 为 |
赫索斯·福克 |
如果 为 |
HessianMultiplyFcn |
海森乘法函数,指定为函数句柄。对于大规模的结构化问题,这个函数计算Hessian矩阵乘积 W = hmfun (Hinfo, Y) 在哪里 第一个参数与目标函数返回的第三个参数相同 [f, g, Hinfo] =乐趣(x)
请注意 使用 看到黑森乘法函数.看到稠密结构Hessian的最小化,线性等式了一个例子。 为 |
HessPattern | 有限差分的Hessian稀疏模式。集 使用 当结构未知时,不要设置 |
MaxPCGIter | 最大预条件共轭梯度(PCG)迭代数,一个正标量。默认值是 |
precondbandwidth. | PCG预调制器的上带宽,非负整数。默认情况下,使用对角预处理(上限带宽为0)。对于某些问题,增加带宽可以减少PCG迭代次数。设置 |
SubproblemAlgorithm |
确定如何计算迭代步骤。默认的, |
TolPCG | PCG迭代的终止公差,正标量。默认值是 |
有效集算法 | |
FunctionTolerance |
函数值的终止容限,一个正标量。默认值是 为 |
MaxSQPIter | 允许的最大SQP迭代次数,一个正整数。默认值是 |
RelLineSrchBnd | 直线搜索步长上的相对界限(实非负标量值)。总排水量x满足|Δx(我)|≤relLineSrchBnd·max(| . b0x(我) | |典型的(我) |).该选项提供了对位移大小的控制x对于求解器采取的案例,措施被认为太大的步骤。默认值没有界限( |
RelLineSrchBndDuration | 指定的界限的迭代次数 |
TolConSQP | 内迭代SQP约束违背的终止容忍,一个正标量。默认值是 |
内点算法 | |
BarrierParamUpdate |
选择如何
这种选择会影响求解器的速度和收敛性,但效果不容易预测。 |
HessianApproximation |
选择如何
请注意 使用 为 |
赫索斯·福克 |
如果 为 |
HessianMultiplyFcn |
用户提供的函数,提供Hessian-idse矢量产品(参见黑森乘法函数).传递一个函数句柄。 请注意 使用 为 |
冬青 |
默认的 为 |
InitBarrierParam | 初始屏障值,正标量。有时它可能有助于尝试高于默认值的值 |
InitTrustRegionRadius | 信任区域的初始半径,一个正标量。在规模严重的问题上,选择一个比默认值小的值可能会有帮助 ,在那里n为变量的个数。 |
MaxProjCGIter | 对预定的共轭梯度迭代的数量的宽容(停止标准);这是一个内部迭代,而不是算法的迭代次数。此正整数具有默认值 |
ObjectiveLimit |
一个标量的公差(停止标准)。如果目标函数值小于 |
ScaleProblem |
为 |
SubproblemAlgorithm |
确定如何计算迭代步骤。默认的, |
TolProjCG | 投影共轭梯度算法的相对公差(停止准则)这是针对内部迭代,而不是算法迭代。这个正标量的默认值为 |
tolprojcgabs. | 投影共轭梯度算法的绝对公差(停止准则)这是针对内部迭代,而不是算法迭代。这个正标量的默认值为 |
SQP和SQP遗留算法 | |
ObjectiveLimit |
一个标量的公差(停止标准)。如果目标函数值小于 |
ScaleProblem |
为 |
例子:选择= optimoptions(‘fmincon’,‘SpecifyObjectiveGradient’,真的,SpecifyConstraintGradient,真的)
问题
- - - - - -问题结构问题结构,指定为具有以下字段的结构:
字段名 | 条目 |
---|---|
|
目标函数 |
|
初始点x |
|
线性不等式约束的矩阵 |
|
线性不等式约束的矢量 |
|
线性等式约束的矩阵 |
|
线性等式约束的向量 |
磅 |
下界向量 |
UB. |
上界向量 |
|
非线性约束函数 |
|
“fmincon” |
|
选择创建optimoptions |
你必须至少提供客观的
,x0
,解算器
, 和选项
田野在问题
结构。
数据类型:结构体
fval
-目标函数在解处的值目标函数在解处的值,以实数返回。一般来说,fval
=有趣(x)
.
exitflag
- 原因粉刺
停了下来原因粉刺
已停止,返回为整数。
所有的算法: |
|
|
一阶的最优性措施小于 |
|
超过迭代次数 |
|
被输出函数或绘图函数停止。 |
|
没有发现可行的点。 |
所有算法除了 |
|
|
在某一方面的变化 |
|
|
|
目标函数值的变化小于 |
|
|
|
搜索方向的大小小于2* |
|
搜索方向方向导数值小于2* |
|
|
|
下面是当前迭代的目标函数 |
输出
- 有关优化过程的信息关于优化过程的信息,作为带有字段的结构返回:
迭代 |
迭代次数 |
funcCount |
函数计算次数 |
lssteplength |
线路搜索步骤的大小相对于搜索方向( |
constrviolation |
约束函数的最大值 |
一步的大小 |
最后排水量的长度 |
算法 |
优化算法使用 |
cgiteration. |
PCG迭代总次数( |
firstorderopt |
一阶最优性的度量 |
bestfeasible |
遇到的最佳(最低目标函数)可行点。包含以下字段的结构:
如果找不到可行点,则 |
消息 |
退出消息 |
研究生
-解处的梯度解的梯度,返回实向量。研究生
给出梯度乐趣
在点x (:)
.
黑森西
——近似黑森近似的黑森函数,返回实矩阵。为了…的意义黑森西
,请参阅黑森输出.
粉刺
是一种基于梯度的方法,用于处理目标函数和约束函数都是连续的且具有连续一阶导数的问题。
为“trust-region-reflective”
算法,您必须提供梯度乐趣
并设置“SpecifyObjectiveGradient”
选项真的
.
的“trust-region-reflective”
算法不允许相等的上界和下界。例如,如果磅(2)= =乌兰巴托(2)
,粉刺
让这个错误:
信任区域反光算法中不允许等于上限和下限。改为使用内部点或SQP算法。
传递一个Hessian有两种不同的语法,传递一个也有两种不同的语法HessianMultiplyFcn
函数;一个用于trust-region-reflective
,另一个用于内点
.看到包括麻布.
为trust-region-reflective
,拉格朗日函数的Hessian与目标函数的Hessian相同。你传递那个Hessian作为目标函数的第三个输出。
为内点
,拉格朗日的Hessian包括拉格朗日乘数和非线性约束函数的Hessian。您将Hessian作为一个单独的函数传递,该函数将考虑当前点x
以及拉格朗日乘子结构lambda.
.
当问题不可行时,粉刺
尝试最小化最大约束值。
粉刺
使用Hessian作为可选输入。这个Hessian是拉格朗日的二阶导数矩阵(见方程1),即
(1) |
详细了解如何供应Hessian到trust-region-reflective
或者内点
算法,看到包括麻布.
的有效集
和SQP.
算法不接受一个输入黑森州。他们将Quasi-Newton近似于拉格朗日的黑森州。
的内点
算法有几种选择“HessianApproximation”
选择;看到选择输入Hessian近似用于内部点Fmincon:
'bfgs'
- - - - - -粉刺
用稠密的拟牛顿近似计算Hessian。这是默认的Hessian近似。
“lbfgs”
- - - - - -粉刺
通过有限内存的大规模准牛顿近似计算Hessian。使用默认内存,10次迭代。
{“lbfgs”,正整数}
- - - - - -粉刺
通过有限内存的大规模准牛顿近似计算Hessian。正整数指定应该记住多少过去的迭代。
有限差分的
- - - - - -粉刺
通过梯度的有限差分计算hessian -time -vector乘积。你必须提供目标函数的梯度,以及非线性约束的梯度(如果存在的话)。设置“SpecifyObjectiveGradient”
选项真的
如果适用的话“SpecifyConstraintGradient”
选项真的
.你必须设置“SubproblemAlgorithm”
到“重心”
.
的内点
和trust-region-reflective
算法允许你提供一个Hessian乘法函数。此功能给出了Hessian时代矢量产品的结果,而不直接计算Hessian。这可以节省内存。有关详细信息,请参见黑森乘法函数.
该算法在fmincon内点算法.有更广泛的描述[1],[41], 和[9].
的“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。“大规模非线性规划的内点算法”。SIAM优化学报, 1999年第9卷第4期,第877-900页。
[3] Coleman, t.f.和Y. Li。有界非线性极小化的内部信赖域方法SIAM优化学报, 1996年第6卷,418-445页。
[4]科尔曼,T. F.和Y. Li。“关于对界限大规模非线性最小化的反光牛顿方法的收敛性。”数学规划,第67卷,第2期,1994年,189-224页。
吉尔,P. E., W.默里和M. H.赖特。实用的优化,伦敦,学术出版社,1981年。
[6] Han, S. P. <非线性规划的全局收敛方法>。优化理论与应用学报, 1977年第22卷,第297页。
[7] Powell, M. J. D. <非线性约束优化计算的快速算法>。数值分析,爱德华·g·a·沃森,数学讲义,斯普林克 - Verlag,Vol。630,1978。
[8] Powell, M. J. D. <非线性约束优化计算的变度量方法的收敛性>。非线性编程3.(o.l. Mangasarian、r.r. Meyer和s.m. Robinson主编),学术出版社,1978年。
[9]华尔兹,r.A.,J.L. Morales,J. Nocedal和D. Orban。“结合线搜索和信任区域步骤的非线性优化的内部算法。”数学规划, Vol 107, No. 3, 2006, pp. 391-408。
使用注意事项及限制:
粉刺
金宝app支持使用Codegen.
(MATLAB编码器)功能或者MATLAB编码器™你一定有一个MATLAB编码器生成代码的许可。
目标硬件必须支持标准的双精度浮点计算。金宝app不能为单精度或定点计算生成代码。
代码生成目标不使用与MATLAB求解器相同的数学内核库。因此,代码生成解决方案可能因求解器解决方案而异,特别是金宝搏官方网站对于条件差的问题。
一代代码必须是MATLAB代码。特别是,您无法使用自定义黑盒功能作为目标函数粉刺
.您可以使用编码器.CEVAL.
计算用C或c++编写的自定义函数。然而,自定义函数必须在MATLAB函数中调用。
粉刺
不支持金宝app问题
用于代码生成的参数。
[x, fval] = fmincon(问题)%不支持金宝app
您必须使用函数句柄,而不是字符串或字符名称指定目标函数和任何非线性约束函数。
x = fmincon (Aeq @fun x0, A, b,说真的,磅,乌兰巴托,@nonlcon)%的金宝app支持%不支持:f金宝appmincon(‘有趣的’,…)或fmincon(“有趣”,…)
所有粉刺
输入矩阵如一个
,Aeq
,磅
, 和UB.
必须充实,不能稀疏。您可以将稀疏矩阵转换为完整的完整的
函数。
的磅
和UB.
参数必须具有相同数量的条目x0
参数或必须为空[]
.
对于涉及嵌入式处理器的高级代码优化,还需要嵌入式编码器®许可证。
您必须包含以下选项粉刺
并使用optimoptions
.选项必须包括算法
选项,设置为“sqp”
或者“sqp-legacy”
.
选择= optimoptions (“fmincon”,“算法”,“sqp”);[x, fval exitflag] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项);
代码生成支持以下选项:金宝app
算法
——必须“sqp”
或者“sqp-legacy”
ConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
典型的
生成的代码有限错误检查选项。建议更新选项的方法是使用optimoptions
,而不是点符号。
选择= optimoptions (“fmincon”,“算法”,“sqp”);选择= optimoptions(选择,“MaxIterations”1 e4);%推荐选择。米axIterations = 1e4;%不推荐
不要从文件中加载选项。这样做可能会导致代码生成失败。相反,在代码中创建选项。
通常,如果指定不支持的选项,则在代码生成期间忽略该选项。金宝app但是,如果通过使用点表示法指定绘图函数或输出功能,则代码生成可以发出错误。有关可靠性,请仅指定支持的选项。金宝app
因为不支持输出函数和绘图函数,金宝app粉刺
不返回退出标志-1。
代码生成的粉刺
不包含bestfeasible
返回字段输出
结构。
例如,请参见用于优化基础的代码生成.
要并行运行,请设置“UseParallel”
选项真的
.
选择= optimoptions ('
solvername
','使用adplallel',true)
有关更多信息,请参见在优化工具箱中使用并行计算.
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。