日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【最优化导论】一维搜索方法

發布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【最优化导论】一维搜索方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一維搜索方法

本文將介紹一維搜索方法,即尋找一元單值函數的極小點問題。其中包括黃金分割法、斐波那契數列法等,還將介紹在多維搜索算法中一維搜索方法所發揮的作用。

一維問題也就是指目標函數為一元單值函數f:R→Rf:\mathbb{R}\rightarrow \mathbb{R}f:RR的優化問題,一維問題的求解方法統稱為一維搜索方法,也稱為線性搜索方法。一維搜索方法的重要性體現在以下兩個方面:

  • 一維搜索方法是多變量問題求解方法的特例
  • 一維搜索方法是多變量問題求解算法的一部分

在通過當前迭代點x(k)\mathbf{x}^{(k)}x(k)和目標函數fff來構建下一個迭代點x(k+1)\mathbf{x}^{(k+1)}x(k+1)的過程中,有些算法可能要利用當前迭代點處的函數值fff,有些算法可能要用到當前迭代點處的一階導數f′f'f,有些可能要用到二階導數f′′f''f

接下來將介紹以下一維搜索方法:

  • 黃金分割法(使用fff
  • 斐波那契數列方法(使用fff
  • 二分法(使用f’f’f
  • 割線法(使用f’f’f
  • 牛頓法(使用f’f’ff′’f'’f

1. 黃金分割法

黃金分割法用于求解一元單值函數在閉區間[a0,b0][a_0,b_0][a0?,b0?]上的極小點,后面所講的斐波那契數列方法和二分法也是針對這一問題,該問題的唯一前提是目標函數在區間內是單峰的,即存在唯一極小點。

該方法的基本思想是挑選區間[a0,b0][a_0,b_0][a0?,b0?]中的點,通過不斷縮小極小點所在的區間,直到達到足夠的精度水平。

如上圖中,極小點為x?x^*x?,令區間長度為lll,則新產生的點為:

a1=a0+ρ?la_1=a_0+\rho \cdot la1?=a0?+ρ?l

b1=b0?ρ?lb_1=b_0-\rho \cdot lb1?=b0??ρ?l

其中ρ&lt;12\rho&lt;\frac{1}{2}ρ<21?,接著比較f(a1)f(a_1)f(a1?)f(b1)f(b_1)f(b1?)的大小:

  • 如果f(a1)&lt;f(b1)f(a_1)&lt;f(b_1)f(a1?)<f(b1?),則極小點位于區間[a0,b1][a_0,b_1][a0?,b1?]之間
  • 如果f(a1)≥f(b1)f(a_1)\geq f(b_1)f(a1?)f(b1?),則極小點位于區間[a1,b0][a_1,b_0][a1?,b0?]之間

然后在新的區間中不斷進行壓縮區間,就可以不斷逼近極小點。為了減少計算次數,如上圖例子中所示,下一次的時候不計算b2b_2b2?,而是直接把上一次的a1a_1a1?當做b2b_2b2?,下一次迭代只需計算相應的函數值就好了。

為了不失一般性,假設區間長度為1,則前兩次的迭代過程如下圖所示:

首先,a0到b0的長度為1,a0到b1的區間長度為1?ρ1-\rho1?ρ。縮小區間至[a0,b1][a_0,b_1][a0?,b1?]

然后,a1=b2,b2到b1的區間長度為1?2ρ1-2\rho1?2ρ

在a0到b1區間上又滿足,b1減去 ρ\rhoρ倍的區間長度為b2,所以:

ρ(1?ρ)=1?2ρ\rho(1-\rho)=1-2\rhoρ(1?ρ)=1?2ρ

所以解得:

ρ1=3+52,ρ2=3?52\rho_1=\frac{3+\sqrt{5}}{2},\rho_2=\frac{3-\sqrt{5}}{2}ρ1?=23+5??,ρ2?=23?5??

又因為ρ&lt;12\rho&lt;\frac{1}{2}ρ<21?,所以ρ=3?52=0.382\rho=\frac{3-\sqrt{5}}{2}=0.382ρ=23?5??=0.382

同時滿足ρ1?ρ=1?p1\frac{\rho}{1-\rho}=\frac{1-p}{1}1?ρρ?=11?p?,即能夠是短區間與長區間的長度之比等于長區間與整個區間之比,這意味著就符合黃金分割法則。

利用黃金分割法開展區間壓縮,區間按照1?ρ≈0.618031-\rho\approx 0.618031?ρ0.61803的比例逐漸壓縮,壓縮N次之后,新的區間長度將是原來區間長度的(1?ρ)N≈(0.61803)N(1-\rho)^N\approx (0.61803)^N(1?ρ)N(0.61803)N

2. 斐波那契數列法

在黃金分割法中,參數ρ\rhoρ始終保持不變。如果動態的改變參數ρ\rhoρ則會產生一種新的搜索算法。假設第k次的參數為ρk\rho_kρk?,第k+1次的參數為ρk+1\rho_{k+1}ρk+1?,則參數之間也滿足兩次迭代之間的關系式:

ρk+1(1?ρk)=1?2ρk\rho_{k+1}(1-\rho_k)=1-2\rho_kρk+1?(1?ρk?)=1?2ρk?

整理后可得:

ρk+1=1?ρk1?ρk\rho_{k+1}=1-\frac{\rho_k}{1-\rho_k}ρk+1?=1?1?ρk?ρk??

在壓縮過程中,經過N次迭代之后,可以將極小點所在的區間長度壓縮到初始區間長度的:

(1?ρ1)(1?ρ2)?(1?ρN)(1-\rho_1)(1-\rho_2)\cdots(1-\rho_N)(1?ρ1?)(1?ρ2?)?(1?ρN?)

采用不同的參數序列,所得到的壓縮比也會不同,總壓縮比是越小越好。

可以將斐波那契數列將參數的設置結合,對于斐波那契數列F1,F2,F3,?F_1,F_2,F_3,\cdotsF1?,F2?,F3?,?,按照常規做法,令F?1=0,F0=1F_{-1}=0,F_0=1F?1?=0,F0?=1,對k≥0k\geq0k0,有:

Fk+1=Fk+Fk?1F_{k+1}=F_k+F_{k-1}Fk+1?=Fk?+Fk?1?

由此可知斐波那契數列的前8項為:

采用斐波那契數列參數為:

此時總壓縮比為:

(1?ρ1)(1?ρ2)?(1?ρN)=FNFN+1FN?1FN?F1F2=1FN+1(1-\rho_1)(1-\rho_2)\cdots(1-\rho_N)=\frac{F_N}{F_{N+1}}\frac{F_{N-1}}{F_{N}}\cdots\frac{F_1}{F_{2}}=\frac{1}{F_{N+1}}(1?ρ1?)(1?ρ2?)?(1?ρN?)=FN+1?FN??FN?FN?1???F2?F1??=FN+1?1?

但會發現ρN=1?F1F2=12\rho_N=1-\frac{F_1}{F_{2}}=\frac{1}{2}ρN?=1?F2?F1??=21?,那么此時會選擇中點作為新的點,那么就無法再進行壓縮了,所以需要調整一下:

ρN=1/2??\rho_N=1/2-\epsilonρN?=1/2???\epsilon?為一個很小的正數,那么在最后一次迭代過程中,極小點所在的區間壓縮比可能是:

1?ρN=121-\rho_N=\frac{1}{2}1?ρN?=21?1?(ρN??)=12+?=1+2?21-(\rho_N-\epsilon)=\frac{1}{2}+\epsilon=\frac{1+2\epsilon}{2}1?(ρN???)=21?+?=21+2??

兩個壓縮比能夠產生兩個不同的新點,分別計算對應的目標函數值,保留目標函數值更小的點。這意味著,在最壞的情況下,波那契數列法的總壓縮比為:

1+2?FN+1\frac{1+2\epsilon}{F_{N+1}}FN+1?1+2??

3.二分法

同前面的方法一樣,仍然要求函數fff在區間[a0,b0][a_0,b_0][a0?,b0?]上位單峰函數。另外,二分法還要求函數為連續可微的,因為要使用到一階導數f′f&#x27;f

求解的過程為:

1)確定初始區間的中點x(0)=(a0+b0)/2x^{(0)}=(a_0+b_0)/2x(0)=(a0?+b0?)/2

2)計算函數在x(0)x^{(0)}x(0)處的一階導數f′(x(0))f&#x27;(x^{(0)})f(x(0))

  • 如果f′(x(0))&gt;0f&#x27;(x^{(0)})&gt;0f(x(0))>0,說明極小點在x(0)x^{(0)}x(0)左側,區間壓縮為[a0,x(0)][a_0,x^{(0)}][a0?,x(0)]

  • 如果f′(x(0))&lt;0f&#x27;(x^{(0)})&lt;0f(x(0))<0,說明極小點在x(0)x^{(0)}x(0)右側,區間壓縮為[x(0),b0][x^{(0)},b_0][x(0),b0?]

  • 如果f′(x(0))=0f&#x27;(x^{(0)})=0f(x(0))=0,說明極小點為x(0)x^{(0)}x(0)

按照如上的方式,在第k次迭代過程中計算相應的一階導數并判斷極小點可能在的區間。

4.牛頓法

牛頓法需要函數連續二階可微,即在x(k)x^{(k)}x(k)處的f(x(k)),f′(x(k)),f′′(x(k))f(x^{(k)}),f&#x27;(x^{(k)}),f&#x27;&#x27;(x^{(k)})f(x(k)),f(x(k)),f(x(k))均可求得。此時就可以使用泰勒公式的展開來近似原函數:

q(x)=f(x(k))+f′(x(k))(x?x(k))+12f′′(x(k))(x?x(k))2q(x)=f(x^{(k)})+f&#x27;(x^{(k)})(x-x^{(k)})+\frac{1}{2}f&#x27;&#x27;(x^{(k)})(x-x^{(k)})^2q(x)=f(x(k))+f(x(k))(x?x(k))+21?f(x(k))(x?x(k))2

其中q(x)為原函數f(x)的近似,所以函數f的極小點可近似于求解q的極小點,函數q的極小點需要滿足一階必要條件:

0=q′(x)=f′(x(k))+f′′(x(k))(x?x(k))0=q&#x27;(x)=f&#x27;(x^{(k)})+f&#x27;&#x27;(x^{(k)})(x-x^{(k)})0=q(x)=f(x(k))+f(x(k))(x?x(k))

x=x(k+1)x=x^{(k+1)}x=x(k+1),解得:

x(k+1)=x(k)?f′f′′x^{(k+1)}=x^{(k)}-\frac{f&#x27;}{f&#x27;&#x27;}x(k+1)=x(k)?ff?


f′′&gt;0f&#x27;&#x27;&gt;0f>0在區間內成立,則牛頓法可以正常運行,如下左圖所示;否則若f′′&gt;0f&#x27;&#x27;&gt;0f>0牛頓法可能會收斂到極大點。

牛頓法是通過不斷破事目標函數f的一階導數趨于0所得到的,因此也稱為牛頓切線法。令g(x)=f′(x)g(x)=f&#x27;(x)g(x)=f(x),則求解過程就是不斷趨近函數g(x)的零點。

即在x(k)x^{(k)}x(k)處切線與x軸的交點就是x(k+1)x^{(k+1)}x(k+1),但與此同時初始點的選擇就比較重要,如下圖所示為會使牛頓法失效的例子。

5.割線法

從迭代公式可以看出牛頓法需要用到二階導數:

x(k+1)=x(k)?f′f′′x^{(k+1)}=x^{(k)}-\frac{f&#x27;}{f&#x27;&#x27;}x(k+1)=x(k)?ff?

如果二階導數不存在,可以使用不同點處的一階導數對其近似得到,比如可以利用下式計算f′′f&#x27;&#x27;f

f′(x(k))?f′(x(k?1))x(k)?x(k?1)\frac{f&#x27;(x^{(k)})-f&#x27;(x^{(k-1)})}{x^{(k)}-x^{(k-1)}}x(k)?x(k?1)f(x(k))?f(x(k?1))?

所以可以得到一個新的迭代公式:

x(k+1)=x(k)?x(k)?x(k?1)f′(x(k))?f′(x(k?1))f′(x(k))x^{(k+1)}=x^{(k)}-\frac{x^{(k)}-x^{(k-1)}}{f&#x27;(x^{(k)})-f&#x27;(x^{(k-1)})}f&#x27;(x^{(k)})x(k+1)=x(k)?f(x(k))?f(x(k?1))x(k)?x(k?1)?f(x(k))

該公式對應的方法為割線法,這個方法需要兩個初始點。

不同于牛頓法使用g的斜率來確定下一個迭代點,割線法使用的是第k-1個和第k個選代點之間的割線確定第k+1個迭代點。

6.劃界法

前面所討論的方法中,都有一個前提,即初始區間是已經知道的。二劃界法就是尋找初始區間的一種方法。

劃界法的基本思想是找出3個點a<c<b,是的函數值滿足f?<f(a),f?<f(b)。其計算過程大致如下:

任選3個點x0&lt;x1&lt;x2x_0&lt;x_1&lt;x_2x0?<x1?<x2?

  • f(x1)&lt;f(x0)f(x_1)&lt;f(x_0)f(x1?)<f(x0?)f(x1)&lt;f(x2)f(x_1)&lt;f(x_2)f(x1?)<f(x2?),則區間為[x0,x2]

  • f(x0)&gt;f(x1)&gt;f(x2)f(x_0)&gt;f(x_1)&gt;f(x_2)f(x0?)>f(x1?)>f(x2?),則另取一個點x3&gt;x2x_3&gt;x_2x3?>x2?,繼續檢查函數值,如下圖所示:

7. 多維優化問題中的一維搜索

在多維優化問題的求解過程中,通常每次迭代的過程中都包括一維搜索過程。

令目標函數f:Rn→Rf:\mathbb{R}^n \rightarrow\mathbb{R}f:RnR,求其極小點的迭代算法中的迭代公式為:

x(k+1)=x(k)+αkd(k)\mathbf{x}^{(k+1)}=\mathbf{x}^{(k)}+\alpha_k\mathbfozvdkddzhkzd^{(k)}x(k+1)=x(k)+αk?d(k)

其中αk≥0\alpha_k\ge0αk?0為步長,其確定方式使函數?k(α)=f(x(k)+αkd(k))\phi_k(\alpha)=f(\mathbf{x}^{(k)}+\alpha_k\mathbfozvdkddzhkzd^{(k)})?k?(α)=f(x(k)+αk?d(k))達到最小;

向量d(k)\mathbfozvdkddzhkzd^{(k)}d(k)為搜索方向,例如梯度方向。

上述的一維搜索方法可以用來求解?k(α)=f(x(k)+αkd(k))\phi_k(\alpha)=f(\mathbf{x}^{(k)}+\alpha_k\mathbfozvdkddzhkzd^{(k)})?k?(α)=f(x(k)+αk?d(k))的極小點,其中參數為α\alphaα,符合一維情況。

如上圖為一個在多維優化問題中的一維搜索應用示例。

總結

以上是生活随笔為你收集整理的【最优化导论】一维搜索方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。