文件GydF4y2Ba

优化非线性功能GydF4y2Ba

最小化一个变量的函数GydF4y2Ba

给定单个变量的数学函数,可以使用GydF4y2BaFMINBNDGydF4y2Ba函数在给定区间内寻找函数的局部极小值。例如,考虑GydF4y2Ba驼峰.m.GydF4y2Ba功能,提供MATLAB®。下图显示了图表GydF4y2Ba驼峰GydF4y2Ba。GydF4y2Ba

x=-1:01:2;y=驼峰(x);图(x,y)xlabel(GydF4y2Ba'X'GydF4y2Ba)伊拉贝尔(GydF4y2Ba"驼峰(x)"GydF4y2Ba) 网格GydF4y2Ba在…上GydF4y2Ba

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

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

您可以通过使用查看解决方案过程的详细信息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.6370GydF4y2Ba

迭代显示屏显示当前值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.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和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单纯形算法。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) ,并在单纯形中接受另一个点[或者,在下面步骤7的情况下,它会更改所有GydF4y2BaNGydF4y2Ba值大于的值GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba(1))]。GydF4y2Ba

  3. 生成GydF4y2Ba反映了GydF4y2Ba指向GydF4y2Ba

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

    在哪里GydF4y2Ba

    mGydF4y2Ba=σ.GydF4y2BaXGydF4y2Ba(GydF4y2Ba一世GydF4y2Ba/GydF4y2BaNGydF4y2Ba那GydF4y2Ba一世GydF4y2Ba= 1...GydF4y2BaNGydF4y2Ba那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

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

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

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

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

参考文献GydF4y2Ba

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

相关话题GydF4y2Ba