求约束非线性多变量函数的最小值
非线性规划求解器进行求解。
查找最低问题所指定的问题
b和说真的是载体,一个和Aeq矩阵,c(x),量表信(x)返回载体的功能,以及f(x)是返回标量的函数。f(x),c(x),量表信(x)可以是非线性函数。
x,LB.,和UB.可以作为向量或矩阵传递;看到矩阵论据.
中的设计变量定义一组上下限x
= fmincon (乐趣
,X0.
,一个
,b
,Aeq
,说真的
,LB.
,UB.
)x
,所以解总是在这个范围内LB.
≤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 = beq
通过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 MathWorks,Inc。函数[c,ceq] = circlecon(x)c =(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”);
在设备磁盘上找到最少的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;一个= [];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”,'specifyobjectivegrient',真正的);
创建问题的其他输入。然后调用粉刺
.
有趣= @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
输出以及解决方案。
fun = @(x)1 + x(1)./(1 + x(2)) - 3 * x(1)。* x(2)+ x(2)。*(1 + x(1));磅= (0,0);乌兰巴托= [1,2];一个= [];b = [];Aeq = [];说真的= [];X0 = (lb + ub)/2;[x,fval] = fmincon(乐趣,x0,a,b,aeq,beq,lb,Ub)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
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
和输出
输出。
在单位圆盘上建立最小化罗森布罗克函数的问题,.首先创建一个代表非线性约束的函数。将其保存为命名的文件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: '…'
的exitflag
价值1
表示解是局部最小值。
的输出
结构报告有关解决方案过程的几个统计数据。特别是,它给出了迭代的数量output.iterations
,功能评估数量output.funcCount
的可行性输出.Constrviroation.
.
粉刺
可选地返回几个输出,您可以使用这些输出来分析报告的解决方案。
设置最小化单位磁盘上的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);
要求所有的粉刺
输出。
[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: '…'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。这可以节省内存。看到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 = 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
.
数据类型:双
LB.
- - - - - -下限下界,指定为实向量或实数组。如果元素的数量X0.
等于元素的个数LB.
,然后LB.
指定
x(我)> =磅(我)
对所有我
.
如果元素个数(磅)<元素个数(x0)
,然后LB.
指定
x(我)> =磅(我)
为1 <= I <= numel(lb)
.
如果元素较少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)c = ...%计算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 |
终止宽容 为 |
TypicalX |
典型的 的 |
UseParallel |
什么时候 |
Trust-Region-Reflective算法 | |
FunctionTolerance |
函数值的终止容限,一个正标量。默认值是 为 |
赫索斯·福克 |
如果 为 |
HessianMultiplyFcn |
海森乘法函数,指定为函数句柄。对于大规模的结构化问题,这个函数计算Hessian矩阵乘积 W = hmfun (Hinfo, Y) 在哪里 第一个参数与目标函数返回的第三个参数相同 [f, g, Hinfo] =乐趣(x)
请注意使用 看到Hessian乘法功能.看到稠密结构Hessian的最小化,线性等式了一个例子。 为 |
HessPattern | 有限差分的Hessian稀疏模式。集 使用 当结构未知时,未设置 |
MaxPCGIter | 最大预条件共轭梯度(PCG)迭代数,一个正标量。默认值是 |
precondbandwidth. | PCG预调制器的上带宽,非负整数。默认情况下,使用对角预处理(上限带宽为0)。对于某些问题,增加带宽可以减少PCG迭代次数。设置 |
子项产算法 |
确定如何计算迭代步骤。默认的, |
TolPCG | PCG迭代的终止公差,正标量。默认值是 |
主动集算法 | |
FunctionTolerance |
函数值的终止容限,一个正标量。默认值是 为 |
MaxSQPIter | 允许的最大SQP迭代次数,一个正整数。默认值是 |
RelLineSrchBnd | 直线搜索步长上的相对界限(实非负标量值)。总排水量x满足|Δx(我)|≤relLineSrchBnd·max(| . b0x(我) | |typicalx(我) |).该选项提供了对位移大小的控制x对于求解器采取的案例,措施被认为太大的步骤。默认值没有界限( |
RelLineSrchBndDuration | 指定的界限的迭代次数 |
Tolconsqp. | 内迭代SQP约束违背的终止容忍,一个正标量。默认值是 |
内部点算法 | |
HessianApproximation |
选择这个方法
请注意使用 为 |
赫索斯·福克 |
如果 为 |
HessianMultiplyFcn |
用户提供的函数,提供Hessian-idse矢量产品(参见Hessian乘法功能).传递一个函数句柄。 请注意使用 为 |
冬青 |
默认的 为 |
InitBarrierParam | 初始屏障值,正标量。有时它可能有助于尝试高于默认值的值 |
InitTrustRegionRadius | 信任区域的初始半径,一个正标量。在严格缩放的问题上,它可能有助于选择小于默认值的值 ,在那里n是变量的数量。 |
MaxProjCGIter | 对预定的共轭梯度迭代的数量的宽容(停止标准);这是一个内部迭代,而不是算法的迭代次数。此正整数具有默认值 |
ObjectiveLimit |
一个标量的公差(停止标准)。如果目标函数值小于 |
ScaleProblem |
为 |
子项产算法 |
确定如何计算迭代步骤。默认的, |
TolProjCG | 投影共轭梯度算法的相对公差(停止准则)这是针对内部迭代,而不是算法迭代。这个正标量的默认值为 |
tolprojcgabs. | 投影共轭梯度算法的绝对公差(停止准则)这是针对内部迭代,而不是算法迭代。这个正标量的默认值为 |
SQP和SQP遗留算法 | |
ObjectiveLimit |
一个标量的公差(停止标准)。如果目标函数值小于 |
ScaleProblem |
为 |
示例:选择= optimoptions(‘fmincon’,‘SpecifyObjectiveGradient’,真的,SpecifyConstraintGradient,真的)
问题
- - - - - -问题结构问题结构,指定为具有以下字段的结构:
字段名 | 条目 |
---|---|
|
目标函数 |
|
初始点x |
|
线性不等式约束的矩阵 |
|
线性不等式约束的矢量 |
|
线性等式约束的矩阵 |
|
线性等式约束的向量 |
LB. |
下界向量 |
UB. |
上限矢量 |
|
非线性约束函数 |
|
“fmincon” |
|
选择创建optimoptions |
你必须至少提供目标是
,X0.
,解算器
,和选项
田野在问题
结构。
得到a的最简单的方法问题
结构是从优化应用程序导出问题。
数据类型:结构体
fval
-目标函数在解处的值解决方案的目标函数值,作为实数返回。一般来说,fval
=有趣(x)
.
exitflag
- 理由粉刺
停了下来原因粉刺
已停止,返回为整数。
所有的算法: |
|
|
一阶的最优性措施小于 |
|
超过迭代次数 |
|
被输出函数或绘图函数停止。 |
|
没有找到可行点。 |
所有算法除了 |
|
|
的变化 |
|
|
|
目标函数值的变化小于 |
|
|
|
搜索方向的大小小于2* |
|
搜索方向方向导数值小于2* |
|
|
|
下面是当前迭代的目标函数 |
输出
- 有关优化过程的信息关于优化过程的信息,作为带有字段的结构返回:
迭代 |
迭代次数 |
funcCount |
函数计算次数 |
lssteplength |
线路搜索步骤的大小相对于搜索方向( |
constrviolation |
约束函数的最大值 |
步骤化 |
最后排水量的长度 |
算法 |
优化算法使用 |
cgiteration. |
PCG迭代总次数( |
firstorderopt |
一阶最优性的度量 |
消息 |
退出消息 |
研究生
-解处的梯度解决方案的梯度,作为真正的矢量返回。研究生
给出梯度乐趣
在点x (:)
.
黑森西
- 近似黑森州近似的黑森函数,返回实矩阵。为了…的意义黑森西
,请参阅黑森输出.
粉刺
是一种基于梯度的方法,用于处理目标函数和约束函数都是连续的且具有连续一阶导数的问题。
为“trust-region-reflective”
算法,您必须提供梯度乐趣
并设置'specifyobjectivegrient'
选项真实
.
的“trust-region-reflective”
算法不允许相等的上界和下界。例如,如果磅(2)= =乌兰巴托(2)
,粉刺
让这个错误:
信任区域反光算法中不允许等于上限和下限。改为使用内部点或SQP算法。
传递一个Hessian有两种不同的语法,传递一个也有两种不同的语法HessianMultiplyFcn
功能;一个for.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乘积。你必须提供目标函数的梯度,以及非线性约束的梯度(如果存在的话)。设置'specifyobjectivegrient'
选项真实
如果适用的话“SpecifyConstraintGradient”
选项真实
.你必须设置“SubproblemAlgorithm”
到目前为止“重心”
.
的内点
和trust-region-reflective
算法允许你提供一个Hessian乘法函数。此功能给出了Hessian时代矢量产品的结果,而不直接计算Hessian。这可以节省内存。有关详细信息,请参见Hessian乘法功能.
该算法在fmincon内点算法.有更广泛的描述[1],[41],和[9].
的“trust-region-reflective”
算法是一种子空间信赖域方法,基于中描述的内反射牛顿方法[3]和[4].每次迭代都涉及到使用预条件共轭梯度(PCG)方法求解一个大线性系统的近似解。见信赖域和预条件共轭梯度法的描述Fmincon Trust Region反光算法.
Byrd, R. H., J. C. Gilbert和J. Nocedal。“基于内点技术的非线性规划信赖域方法”。数学规划,Vol 89,第1,2000号,第149-185页。
Byrd, r.h., Mary E. Hribar和Jorge Nocedal。“大规模非线性规划的内点算法”。暹罗期刊优化,第9卷,第4,199,999页,第877-900页。
[3] Coleman,T. F.和Y. Li。“内部,信任区域方法,用于非线性最小化受限。”暹罗期刊优化, 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。
使用注意事项及限制:
粉刺
万博1manbetx支持使用代码生成使用Codegen.
功能或者MATLAB编码器™你一定有一个MATLAB编码器生成代码的许可。
目标硬件必须支持标准的双精度浮点计算。万博1manbetx您无法生成单精度或固定点计算的代码。
一代代码必须是MATLAB代码。特别是,您无法使用自定义黑盒功能作为目标函数粉刺
.您可以使用编码器.CEVAL.
评估在C或C ++中编码的自定义功能。但是,必须在MATLAB函数中调用自定义函数。
粉刺
不支持万博1manbetx问题
用于代码生成的参数。
[x, fval] = fmincon(问题)%不支持万博1manbetx
您必须使用函数句柄,而不是字符串或字符名称指定目标函数和任何非线性约束函数。
x = fmincon (Aeq @fun x0, A, b,说真的,磅,乌兰巴托,@nonlcon)%的万博1manbetx支持%不支持:f万博1manbetxmincon(‘有趣的’,…)或fmincon(“有趣”,…)
所有粉刺
输入矩阵如一个
,Aeq
,LB.
,和UB.
必须充实,不能稀疏。您可以将稀疏矩阵转换为完整的完整的
函数。
的LB.
和UB.
参数必须具有与X0.
参数或必须为空[]
.
对于涉及嵌入式处理器的高级代码优化,还需要嵌入式编码器®许可证。
您必须包含选项粉刺
并使用optimoptions
.选项必须包括算法
选项,设置为“sqp”
或者“sqp-legacy”
.
选择= optimoptions (“fmincon”,'算法',“sqp”);[x, fval exitflag] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项);
代码生成支持以下选项:万博1manbetx
算法
- 必须是“sqp”
或者“sqp-legacy”
ConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
TypicalX
生成的代码有限错误检查选项。所以建议的更新选项的方法是使用optimoptions
,而不是点符号。
选择= optimoptions (“fmincon”,'算法',“sqp”);选择= optimoptions(选择,“MaxIterations”1 e4);%推荐选择。米axIterations = 1e4;%不推荐
不要从文件中加载选项。这样做可能会导致代码生成失败。相反,在代码中创建选项。
通常,如果指定的选项不受支持,则在代码生成期间会静默地忽略该选项。万博1manbetx但是,如果您使用点表示法指定绘图函数或输出函数,则代码生成可能出错。对于可靠性,只指定支持的选项。万博1manbetx
因为不支持输出函数和绘图函数,万博1manbetx粉刺
不返回退出标志-1。
例如,请参见用于优化基础的代码生成.
要并行运行,请设置“UseParallel”
选项真实
.
选择= optimoptions ('
solvername.
','使用adplallel',true)
有关更多信息,请参见在优化工具箱中使用并行计算.
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。