主要内容GydF4y2Ba

优化非线性功能GydF4y2Ba

最小化一个变量的函数GydF4y2Ba

给定单个变量的数学函数,可以使用GydF4y2BaFMINBNDGydF4y2Ba在给定间隔中找到函数的本地最小值的功能。例如,考虑GydF4y2Ba驼峰.m.GydF4y2Ba功能,提供MATLAB®。下图显示了图表GydF4y2Ba驼峰GydF4y2Ba。GydF4y2Ba

x = -1:.01:2;y =驼峰(x);plot(x,y)xlabel(GydF4y2Ba'X'GydF4y2Ba)ylabel(GydF4y2Ba'驼峰(x)'GydF4y2Ba) 网格GydF4y2Ba上GydF4y2Ba

图包含轴。轴包含类型线的对象。GydF4y2Ba

找到最少的GydF4y2Ba驼峰GydF4y2Ba范围内的功能GydF4y2Ba(0.3,1)GydF4y2Ba, 用GydF4y2Ba

x = fminbnd(@ humps,0.3,1)GydF4y2Ba
x = 0.6370.GydF4y2Ba

您可以通过使用查看解决方案过程的详细信息GydF4y2Ba优化集GydF4y2Ba创建选项GydF4y2Ba展示GydF4y2Ba选项设置为GydF4y2Ba'iter'GydF4y2Ba。将结果选项传递给GydF4y2BaFMINBNDGydF4y2Ba。GydF4y2Ba

选项= OptimSet(GydF4y2Ba'展示'GydF4y2Ba那GydF4y2Ba'iter'GydF4y2Ba);X = FMINBND(@驼峰,0.3,1,选项)GydF4y2Ba
Func-count x f(x) Procedure 1 0.567376 12.9098 initial 2 0.732624 13.7746 golden 3 0.465248 25.1714 golden 4 0.644416 11.2693 parabolic 5 0.6413 11.2583 parabolic 6 0.637618 11.2529 parabolic 7 0.636985 11.2528 parabolic 8 0.637019 11.2528 parabolic 9 0.637052 11.2528 parabolic Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04
x = 0.6370.GydF4y2Ba

迭代显示屏显示当前值GydF4y2BaXGydF4y2Ba和功能值在GydF4y2Baf(x)GydF4y2Ba每次发生函数评估。为了GydF4y2BaFMINBNDGydF4y2Ba,一个功能评估对应于算法的一次迭代。最后一列显示了过程GydF4y2BaFMINBNDGydF4y2Ba在每次迭代时使用,金段搜索或抛物线插值。有关详细信息,请参阅GydF4y2Ba优化求解器迭代显示GydF4y2Ba。GydF4y2Ba

最小化几个变量的函数GydF4y2Ba

这GydF4y2Bafminsearch.GydF4y2Ba功能类似于GydF4y2BaFMINBNDGydF4y2Ba除了它处理许多变量的函数。指定起始矢量GydF4y2BaXGydF4y2Ba0.GydF4y2Ba而不是开始间隔。GydF4y2Bafminsearch.GydF4y2Ba试图返回向量GydF4y2BaXGydF4y2Ba这是该起始载体附近的数学函数的局部最小化器。GydF4y2Ba

尝试GydF4y2Bafminsearch.GydF4y2Ba,创建功能GydF4y2Bathree_var.GydF4y2Ba三个变量,GydF4y2BaXGydF4y2Ba那GydF4y2BayGydF4y2Ba, 和GydF4y2BaZ.GydF4y2Ba。GydF4y2Ba

功能b = three_var(v)x = v(1);Y = V(2);z = v(3);b = x。^ 2 + 2.5 * sin(y) -  z ^ 2 * x ^ 2 * y ^ 2;GydF4y2Ba

现在找到此功能的最低限度GydF4y2Bax = -0.6.GydF4y2Ba那GydF4y2Bay = -1.2.GydF4y2Ba, 和GydF4y2BaZ = 0.135.GydF4y2Ba作为起始值。GydF4y2Ba

v = [-0.6,-1.2,0.135];a = fminsearch(@ three_var,v)a = 0.0000 -1.5708 0.1803GydF4y2Ba

