主要内容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

图中包含一个轴对象。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,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

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

  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),执行agydF4y2Ba收缩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优化期刊gydF4y2Ba, Vol. 9, no . 1, 1998, pp. 112-147。gydF4y2Ba

相关的话题gydF4y2Ba