主要内容gydF4y2Ba

优化非线性函数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

图中包含一个axes对象。axis对象包含一个类型为line的对象。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选项)gydF4y2Ba
函数计数x f(x)过程1 0.567376 12.9098 initial 2 0.732624 13.7746 golden 3 0.465248 25.1714 golden 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满足终止标准使用选项。TolX 1.000000 e-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.000 -1.5708 0.1803gydF4y2Ba

最大化的功能gydF4y2Ba

的gydF4y2BafminbndgydF4y2Ba而且gydF4y2BafminsearchgydF4y2Ba求解者试图使目标函数最小化。如果你有一个最大化的问题,也就是形式的问题gydF4y2Ba

马克斯gydF4y2Ba xgydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba ,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.这个答案是正确的,因为,到五位数,最大值是gydF4y2Ba(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

  1. 让gydF4y2BaxgydF4y2Ba(gydF4y2Ba我gydF4y2Ba)表示当前单纯形中的点列表,gydF4y2Ba我gydF4y2Ba= 1,…,gydF4y2BangydF4y2Ba+ 1。gydF4y2Ba

  2. 将单纯形中的点从函数值最低开始排序gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1)最高gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)。在迭代的每一步,算法丢弃当前最坏点gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1),并接受另一个点进入单纯形。或者,在下面的第7步中,它改变了一切gydF4y2BangydF4y2Ba以上值的点gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1))。gydF4y2Ba

  3. 生成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

  4. 如果gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1)≤)gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba) fgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba)),接受gydF4y2BargydF4y2Ba然后终止这个迭代。gydF4y2Ba反映gydF4y2Ba

  5. 如果gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba) fgydF4y2Ba(gydF4y2BaxgydF4y2Ba(1)),计算展开点gydF4y2Ba年代gydF4y2Ba

    年代gydF4y2Ba=gydF4y2Ba米gydF4y2Ba+ 2 (gydF4y2Ba米gydF4y2Ba- - - - - -gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)),gydF4y2Ba (3)gydF4y2Ba

    和计算gydF4y2BafgydF4y2Ba(gydF4y2Ba年代gydF4y2Ba).gydF4y2Ba

    1. 如果gydF4y2BafgydF4y2Ba(gydF4y2Ba年代gydF4y2Ba) fgydF4y2Ba(gydF4y2BargydF4y2Ba),接受gydF4y2Ba年代gydF4y2Ba并终止迭代。gydF4y2Ba扩大gydF4y2Ba

    2. 否则,接受gydF4y2BargydF4y2Ba并终止迭代。gydF4y2Ba反映gydF4y2Ba

  6. 如果gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba)≥gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba),执行gydF4y2Ba收缩gydF4y2Ba之间的gydF4y2Ba米gydF4y2Ba,要么gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)或gydF4y2BargydF4y2Ba,取决于哪个目标函数值较低。gydF4y2Ba

    1. 如果gydF4y2BafgydF4y2Ba(gydF4y2BargydF4y2Ba) fgydF4y2Ba(gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1)gydF4y2Ba(即,gydF4y2BargydF4y2Ba比gydF4y2BaxgydF4y2Ba(gydF4y2BangydF4y2Ba+ 1))计算gydF4y2Ba

      cgydF4y2Ba=gydF4y2Ba米gydF4y2Ba+ (gydF4y2BargydF4y2Ba- - - - - -gydF4y2Ba米gydF4y2Ba) / 2gydF4y2Ba (4)gydF4y2Ba

      和计算gydF4y2BafgydF4y2Ba(gydF4y2BacgydF4y2Ba).如果gydF4y2BafgydF4y2Ba(gydF4y2BacgydF4y2Ba) fgydF4y2Ba(gydF4y2BargydF4y2Ba)gydF4y2Ba,接受gydF4y2BacgydF4y2Ba并终止迭代。gydF4y2Ba合同外的gydF4y2Ba

      否则,继续执行步骤7(收缩)。gydF4y2Ba

    2. 如果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

  7. 计算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

fminsearch算法的图形表示,显示反射、展开、收缩和收缩点。gydF4y2Ba

参考gydF4y2Ba

[1]拉加里亚斯,J. C., J. A.里德斯,M. H.赖特,P. E.赖特。"低维Nelder-Mead单纯形法的收敛性"gydF4y2BaSIAM优化杂志gydF4y2Ba1998年,第9卷第1期,第112-147页。gydF4y2Ba

相关的话题gydF4y2Ba

Baidu
map