最大化功能GydF4y2Ba

这GydF4y2BaFMINBNDGydF4y2Ba和GydF4y2Bafminsearch.GydF4y2Ba求解器试图最小化目标函数。如果您有最大化问题,即表单的问题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)-tan(cos(x)),3,8)x = 6.2832 fval = -1.5574GydF4y2Ba

最大值为1.5574(报告的负数GydF4y2Bafval.GydF4y2Ba),并发生在GydF4y2BaXGydF4y2Ba= 6.2832.GydF4y2Ba。此答案是正确的,因为到了五位,最大值是GydF4y2BaTan(1)= 1.5574GydF4y2Ba,发生在GydF4y2BaXGydF4y2Ba= 2GydF4y2BaπGydF4y2Ba= 6.2832.GydF4y2Ba。GydF4y2Ba

fminsearch.GydF4y2Ba算法GydF4y2Ba

fminsearch.GydF4y2Ba使用Lagarias等人所述的Nelder-Mead Simplex算法。GydF4y2Ba[1]GydF4y2Ba。该算法使用SimplexGydF4y2BaNGydF4y2Ba+ 1分GydF4y2BaNGydF4y2Ba- 尺寸向量GydF4y2BaXGydF4y2Ba。该算法首先在初始猜测周围制作一个单纯xGydF4y2BaXGydF4y2Ba0.GydF4y2Ba通过添加每个组件的5%GydF4y2BaXGydF4y2Ba0.GydF4y2Ba(GydF4y2Ba一世GydF4y2Ba) 至GydF4y2BaXGydF4y2Ba0.GydF4y2Ba。该算法使用这些GydF4y2BaNGydF4y2Ba除了单纯x的元素之外的vectorGydF4y2BaXGydF4y2Ba0.GydF4y2Ba。(算法使用0.00025作为组件GydF4y2Ba一世GydF4y2Ba如果GydF4y2BaXGydF4y2Ba0.GydF4y2Ba(GydF4y2Ba一世GydF4y2Ba)= 0.GydF4y2Ba。)然后,算法根据以下过程重复地修改单面x。GydF4y2Ba

笔记GydF4y2Ba

