找到最小约束的非线性多变量函数
非线性规划求解器进行求解。
找到指定的最小的问题
b和说真的是向量,一个和Aeq矩阵,c(x),量表信(x)函数返回向量,f(x)是一个函数,它返回一个标量。f(x),c(x),量表信(x)可以是非线性函数。
x,磅,乌兰巴托可以通过向量或矩阵;看到矩阵的参数。
定义了一组设计变量的上下界限x
= fmincon (有趣的
,x0
,一个
,b
,Aeq
,说真的
,磅
,乌兰巴托
)x
,这样的解决方案总是范围磅
≤x
≤乌兰巴托
。如果不存在平等,集Aeq = []
和说真的= []
。如果x(我)
下面是无界的,准备好了吗磅(i) =负无穷
,如果x(我)
上面是无界的,准备好了吗乌兰巴托(i) =正无穷
。
请注意
如果指定的输入范围不一致的问题,fmincon
抛出一个错误。在这种情况下,输出x
是x0
和fval
是[]
。
为默认“内点”
算法,fmincon
集的组成部分x0
违反的界限磅≤x≤乌兰巴托
或等于绑定,绑定的内部区域。为“trust-region-reflective”
算法,fmincon
集违反组件绑定的内部区域。为其他算法,fmincon
违反组件设置为最接近的束缚。组件,尊重界限并不改变。看到迭代可以违反约束。
的最小值。当有一个线性不等式约束的功能。
设置目标函数有趣的
是。的函数。。最小化的功能是众所周知的困难。其最低目标值0点(1,- 1)。有关更多信息,请参见解决一个约束非线性问题,Solver-Based。
有趣= @ (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
找到。海涅的最小值函数当有线性不等式约束和线性等式约束。
设置目标函数有趣的
是。的函数。
有趣= @ (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 =(磅+乌兰巴托)/ 2;
解决这个问题。
x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×21.0000 - 2.0000
不同初始点可能会导致一个不同的解决方案。
x0 = x0/5;x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×2106×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公司。函数测查[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
设置选项来查看迭代发生时和使用不同的算法。
观察fmincon
解决方案过程中,设置显示
选项“通路”
。另外,试一试“sqp”
算法,有时比默认更快或更准确“内点”
算法。
选择= optimoptions (“fmincon”,“显示”,“通路”,“算法”,“sqp”);
找到。海涅的功能单元的最小磁盘,。首先创建一个函数,它代表了非线性约束。保存这个文件命名unitdisk.m
在你的MATLAB®路径。
函数测查[c] = unitdisk c (x) = 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 (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
Iter Func-count Fval可行性步长一阶最优步规范0 3 e + 00 1.000000 0.000 1.000 e + e + 00 00 12 0.000 2.000 e + e + 00 00 1 2.353 1.176 8.913011 e-01 0.000 e + 00 e-01 e-01 1.107 e + 01 2 22 8.047847 e-01 0.000 e + 00 8.235 e-02 1.900 e-01 1.330 e + 3 28 4.197517 e-01 0.000 e + 00 3.430 e-01 1.217 e-01 6.172 e + 00 4 31 e-01 2.733703 0.000 5.705 5.254 1.000 e + e + 00 00 e-02 e-01 5 34 e-01 2.397111 0.000 3.164 7.498 1.000 e + e + 00 00 e-02 e + 00 6 37 e-01 2.036002 0.000 3.106 5.960 1.000 e + e + 00 00 e-02 e + 00 7 40 1.164353 e-01 0.000 1.459 1.000 e + e + 00 00 e-01 1.059 e + 00 8 43 1.161753 e-01 0.000 1.754 1.000 e + e + 00 00 e-01 7.383 e + 00 9 46 5.901601 e-02 0.000 7.278 1.547 1.000 e + e + 00 00 e-02 e-01 10 49 4.533081 e-02 2.898 e 03 1.000 e + 00 2.225 4.567454 5.393 1.252 e-02 e-01 11 52 e-02 e-06 1.000 e + 00 1.492 e 03 1.679 e 03 12 55 4.567481 e-02 4.424 e-12 1.000 e + 00 2.095 e-06 1.501 e-05 13 58 4.567481 e-02 0.000 1.406 2.212 1.000 e + e + 00 00 e-12 e-05局部最小值。约束满足。fmincon停止因为当前步骤的大小小于一步尺寸公差的值和约束满足约束的值公差内。x = 0.7864 - 0.6177
包括评价目标函数的梯度更快或更可靠的计算。
包括梯度评价作为目标函数条件化输出文件。有关详细信息,请参见包括梯度和麻布。目标函数。函数,
的梯度
函数(f, g) = rosenbrockwithgrad (x)% f计算目标f = 100 * (x (2) - (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”,真正的);
创建的其他投入的问题。然后调用fmincon
。
有趣= @rosenbrockwithgrad;x0 = [1, 2];一个= [];b = [];Aeq = [];说真的= [];磅= (2,2);乌兰巴托= (2,2);nonlcon = [];x = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。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可行性步长一阶最优步规范0 3 e + 00 1.000000 0.000 1.000 e + e + 00 00 12 0.000 2.000 e + e + 00 00 1 2.353 1.176 8.913011 e-01 0.000 e + 00 e-01 e-01 1.107 e + 01 2 22 8.047847 e-01 0.000 e + 00 8.235 e-02 1.900 e-01 1.330 e + 3 28 4.197517 e-01 0.000 e + 00 3.430 e-01 1.217 e-01 6.172 e + 00 4 31 e-01 2.733703 0.000 5.705 5.254 1.000 e + e + 00 00 e-02 e-01 5 34 e-01 2.397111 0.000 3.164 7.498 1.000 e + e + 00 00 e-02 e + 00 6 37 e-01 2.036002 0.000 3.106 5.960 1.000 e + e + 00 00 e-02 e + 00 7 40 1.164353 e-01 0.000 1.459 1.000 e + e + 00 00 e-01 1.059 e + 00 8 43 1.161753 e-01 0.000 1.754 1.000 e + e + 00 00 e-01 7.383 e + 00 9 46 5.901601 e-02 0.000 7.278 1.547 1.000 e + e + 00 00 e-02 e-01 10 49 4.533081 e-02 2.898 e 03 1.000 e + 00 2.225 4.567454 5.393 1.252 e-02 e-01 11 52 e-02 e-06 1.000 e + 00 1.492 e 03 1.679 e 03 12 55 4.567481 e-02 4.424 e-12 1.000 e + 00 2.095 e-06 1.501 e-05 13 58 4.567481 e-02 0.000 1.406 2.212 1.000 e + e + 00 00 e-12 e-05局部最小值。约束满足。fmincon停止因为当前步骤的大小小于一步尺寸公差的值和约束满足约束的值公差内。
x =1×20.7864 - 0.6177
迭代显示和解决方案是一样的默认的选项。
下面的代码创建unitdisk
函数。
函数测查[c] = unitdisk c (x) = x (1) ^ 2 + x (2) ^ 2 - 1;测查= [];结束
调用fmincon
与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 =(磅+乌兰巴托)/ 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×2106×0.4000 - 0.4000
fval2 = 1.0000
这个解决方案有一个目标函数的值fval2
= 1,高于第一个值fval
= -0.6667。第一个解决方案x
局部最小目标函数值较低。
轻松地检查解决方案的质量,要求exitflag
和输出
输出。
设置的问题最小化。磁盘上单位的功能,。首先创建一个函数,它代表了非线性约束。保存这个文件命名unitdisk.m
在你的MATLAB®路径。
函数测查[c] = unitdisk c (x) = 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输出=结构体字段:迭代:24 funcCount: 84 constrviolation: 0 stepsize: 6.9162 e-06算法:“内点”firstorderopt: 2.4373 e-08 cgiterations: 4消息:“……“bestfeasible (1 x1结构):
的exitflag
价值1
表明,该解决方案是一个局部最小值。
的输出
结构报告几个统计信息解决方案的过程。特别是,它给出了迭代的数量output.iterations
、功能评估output.funcCount
,可行性output.constrviolation
。
fmincon
选择返回几个输出,您可以使用分析报告的解决方案。
设置的问题最小化。单位磁盘上的功能。首先创建一个函数,它代表了非线性约束。保存这个文件命名unitdisk.m
在你的MATLAB®路径。
函数测查[c] = unitdisk c (x) = 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、输出λ,校友,黑森]= fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。x = 0.7864 - 0.6177 fval = 0.0457 exitflag = 1输出=结构体字段:迭代:24 funcCount: 84 constrviolation: 0 stepsize: 6.9162 e-06算法:“内点”firstorderopt: 2.4373 e-08 cgiterations: 4消息:“……“bestfeasible (1 x1结构):λ=结构体与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-by-3数组,那么fmincon
通过x
来有趣的
作为一个5-by-3数组。然而,fmincon
增加线性约束矩阵一个
或Aeq
与x
转换后x
的列向量x (:)
。
指定有趣的
作为一个函数处理一个文件:
x = fmincon (@myfun, x0, A, b)
在哪里myfun
MATLAB是一种®等功能
函数f = myfun f (x) =…在x %计算函数值
您还可以指定有趣的
作为一个匿名函数的函数处理:
x = fmincon (@ (x)规范(x) ^ 2, x0, A, b);
如果你能计算的梯度有趣的
和的SpecifyObjectiveGradient
选项设置为真正的
设定的,
选择= optimoptions (“fmincon”,“SpecifyObjectiveGradient”,真正的)
有趣的
梯度向量必须返回呢g (x)
在第二个输出参数。
如果你也可以计算海赛矩阵和的HessianFcn
选项设置为“目标”
通过optimoptions
和的算法
选择是“trust-region-reflective”
,有趣的
必须返回黑森的值H (x)
对称矩阵,在第三输出参数。有趣的
能给一个稀疏的麻绳。看到海赛为fminunc信赖域或fmincon trust-region-reflective算法获取详细信息。
如果你也可以计算海赛矩阵和算法
选项设置为“内点”
,都有一个不同的方式通过黑森fmincon
。有关更多信息,请参见海赛为fmincon内点算法。例如使用符号数学工具箱™计算梯度和黑森,明白了计算梯度,并使用符号数学工具箱™麻布。
的内点
和trust-region-reflective
算法允许您提供一个黑森乘法函数。这个函数给出的结果Hessian-times-vector产品没有直接计算的麻绳。这可以节省内存。看到黑森乘法函数。
例子:有趣= @ (x) sin (x (1)) * cos (x (2))
数据类型:字符
|function_handle
|字符串
一个
- - - - - -线性不等式约束线性不等式约束,指定为一个真正的矩阵。一个
是一个米
——- - - - - -N
矩阵,米
不平等的数量,N
是变量的数量(数量的元素x0
)。对于大型问题,通过一个
作为一个稀疏矩阵。
一个
编码米
线性不等式
A * x < =
,
在哪里x
的列向量N
变量x (:)
,b
是一个列向量米
元素。
例如,考虑这些不平等:
x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30日
输入以下命令来指定不等式约束条件。
= [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
3x1+ 4x2≤20
5x1+ 6x2≤30。
输入以下命令来指定不等式约束条件。
= [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我< < = =元素个数(磅)
。
如果磅
有更少的元素比x0
,解决者发出警告。
例子:指定,所有的x分量都是积极的,使用磅= 0(大小(x0))
。
数据类型:双
乌兰巴托
- - - - - -上界上界,指定为一个真正的向量或真正的数组。如果元素的数量x0
等于元素的数量乌兰巴托
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有我
。
如果元素个数(乌兰巴托)<元素个数(x0)
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
为1我< < = =元素个数(乌兰巴托)
。
如果乌兰巴托
有更少的元素比x0
,解决者发出警告。
例子:指定所有的x分量都小于1,使用乌兰巴托= 1(大小(x0))
。
数据类型:双
nonlcon
- - - - - -非线性约束非线性约束条件,指定为一个函数处理或函数名。nonlcon
是一个函数,它接受一个向量或数组x
并返回两个数组,c (x)
和量表(x)
。
c (x)
非线性不等式约束的数组x
。fmincon
试图满足
c (x) < = 0
所有条目的c
。
量表(x)
是非线性等式约束的数组x
。fmincon
试图满足
量表(x) = 0
所有条目的量表信
。
例如,
x = fmincon (Aeq @myfun x0, A, b,说真的,磅,乌兰巴托,@mycon)
在哪里mycon
是一个MATLAB函数如
功能测查[c] = mycon c (x) =…%计算非线性不等式测查x =…在x %计算非线性等式。
SpecifyConstraintGradient
选择是真正的
设定的,选择= optimoptions (‘fmincon’,‘SpecifyConstraintGradient’,真的)
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 |
指定一个或多个用户定义的函数,每个迭代的优化函数调用。通过一个函数处理或处理单元阵列的功能。默认是没有( |
PlotFcn |
情节在算法执行时进步的各种措施;从预定义的情节或编写自己的选择。通过一个内置的函数名,函数处理,或单元阵列的内置函数名或函数处理。自定义绘制函数,通过函数处理。默认是没有(
自定义函数使用相同的语法作为输出函数。看到输出函数优化工具箱™和输出函数和情节函数的语法。 为 |
SpecifyConstraintGradient |
梯度的非线性约束函数定义的用户。当设置为默认值, 为 |
SpecifyObjectiveGradient |
由用户定义的目标函数的梯度。看到的描述 为 |
StepTolerance |
终止上公差 为 |
TypicalX |
典型的 的 |
UseParallel |
当 |
Trust-Region-Reflective算法 | |
FunctionTolerance |
终止公差函数值,一个积极的标量。默认值是 为 |
HessianFcn |
如果 为 |
HessianMultiplyFcn |
黑森乘法函数,指定为一个函数处理。大规模的结构性问题,这个函数计算海赛矩阵产品 W = hmfun (Hinfo, Y) 在哪里 第一个参数是一样的第三个参数返回的目标函数 [f, g, Hinfo] =乐趣(x)
请注意 使用 看到黑森乘法函数。看到最小化茂密的结构化的麻绳,线性等式了一个例子。 为 |
HessPattern | 稀疏的黑森有限差分模式。集 使用 当结构是未知的,不确定 |
MaxPCGIter | 最大数量的预处理共轭梯度迭代(PCG),一个积极的标量。默认值是 |
PrecondBandWidth | 上的带宽预调节器PCG,一个非负整数。默认情况下,对角预处理(0)上带宽。用于一些问题,增加带宽减少了PCG迭代的数量。设置 |
SubproblemAlgorithm |
确定迭代步骤是如何计算的。默认的, |
TolPCG | 在PCG迭代终止宽容,积极的标量。默认值是 |
有效集算法 | |
FunctionTolerance |
终止公差函数值,一个积极的标量。默认值是 为 |
MaxSQPIter | 最大数量的SQP迭代允许,一个正整数。默认值是 |
RelLineSrchBnd | 相对绑定(一个真正的负的标量值)的搜索步长。的总位移x满足|Δx(我)|≤relLineSrchBnd·马克斯(|x(我)| |typicalx(我)|)。此选项提供了控制位移的大小x在解算器需要的步骤被认为是太大。默认是没有界限( |
RelLineSrchBndDuration | 绑定中指定的迭代次数 |
TolConSQP | 在内部迭代终止宽容SQP约束违反,积极的标量。默认值是 |
内点算法 | |
BarrierParamUpdate |
指定如何
这个选项会影响速度和收敛的解算器,但效果并不容易预测。 |
EnableFeasibilityMode |
当 可行性模式通常表现更好 |
HessianApproximation |
指定如何
请注意 使用 为 |
HessianFcn |
如果 为 |
HessianMultiplyFcn |
用户提供的函数,给出了Hessian-times-vector产品(见黑森乘法函数)。通过一个函数处理。 请注意 使用 为 |
HonorBounds |
默认的 为 |
InitBarrierParam | 最初的障碍价值,积极的标量。有时它可能有助于尝试一个高于默认值 |
InitTrustRegionRadius | 最初的信赖域半径,一个积极的标量。比例严重问题这可能帮助选择一个值小于默认 ,在那里n是变量的数量。 |
MaxProjCGIter | 公差(停止准则)的数量预计共轭梯度迭代;这是一个内部迭代,而不是算法的迭代次数。这个正整数的默认值 |
ObjectiveLimit |
宽容(停止准则)是一个标量。如果目标函数值 |
ScaleProblem |
为 |
SubproblemAlgorithm |
确定迭代步骤是如何计算的。默认的, |
TolProjCG | 一个相对宽容预计共轭梯度算法(停止准则);这是一种内在的迭代,迭代算法。这种积极的标量的违约 |
TolProjCGAbs | 绝对的宽容(停止准则)预计共轭梯度算法;这是一种内在的迭代,迭代算法。这种积极的标量的违约 |
SQP和SQP遗产算法 | |
ObjectiveLimit |
宽容(停止准则)是一个标量。如果目标函数值 |
ScaleProblem |
为 |
例子:选择= optimoptions (‘fmincon’,‘SpecifyObjectiveGradient’,真的,SpecifyConstraintGradient,真的)
问题
- - - - - -问题的结构问题的结构,指定为一个结构有以下字段:
字段名 | 条目 |
---|---|
|
目标函数 |
|
初始点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
让这个错误:
平等的上界和下界不允许trust-region-reflective算法。使用行内点或SQP算法。
通过黑森有两种不同的语法,并为通过有两种不同的语法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
有限差分计算Hessian-times-vector产品的梯度(s)。你必须供应目标函数的梯度,并且梯度的非线性约束(如果存在的话)。设置“SpecifyObjectiveGradient”
选项真正的
,如果适用的话“SpecifyConstraintGradient”
选项真正的
。你必须设置“SubproblemAlgorithm”
来“重心”
。
的内点
和trust-region-reflective
算法允许您提供一个黑森乘法函数。这个函数给出的结果Hessian-times-vector产品,没有直接计算的麻绳。这可以节省内存。有关详细信息,请参见黑森乘法函数。
这个算法中描述fmincon内点算法。有更广泛的描述[1],[41],[9]。
的fmincon
“sqp”
和“sqp-legacy”
算法类似“激活集”
算法中描述激活集优化。fmincon SQP算法描述的主要差异。总之,这些差异是:
的“trust-region-reflective”
子空间算法是一种信赖域方法和基于interior-reflective牛顿方法中描述[3]和[4]。每个迭代都包括近似解大型线性系统使用条件共轭梯度法(PCG)。看到信赖域和预处理共轭梯度法的描述fmincon信赖域反射算法。
的优化住编辑任务提供了一个可视化界面fmincon
。
[1]伯德,r . H。,J. C. Gilbert, and J. Nocedal. “A Trust Region Method Based on Interior Point Techniques for Nonlinear Programming.”数学规划,第89卷,1号,2000年,页149 - 185。
[2]伯德,r . H。,米ary E. Hribar, and Jorge Nocedal. “An Interior Point Algorithm for Large-Scale Nonlinear Programming.”暹罗杂志上优化,9卷,第4期,1999年,页877 - 900。
[3]科尔曼,t·f·李和y。“内部,信赖域方法对非线性最小化范围。”暹罗杂志上优化》第六卷,1996年,页418 - 445。
[4]科尔曼,t·f·李和y。“大规模非线性最小化的反光牛顿方法的收敛范围。”数学规划2号,卷。67年,1994年,页189 - 224。
吉尔[5],p E。,W. Murray, and M. H. Wright.实用的优化、伦敦、学术出版社,1981年。
[6]汉,s p .“一个非线性规划的全局收敛的方法。”优化理论与应用》杂志上22卷,1977年,页297。
[7]鲍威尔,m . j . d .“非线性约束优化计算的快速算法。”数值分析艾德。g·a·沃森数学课堂笔记斯普林格出版社,630卷,1978。
[8]鲍威尔,m . j . d .“变量度量方法的收敛非线性约束优化计算。”非线性规划3(o . l . Mangasarian r·r·迈耶和s·m·罗宾逊,eds),学术出版社,1978年。
[9]华尔兹,r。,J. L. Morales, J. Nocedal, and D. Orban. “An interior algorithm for nonlinear optimization that combines line search and trust region steps.”数学规划,第107卷,3号,2006年,页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 (Aeq @fun x0, A, b,说真的,磅,乌兰巴托,@nonlcon)%的金宝app支持%不支持:f金宝appmincon(‘有趣的’,…)或fmincon(“有趣”,…)
所有fmincon
输入矩阵等一个
,Aeq
,磅
,乌兰巴托
必须完整,而不是稀疏。稀疏矩阵转换为可以充分利用完整的
函数。
的磅
和乌兰巴托
参数必须有相同数量的条目的x0
参数或必须是空的[]
。
对于高级代码优化包括嵌入式处理器,您还需要嵌入式编码器®许可证。
你必须包括选项fmincon
并指定使用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
TypicalX
生成的代码错误检查选项有限。推荐的方式来更新一个选项是使用optimoptions
,而不是点符号。
选择= optimoptions (“fmincon”,“算法”,“sqp”);选择= optimoptions(选择,“MaxIterations”1 e4);%推荐选择。米axIterations = 1e4;%不推荐
不从文件加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。
通常,如果您指定一个选项不支持,在代码生成选项是默默地忽略。金宝app然而,如果你指定一个情节或输出函数通过使用点符号,代码生成可以发出一个错误。对于可靠性、指定仅支持选项。金宝app
因为输出函数和情节功能不支持,金宝appfmincon
不返回退出标志1。
代码生成的fmincon
不包含bestfeasible
在返回输出
结构。
例如,看到的代码生成优化的基础知识。
如果dispone di una versione modificata di questo esempio。Desideri aprire questo esempio con le modifiche星期二吗?
海脂肪clic苏联合国collegamento切corrisponde questo第一MATLAB:
Esegui il第一inserendolo所以nella隙缝di第一MATLAB。我浏览器web非supportano金宝app comandi MATLAB。
你也可以从下面的列表中选择一个网站:
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。