非线性函数优化gydF4y2Ba
单变量函数的最小化gydF4y2Ba
给定一个单一变量的数学函数,您可以使用gydF4y2BafminbndgydF4y2Ba
函数来查找函数在给定区间内的局部最小值。例如,考虑gydF4y2Bahumps.mgydF4y2Ba
函数,由MATLAB®提供。的图形如下图所示gydF4y2Ba的线条gydF4y2Ba
.gydF4y2Ba
X = -1:.01:2;Y =驼峰(x);情节(x, y)包含(gydF4y2Ba“x”gydF4y2Ba) ylabel (gydF4y2Ba“驼峰”(x)gydF4y2Ba网格)gydF4y2Ba在gydF4y2Ba
求最小值gydF4y2Ba的线条gydF4y2Ba
范围内的函数gydF4y2Ba(0.3, 1)gydF4y2Ba
,使用gydF4y2Ba
X = fminbnd(@humps,0.3,1)gydF4y2Ba
X = 0.6370gydF4y2Ba
可以通过使用查看解决方案过程的详细信息gydF4y2BaoptimsetgydF4y2Ba
方法创建选项gydF4y2Ba显示gydF4y2Ba
选项设置为gydF4y2Ba“通路”gydF4y2Ba
.将生成的选项传递给gydF4y2BafminbndgydF4y2Ba
.gydF4y2Ba
选项= optimset(gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“通路”gydF4y2Ba);X = fminbnd(@humps,0.3,1,options)gydF4y2Ba
函数函数计数x f(x)程序1 0.567376 12.9098 initial 2 0.732624 13.7746 gold 3 0.465248 25.1714 gold 4 0.644416 11.2693抛物线5 0.6413 11.2583抛物线6 0.637618 11.2529抛物线7 0.636985 11.2528抛物线8 0.637019 11.2528抛物线9 0.637052 11.2528抛物线优化终止:当前x满足使用OPTIONS的终止标准。TolX为1.000000e-04gydF4y2Ba
X = 0.6370gydF4y2Ba
迭代显示显示的当前值gydF4y2BaxgydF4y2Ba
函数值在gydF4y2Baf (x)gydF4y2Ba
每次进行函数求值。为gydF4y2BafminbndgydF4y2Ba
,一次函数求值对应一次算法迭代。最后一列显示了过程gydF4y2BafminbndgydF4y2Ba
在每次迭代中使用黄金分割搜索或抛物线插值。详细信息请参见gydF4y2Ba优化求解迭代显示gydF4y2Ba.gydF4y2Ba
多变量函数的最小化gydF4y2Ba
的gydF4y2BafminsearchgydF4y2Ba
函数类似于gydF4y2BafminbndgydF4y2Ba
除了它处理多变量函数。指定一个起始向量gydF4y2BaxgydF4y2Ba0gydF4y2Ba而不是开始间隔。gydF4y2BafminsearchgydF4y2Ba
尝试返回一个向量gydF4y2BaxgydF4y2Ba这是数学函数在起始向量附近的局部最小值。gydF4y2Ba
尝试gydF4y2BafminsearchgydF4y2Ba
,创建一个函数gydF4y2Bathree_vargydF4y2Ba
在三个变量中,gydF4y2BaxgydF4y2Ba
,gydF4y2BaygydF4y2Ba
,gydF4y2BazgydF4y2Ba
.gydF4y2Ba
函数b = three_var(v) x = v(1);Y = v(2);Z = v(3);B = x.²+ 2.5*sin(y) - z²*x²*y²;gydF4y2Ba
现在求这个函数的最小值gydF4y2BaX = -0.6gydF4y2Ba
,gydF4y2BaY = -1.2gydF4y2Ba
,gydF4y2BaZ = 0.135gydF4y2Ba
作为初始值。gydF4y2Ba
V = [-0.6,-1.2,0.135];A = fminsearch(@three_var,v) A = 0.0000 -1.5708 0.1803gydF4y2Ba
最大化的功能gydF4y2Ba
的gydF4y2BafminbndgydF4y2Ba
而且gydF4y2BafminsearchgydF4y2Ba
求解器试图最小化目标函数。如果你有一个最大化的问题,也就是这个形式的问题gydF4y2Ba
然后定义gydF4y2BaggydF4y2Ba(gydF4y2BaxgydF4y2Ba) = -gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)gydF4y2Ba,并最小化gydF4y2BaggydF4y2Ba.gydF4y2Ba
例如,求的最大值gydF4y2Ba谭(cos (gydF4y2BaxgydF4y2Ba))gydF4y2Ba附近gydF4y2BaxgydF4y2Ba= 5gydF4y2Ba评估:gydF4y2Ba
[x fval] = fminbnd (@ (x)谭(cos (x))、3、8)x = 6.2832 fval = -1.5574gydF4y2Ba
最大值为1.5574(报告的负数)gydF4y2BafvalgydF4y2Ba
),并发生在gydF4y2BaxgydF4y2Ba= 6.2832gydF4y2Ba.这个答案是正确的,因为五位数的最大值是gydF4y2BaTan (1) = 1.5574gydF4y2Ba,在gydF4y2BaxgydF4y2Ba= 2gydF4y2BaπgydF4y2Ba= 6.2832gydF4y2Ba.gydF4y2Ba
fminsearchgydF4y2Ba
算法gydF4y2Ba
fminsearchgydF4y2Ba
使用Lagarias等人描述的Nelder-Mead单纯形算法。gydF4y2Ba[1]gydF4y2Ba.的单纯形gydF4y2BangydF4y2Ba+ 1分gydF4y2BangydF4y2Ba维向量gydF4y2BaxgydF4y2Ba.该算法首先在初始猜想的周围构造一个单纯形gydF4y2BaxgydF4y2Ba0gydF4y2Ba每个组分加5%gydF4y2BaxgydF4y2Ba0gydF4y2Ba(gydF4y2Ba我gydF4y2Ba)gydF4y2BaxgydF4y2Ba0gydF4y2Ba.算法使用这些gydF4y2BangydF4y2Ba向量作为单纯形的元素加上gydF4y2BaxgydF4y2Ba0gydF4y2Ba.(该算法使用0.00025作为分量gydF4y2Ba我gydF4y2Ba如果gydF4y2BaxgydF4y2Ba0gydF4y2Ba(gydF4y2Ba我gydF4y2Ba) = 0gydF4y2Ba)。然后,算法按照以下步骤反复修改单纯形。gydF4y2Ba
请注意gydF4y2Ba
的关键字gydF4y2BafminsearchgydF4y2Ba
迭代显示出现在gydF4y2Ba大胆的gydF4y2Ba说明之后的步骤。gydF4y2Ba
让gydF4y2BaxgydF4y2Ba(gydF4y2Ba我gydF4y2Ba)表示当前单纯形中的点列表,gydF4y2Ba我gydF4y2Ba= 1,…,gydF4y2BangydF4y2Ba+ 1。gydF4y2Ba
从最小函数值开始排列单纯形中的点gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1))至最高gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)。在迭代的每一步,算法都会丢弃当前最坏的点gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1),并接受另一个点进入单纯形。[或者,在下面第7步的情况下,它改变了一切gydF4y2BangydF4y2Ba以上值的点gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1))。gydF4y2Ba
生成gydF4y2Ba反映了gydF4y2Ba点gydF4y2Ba
rgydF4y2Ba= 2gydF4y2Ba米gydF4y2Ba- - - - - -gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1),gydF4y2Ba (1)gydF4y2Ba 在哪里gydF4y2Ba
米gydF4y2Ba=ΣgydF4y2BaxgydF4y2Ba(gydF4y2Ba我gydF4y2Ba) /gydF4y2BangydF4y2Ba,gydF4y2Ba我gydF4y2Ba= 1…gydF4y2BangydF4y2Ba,gydF4y2Ba (2)gydF4y2Ba 和计算gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba).gydF4y2Ba
如果gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1)≤)gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba)
fgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba)),接受gydF4y2BargydF4y2Ba并终止这个迭代。gydF4y2Ba反映gydF4y2Ba 如果gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba)
fgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1)),计算膨胀点gydF4y2Ba年代gydF4y2Ba 年代gydF4y2Ba=gydF4y2Ba米gydF4y2Ba+ 2 (gydF4y2Ba米gydF4y2Ba- - - - - -gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)),gydF4y2Ba (3)gydF4y2Ba 和计算gydF4y2BafgydF4y2Ba(gydF4y2Ba年代gydF4y2Ba).gydF4y2Ba
如果gydF4y2BafgydF4y2Ba(gydF4y2Ba年代gydF4y2Ba)
fgydF4y2Ba(gydF4y2BargydF4y2Ba),接受gydF4y2Ba年代gydF4y2Ba并终止迭代。gydF4y2Ba扩大gydF4y2Ba 否则,接受gydF4y2BargydF4y2Ba并终止迭代。gydF4y2Ba反映gydF4y2Ba
如果gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba)≥gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba),执行agydF4y2Ba收缩gydF4y2Ba之间的gydF4y2Ba米gydF4y2Ba,要么gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)或gydF4y2BargydF4y2Ba,取决于哪个目标函数值较低。gydF4y2Ba
如果gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba)
fgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)gydF4y2Ba (即,gydF4y2BargydF4y2Ba比gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)),计算gydF4y2BacgydF4y2Ba=gydF4y2Ba米gydF4y2Ba+ (gydF4y2BargydF4y2Ba- - - - - -gydF4y2Ba米gydF4y2Ba) / 2gydF4y2Ba (4)gydF4y2Ba 和计算gydF4y2BafgydF4y2Ba(gydF4y2BacgydF4y2Ba).如果gydF4y2BafgydF4y2Ba(gydF4y2BacgydF4y2Ba)
fgydF4y2Ba(gydF4y2BargydF4y2Ba)gydF4y2Ba ,接受gydF4y2BacgydF4y2Ba并终止迭代。gydF4y2Ba合同外的gydF4y2Ba否则,请继续执行步骤7(收缩)。gydF4y2Ba
如果gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba)≥gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)gydF4y2Ba,计算gydF4y2Ba
ccgydF4y2Ba=gydF4y2Ba米gydF4y2Ba+ (gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1) -gydF4y2Ba米gydF4y2Ba) / 2gydF4y2Ba (5)gydF4y2Ba 和计算gydF4y2BafgydF4y2Ba(gydF4y2BaccgydF4y2Ba).如果gydF4y2BafgydF4y2Ba(gydF4y2BaccgydF4y2Ba)
fgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)gydF4y2Ba ,接受gydF4y2BaccgydF4y2Ba并终止迭代。gydF4y2Ba合同内gydF4y2Ba否则,请继续执行步骤7(收缩)。gydF4y2Ba
计算gydF4y2BangydF4y2Ba点gydF4y2Ba
vgydF4y2Ba(gydF4y2Ba我gydF4y2Ba) =gydF4y2BaxgydF4y2Ba(1) + (gydF4y2BaxgydF4y2Ba(gydF4y2Ba我gydF4y2Ba) - - -gydF4y2BaxgydF4y2Ba(1) / 2gydF4y2Ba (6)gydF4y2Ba 和计算gydF4y2BafgydF4y2Ba(gydF4y2BavgydF4y2Ba(gydF4y2Ba我gydF4y2Ba)),gydF4y2Ba我gydF4y2Ba= 2,…,gydF4y2BangydF4y2Ba+ 1。下一次迭代的单纯形是gydF4y2BaxgydF4y2Ba(1),gydF4y2BavgydF4y2Ba(2)、…gydF4y2BavgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)。gydF4y2Ba缩小gydF4y2Ba
下图显示的点gydF4y2BafminsearchgydF4y2Ba
可以在程序中计算,以及每个可能的新单纯形。原始的单纯型有一个粗体轮廓。迭代继续进行,直到满足停止条件。gydF4y2Ba
参考gydF4y2Ba
[1]拉加利亚斯,J. C., J. A.里德,M. H.赖特,P. E.赖特。低维中Nelder-Mead单纯形方法的收敛性gydF4y2BaSIAM优化期刊gydF4y2Ba, Vol. 9, no . 1, 1998, pp. 112-147。gydF4y2Ba
相关的话题gydF4y2Ba
- 优化故障排除和提示gydF4y2Ba
- 非线性优化gydF4y2Ba(优化工具箱)gydF4y2Ba
- 优化曲线拟合gydF4y2Ba