关键词GydF4y2Bafminsearch.GydF4y2Ba迭代显示出现在GydF4y2Ba大胆的GydF4y2Ba在步骤描述之后。GydF4y2Ba

  1. 让GydF4y2BaXGydF4y2Ba(GydF4y2Ba一世GydF4y2Ba)表示当前单纯x中的点列表,GydF4y2Ba一世GydF4y2Ba= 1,......,GydF4y2BaNGydF4y2Ba+ 1。GydF4y2Ba

  2. 从最低函数值订购单面点中的点GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(1))最高GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1))。在迭代的每个步骤中,该算法丢弃了当前最差点GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1),并接受另一个点进入Simplex。[或者,在下面的步骤7的情况下,它会改变所有GydF4y2BaNGydF4y2Ba以上值的点GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(1))]。GydF4y2Ba

  3. 生成GydF4y2Ba反映了GydF4y2Ba观点GydF4y2Ba

    R.GydF4y2Ba= 2GydF4y2BamGydF4y2Ba-GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1),GydF4y2Ba (1)GydF4y2Ba

    在哪里GydF4y2Ba

    mGydF4y2Ba=σ.GydF4y2BaXGydF4y2Ba(GydF4y2Ba一世GydF4y2Ba/GydF4y2BaNGydF4y2Ba那GydF4y2Ba一世GydF4y2Ba= 1 ...GydF4y2BaNGydF4y2Ba那GydF4y2Ba (2)GydF4y2Ba

    并计算GydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)。GydF4y2Ba

  4. 如果GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(1))≤GydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba)), 接受GydF4y2BaR.GydF4y2Ba并终止这种迭代。GydF4y2Ba反映GydF4y2Ba

  5. 如果GydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(1)),计算扩展点GydF4y2BaS.GydF4y2Ba

    S.GydF4y2Ba=GydF4y2BamGydF4y2Ba+ 2(GydF4y2BamGydF4y2Ba-GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1)),GydF4y2Ba (3)GydF4y2Ba

    并计算GydF4y2BaFGydF4y2Ba(GydF4y2BaS.GydF4y2Ba)。GydF4y2Ba

    1. 如果GydF4y2BaFGydF4y2Ba(GydF4y2BaS.GydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2Ba), 接受GydF4y2BaS.GydF4y2Ba并终止迭代。GydF4y2Ba扩张GydF4y2Ba

    2. 否则,接受GydF4y2BaR.GydF4y2Ba并终止迭代。GydF4y2Ba反映GydF4y2Ba

  6. 如果GydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)≥GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba)),执行一个GydF4y2Ba收缩GydF4y2Ba之间GydF4y2BamGydF4y2Ba和任何一种GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1)或GydF4y2BaR.GydF4y2Ba,取决于物理函数值较低的。GydF4y2Ba

    1. 如果GydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1))GydF4y2Ba(那是,GydF4y2BaR.GydF4y2Ba比这更好GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1)),计算GydF4y2Ba

      CGydF4y2Ba=GydF4y2BamGydF4y2Ba+(GydF4y2BaR.GydF4y2Ba-GydF4y2BamGydF4y2Ba)/ 2GydF4y2Ba (4)GydF4y2Ba

      并计算GydF4y2BaFGydF4y2Ba(GydF4y2BaCGydF4y2Ba)。如果GydF4y2BaFGydF4y2Ba(GydF4y2BaCGydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)GydF4y2Ba, 接受GydF4y2BaCGydF4y2Ba并终止迭代。GydF4y2Ba外面的合同GydF4y2Ba

      否则,继续步骤7(缩小)。GydF4y2Ba

    2. 如果GydF4y2BaFGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)≥GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1))GydF4y2Ba, 计算GydF4y2Ba

      CC.GydF4y2Ba=GydF4y2BamGydF4y2Ba+(GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1) -GydF4y2BamGydF4y2Ba)/ 2GydF4y2Ba (5)GydF4y2Ba

      并计算GydF4y2BaFGydF4y2Ba(GydF4y2BaCC.GydF4y2Ba)。如果GydF4y2BaFGydF4y2Ba(GydF4y2BaCC.GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1))GydF4y2Ba, 接受GydF4y2BaCC.GydF4y2Ba并终止迭代。GydF4y2Ba内部合同GydF4y2Ba

      否则,继续步骤7(缩小)。GydF4y2Ba

  7. 计算GydF4y2BaNGydF4y2Ba点GydF4y2Ba

    V.GydF4y2Ba(GydF4y2Ba一世GydF4y2Ba)=GydF4y2BaXGydF4y2Ba(1)+(GydF4y2BaXGydF4y2Ba(GydF4y2Ba一世GydF4y2Ba) -GydF4y2BaXGydF4y2Ba(1))/ 2GydF4y2Ba (6)GydF4y2Ba

    并计算GydF4y2BaFGydF4y2Ba(GydF4y2BaV.GydF4y2Ba(GydF4y2Ba一世GydF4y2Ba)),GydF4y2Ba一世GydF4y2Ba= 2,......,GydF4y2BaNGydF4y2Ba+ 1。下一次迭代的单面是GydF4y2BaXGydF4y2Ba(1),GydF4y2BaV.GydF4y2Ba(2),......,GydF4y2BaV.GydF4y2Ba(GydF4y2BaNGydF4y2Ba+ 1)。GydF4y2Ba收缩GydF4y2Ba

下图显示了点数GydF4y2Bafminsearch.GydF4y2Ba可以在程序中计算,以及每个可能的新单纯x。原始单面有一个粗体轮廓。迭代进行,直到符合停止标准。GydF4y2Ba

图形表示的Fminsearch算法显示反射,扩展,收缩和收缩点。GydF4y2Ba

参考GydF4y2Ba

[1] Lagarias,J.C.,J.A. Reeds,M. H. Wright和P. E. Wright。“低尺寸下狭窄的Nelder-Mead Simplex方法的收敛性能”。GydF4y2BaSIAM优化杂志GydF4y2Ba,卷。9,第1,199号,第112页,第112-147页。GydF4y2Ba

相关话题GydF4y2Ba