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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【最优化导论】全局搜索算法

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

全局搜索算法

1. 引言

全局意義上的搜索方法能夠在整個可行集上開展搜索,以找到極小點。這些方法只需要計算函數目標值,不需要對目標函數進行求導。這類方法的適用面更加廣闊,在某些情況下,這些方法產生的解可以作為如梯度方法、牛頓法等迭代方法的“較好”的初始點。

2. Melder-Mead 單純形法

在此方法中引入了“單純形”的概念,單純形指的是在n維空間中選取n+1個點(p0,p1,? ,pn\mathbf{p_0}, \mathbf{p_1}, \cdots , \mathbf{p_n}p0?,p1?,?,pn?)所組成的幾何形狀,需要滿足:

det=[p0p1?pn11?1]≠0det=\begin{bmatrix} \mathbf{p_0} & \mathbf{p_1} & \cdots & \mathbf{p_n} \\ 1 & 1 & \cdots & 1 \\ \end{bmatrix}\neq 0det=[p0?1?p1?1????pn?1?]??=0

通俗來講,這個條件要求在R\mathbb{R}R中,兩個點不重合;在R2\mathbb{R}^2R2中,3個點不共線;在R3\mathbb{R}^3R3中,4個點不共面。也就是說,單純形包圍的n維空間具有有限的體積。

2.1 基本思想

針對f(x),x∈Rnf( \mathbf{x}),\mathbf{x}\in \mathbb{R}^nf(x),xRn的最小化問題,首先需要選擇n+1個點構成單純形。具體選擇方法為先選擇初始點x(0)=p0\mathbf{x}^{(0)}=\mathbf{p_0}x(0)=p0?,然后在按照如下方式產生其他點:

pi=p0+λiei\mathbf{p}_i=\mathbf{p}_0+\lambda_i\mathbf{e}_ipi?=p0?+λi?ei?

其中ei\mathbf{e}_iei?為空間中的標準基,λi\lambda_iλi?為正數,按照優化問題的規模確定其大小。選擇n+1個點之后就可以構成單純形了。

單純形確定之后就可以通過不斷迭代,使得單純形能夠朝著函數的極小點收斂。對于函數最小化的優化問題而言,目標函數值最大的點將被另外的點代替,持續迭代之后,直到單純形收斂到目標函數的極小點。

下面具體到二維問題來說明點的替換規則。

2.2 舉例:二維問題

在二維問題中,我們需要選擇3個點來構成單純形,因為需要比較對應目標函數值的大小,所以需要對每個點對應的函數值進行排序。令pl,pnl,ps\mathbf{p}_l,\mathbf{p}_{nl},\mathbf{p}_spl?,pnl?,ps?分別表示對應函數值最大、次大和最小的點。

在n維為中計算最好的n個點(扣除了最差的點)的重心pg\mathbf{p}_gpg?

pg=∑i=0n?1pin\mathbf{p}_g=\sum^{n-1}_{i=0}\frac{\mathbf{p}_i}{n}pg?=i=0n?1?npi??

在二維問題中,最好點和次好點的重心為:

pg=12(pnl+ps)\mathbf{p}_g=\frac{1}{2}(\mathbf{p}_{nl}+\mathbf{p}_s)pg?=21?(pnl?+ps?)

利用pg\mathbf{p}_gpg?進行反射操作,反射系數ρ>0\rho>0ρ>0,在pg\mathbf{p}_gpg?方向上對最差點pl\mathbf{p}_lpl?進行反射,得到反射點pr\mathbf{p}_rpr?

pr=pg+ρ(pg?pl)\mathbf{p}_r=\mathbf{p}_g+\rho(\mathbf{p}_g-\mathbf{p}_l)pr?=pg?+ρ(pg??pl?)

然后根據pr\mathbf{p}_rpr?的取值情況,再決定怎么取代最差點pl\mathbf{p}_lpl?。

反射系數一般令ρ=1\rho=1ρ=1,反射過程如圖所示:

1)若f(ps)&lt;f(pr)&lt;f(pnl)f(\mathbf{p}_s)&lt;f(\mathbf{p}_r)&lt;f(\mathbf{p}_{nl})f(ps?)<f(pr?)<f(pnl?)

反射出來的點對應的函數值小于原來次大的函數值,說明反射是成功的,則利用pr\mathbf{p}_rpr?代替原來的pl\mathbf{p}_lpl?。

2)若f(pr)&lt;f(ps)f(\mathbf{p}_r)&lt;f(\mathbf{p}_s)f(pr?)<f(ps?)

反射出來的點都比原來的最小值的點都要小,說明反射的太成功了,說明反射的方向很好,此時嘗試再延伸,看看會不會有更好的結果:

pe=pg+χ(pr?pg)\mathbf{p}_e=\mathbf{p}_g+\chi (\mathbf{p}_r-\mathbf{p}_g)pe?=pg?+χ(pr??pg?),其中χ&gt;1\chi&gt;1χ>1

  • 如果f(pe)&lt;frf(\mathbf{p}_e)&lt;f_rf(pe?)<fr?:延伸正確,用pe\mathbf{p}_epe?代替原來的pl\mathbf{p}_lpl?
  • 如果fe≥frf_e \geq f_rfe?fr?:延伸出來的點對應的函數值大于原來的,不能延伸了,直接用pr\mathbf{p}_rpr?代替原來的pl\mathbf{p}_lpl?。

3)若f(pr)≥f(pnl)f(\mathbf{p}_r)\geq f(\mathbf{p}_{nl})f(pr?)f(pnl?)

反射出來的點對應的函數值比原來次差的點要差,此時產生兩種情況,一種是比原來最差的點要更差,另一種是介于次差點和最差點中間。

  • f(pnl)≤f(pr)&lt;f(pl)f(\mathbf{p}_{nl})\leq f(\mathbf{p}_r)&lt; f(\mathbf{p}_l)f(pnl?)f(pr?)<f(pl?):

    進行外收縮,令pc=pg+γ(pr?pg)\mathbf{p}_c=\mathbf{p}_g+\gamma (\mathbf{p}_r-\mathbf{p}_g)pc?=pg?+γ(pr??pg?),其中0&lt;γ&lt;10&lt;\gamma&lt;10<γ<1

  • f(pr)≥f(pl)f(\mathbf{p}_r)\geq f(\mathbf{p}_l)f(pr?)f(pl?)

    反射出來的點成為了最差點,進行內收縮,令pc=pg+γ(pl?pg)\mathbf{p}_c=\mathbf{p}_g+\gamma (\mathbf{p}_l-\mathbf{p}_g)pc?=pg?+γ(pl??pg?)

接著要對pc\mathbf{p}_cpc?進行判斷:

  • fc≤flf_c\leq f_lfc?fl?:說明收縮以后比原來來最差點對應的值要小了,即收縮成功,用pc\mathbf{p}_cpc?代替pl\mathbf{p}_lpl?。

  • fc&gt;flf_c&gt;f_lfc?>fl?:說明收縮失敗了,那就在原來的3個點中,只保留ps\mathbf{p}_sps?,ps\mathbf{p}_sps?與其它點距離減半:

    進行這種壓縮方式之后,在新的3個點中再進行上述的操作。

以上就是在二維問題中,Melder-Mead 單純形法的搜索和迭代過程。

下圖列舉了一個利用Melder-Mead 單純形法求救二元函數極小點的部分搜索過程:

3. 模擬退火算法

3.1 隨機搜索

模擬退火法是一種隨機搜索算法,隨機搜索算法是一種能夠在優化問題的可行集中隨機采樣,逐步完成搜索的方法。

maximizef(x)subjecttox∈Ω\begin{aligned} maximize\ \ \ \ f(\mathbf{x}) \\ subject\ \ to\ \ \mathbf{x}\in\Omega\end{aligned}maximize????f(x)subject??to??xΩ?

隨機搜索方法的一個基本假設為可以從可行集Ω\OmegaΩ中進行隨機采樣。通常情況下,隨機選擇一個x(0)∈Ω\mathbf{x}^{(0)}\in \Omegax(0)Ω,并在x(0)\mathbf{x}^{(0)}x(0)附近在選擇一個點作為下一個迭代點的備選。

x\mathbf{x}x附近可選擇備選點的集合為N(x)N(\mathbf{x})N(x),可以認為N(x)N(\mathbf{x})N(x)x\mathbf{x}x的一個“鄰域”。

一種簡單的隨機搜索算法——樸素隨機搜索算法如下所示:

  • k:=0k:=0k:=0,選定初始點x(0)∈Ω\mathbf{x}^{(0)} \in \Omegax(0)Ω

  • N(x(k))N(\mathbf{x}^{(k)})N(x(k))隨機選一個備選點z(k)\mathbf{z}^{(k)}z(k)

  • 如果f(z(k))&lt;f(x(k))f(\mathbf{z}^{(k)})&lt;f(\mathbf{x}^{(k)})f(z(k))<f(x(k)),則令x(k+1)=z(k)\mathbf{x}^{(k+1)}=\mathbf{z}^{(k)}x(k+1)=z(k),否則令x(k+1)=x(k)\mathbf{x}^{(k+1)}=\mathbf{x}^{(k)}x(k+1)=x(k)

  • 如果滿足停止規則,就停止迭代

  • k:=k+1k:=k+1k:=k+1,返回第2步

  • 3.2 模擬退火法

    樸素隨機搜索算法的主要問題是有可能會在局部極小點附近“卡住”。如N(x(0))N(\mathbf{x}^{(0)})N(x(0))已經足夠小了,如果x(0)\mathbf{x}^{(0)}x(0)為當前的局部最小點,那么算法就無法跳出N(x(0))N(\mathbf{x}^{(0)})N(x(0))的范圍,即陷入了局部最小的問題。

    一種解決途徑是保證“領域N(x(k))N(\mathbf{x}^{(k)})N(x(k))足夠大,但一旦搜索空間大了,搜索過程也會變慢,這也導致了尋找備選點的難度加大。

    另一種方法是設置一種方法,讓算法以一定概率接受比當前點要差的新點。這也是模擬退火的機制。

    模擬退火算法:

  • k:=0k:=0k:=0,選定初始點x(0)∈Ω\mathbf{x}^{(0)} \in \Omegax(0)Ω

  • N(x(k))N(\mathbf{x}^{(k)})N(x(k))隨機選一個備選點z(k)\mathbf{z}^{(k)}z(k)

  • 設置一枚特殊的硬幣,使其在一次拋投中出現正面的概率為p(k,f(z(k)),f(x(k)))p(k,f(\mathbf{z}^{(k)}),f(\mathbf{x}^{(k)}))p(k,f(z(k)),f(x(k))),在一次拋頭中,如果出現正面,則令x(k+1)=z(k)\mathbf{x}^{(k+1)}=\mathbf{z}^{(k)}x(k+1)=z(k),否則x(k+1)=x(k)\mathbf{x}^{(k+1)}=\mathbf{x}^{(k)}x(k+1)=x(k)

  • 如果滿足停止規則,就停止迭代

  • k:=k+1k:=k+1k:=k+1,返回第2步

  • 可以看出區別主要在算法第3步,這一步驟中,模擬退火法以一定概率選擇選擇備選點作為下一個迭代點,這一概率稱為接受概率。

    常用的接受概率為:

    p(k,f(z(k)),f(x(k)))=min{1,exp(?(f(z(k))?f(x(k)))/Tk)}p(k,f(\mathbf{z}^{(k)}),f(\mathbf{x}^{(k)}))=min\{1,exp(-(f(\mathbf{z}^{(k)})-f(\mathbf{x}^{(k)}))/T_k)\}p(k,f(z(k)),f(x(k)))=min{1,exp(?(f(z(k))?f(x(k)))/Tk?)}

    exp表示指數函數,TkT_kTk?構成一組正數序列,稱為溫度進度表或冷卻進度表。

    如果f(z(k))≤f(x(k))f(\mathbf{z}^{(k)})\leq f(\mathbf{x}^{(k)})f(z(k))f(x(k)),說明p=1p=1p=1,即始終x(k+1)=z(k)\mathbf{x}^{(k+1)}=\mathbf{z}^{(k)}x(k+1)=z(k),因為備選點的函數值已經比原來的小了,所以理應作為迭代點。

    如果f(z(k))&gt;f(x(k))f(\mathbf{z}^{(k)})&gt; f(\mathbf{x}^{(k)})f(z(k))>f(x(k)),說明這個點不好,但仍有一定概率接受這個點,這個概率為:

    exp(?f(z(k))?f(x(k))Tk)exp(-\frac{f(\mathbf{z}^{(k)})-f(\mathbf{x}^{(k)})}{T_k})exp(?Tk?f(z(k))?f(x(k))?)

    并且f(z(k)f(\mathbf{z}^{(k)}f(z(k)f(x(k))f(\mathbf{x}^{(k)})f(x(k))之間的差異越大,采用這個不好的點的概率就越小。類似的,TkT_kTk?越小,采用不好的點的概率也越小。

    通常的做法是令TkT_kTk?單調遞減至0,即模仿冷卻的過程,直觀的理解也就是隨著迭代次數k的增加,算法趨于更差點的可能性就越小。

    模擬退火算法中的溫度必須以可可控的方式遞減,具體而言,冷卻過程必須足夠慢,有人給出了一個合適的冷卻進度表:

    Tk=γlog(k+2)T_k=\frac{\gamma}{log(k+2)}Tk?=log(k+2)γ?

    其中,γ&gt;0\gamma &gt;0γ>0為常數,需要根據具體問題上設置。(需要足夠大,以保證能夠跳出局部最小點附近的區域)。

    4. 粒子群優化算法

    粒子群算法與上述的隨機搜索算法的一個主要區別是:在一次迭代中,粒子群優化算法并不是只更新單個迭代點x(k)\mathbf{x}^{(k)}x(k),而是更新一群迭代點,稱為群。

    可以將群視為一個無需的群體,每個成員都在移動,旨在形成聚集,但移動方向是隨機的。粒子群優化算法旨在模擬動物或昆蟲的社會行為,如蜂群、鳥群和羚羊群的形成過程。

    粒子群優化算法的基本過程為,首先隨機產生一組數據點,為每一個點賦予一個速度,構成一個速度向量。點本身代表粒子所在的位置,每個點以指定的速度移動。接下來針對每個數據點計算對應的目標函數值,基于計算結果再產生一組新的數據點,賦予新的速度。

    每個粒子都持續追蹤其當前為止的最好位置pbest,程序也記錄當前全局的最好位置gbest。

    4.1 基本的粒子群優化算法

    gbest版粒子群優化算法的簡化版本,在每次迭代中,粒子的速度都朝著個體最好位置而和全局最好位置進行調整。

    符號約定:

    f:Rn→Rf:\mathbb{R}^n \rightarrow \mathbb{R}f:RnR為目標函數

    ddd表示群體的容量,共有d個粒子

    xi∈Rn\mathbf{x}_i\in \mathbb{R}^nxi?Rn表示粒子i的位置,對應速度為vi\mathbf{v}_ivi?pi\mathbf{p}_ipi?表示粒子i的pbest,g\mathbf{g}g表示gbest。

    gbest版的粒子群優化算法:

  • k:=0k:=0k:=0,選定d個初始點xi(0)\mathbf{x}^{(0)}_ixi(0)?,以及對應vi(0)\mathbf{v}^{(0)}_ivi(0)?pi(0)=xi(0)\mathbf{p}^{(0)}_i=\mathbf{x}^{(0)}_ipi(0)?=xi(0)?g(0)=argminx∈{xi(0)}f(x)\mathbf{g}^{(0)}=arg\ min _{x\in\{\mathbf{x}^{(0)}_i\}}f(\mathbf{x})g(0)=arg?minx{xi(0)?}?f(x)。

  • 對第i個粒子,隨機產生兩個n為向量ri(k)\mathbf{r}^{(k)}_iri(k)?si(k)\mathbf{s}^{(k)}_isi(k)?,并從(0,1)區間內抽取隨機數w、c1和c2,用于計算下一次的速度向量:

    vi(k+1)=ωvi(k)+c1ri(k)°(pi(k)?xi(0))+c2si(k)(gi(k)?xi(k))\mathbf{v}^{(k+1)}_i=\omega \mathbf{v}^{(k)}_i+c_1\mathbf{r}^{(k)}_i\circ (\mathbf{p}^{(k)}_i-\mathbf{x}^{(0)}_i)+c_2 \mathbf{s}^{(k)}_i (\mathbf{g}^{(k)}_i-\mathbf{x}^{(k)}_i)vi(k+1)?=ωvi(k)?+c1?ri(k)?°(pi(k)??xi(0)?)+c2?si(k)?(gi(k)??xi(k)?)

    xi(k+1)=xi(k)+vi(k+1)\mathbf{x}^{(k+1)}_i=\mathbf{x}^{(k)}_i+\mathbf{v}^{(k+1)}_ixi(k+1)?=xi(k)?+vi(k+1)?

  • 針對每個新的xi(k+1)\mathbf{x}^{(k+1)}_ixi(k+1)?,查看它對應的函數值,判斷并更新pi(k+1)\mathbf{p}^{(k+1)}_ipi(k+1)?

  • 針對所有xi(k+1)\mathbf{x}^{(k+1)}_ixi(k+1)?,查看函數值并更新g(k+1)\mathbf{g}^{(k+1)}g(k+1)

  • 如果滿足停止條件就停止迭代,否則令k=k+1,并返回第2步。

  • 上面°\circ°表示矩陣按元素相乘得到新的矩陣,ω\omegaω表示慣性系數,建議取稍微小于1的值,參數c1和c2決定了粒子趨向于“好位置”的程度,表示來自“認知”和“社會”的影響因素,即粒子本身最好位置和全局最好位置的影響,建議取值c1=c2≈2c_1=c_2\approx 2c1?=c2?2。

    4.2 粒子群算法優化的變種

    粒子群算法提出以后,經過了不斷地完善和修改。其中一種是收斂因子的粒子群優化算法,其更新速度的公式為:

    vi(k+1)=κ(ωvi(k)+c1ri(k)°(pi(k)?xi(0))+c2si(k)(gi(k)?xi(k)))\mathbf{v}^{(k+1)}_i=\kappa (\omega \mathbf{v}^{(k)}_i+c_1\mathbf{r}^{(k)}_i\circ (\mathbf{p}^{(k)}_i-\mathbf{x}^{(0)}_i)+c_2 \mathbf{s}^{(k)}_i (\mathbf{g}^{(k)}_i-\mathbf{x}^{(k)}_i))vi(k+1)?=κ(ωvi(k)?+c1?ri(k)?°(pi(k)??xi(0)?)+c2?si(k)?(gi(k)??xi(k)?))

    其中κ\kappaκ為收斂系數:

    κ=2∣2????2?4?∣\kappa =\frac{2}{|2-\phi -\sqrt{\phi^2-4\phi}|}κ=2????2?4??2?

    其中?=c1+c2,?&gt;4\phi =c_1+c_2,\phi&gt;4?=c1?+c2?,?>4,收斂系數的作用在于加快收斂。

    實際應用中往往希望速度能有一個上限vmaxv_{max}vmax?,之后公式里的速度更新為:

    min{vmax,max{?vmax,v}}min\{v_{max},max\{-v_{max},v\}\}min{vmax?,max{?vmax?,v}}

    5. 遺傳算法

    5.1 有關術語和定義

    染色體和表達模式

    遺傳算法并不是直接針對約束集Ω\OmegaΩ中點進行操作,而是對這些點進行編碼后進行操作。

    具體而言是將Ω\OmegaΩ映射為一個字符串的集合,這些字符串是等長的,稱為染色體。

    每個染色體是從一個字符串集合中提取的,該集合稱為字符表,如常用的二進制字符表{0,1},此時染色體就是二進制字符串。

    每個染色體對應一個目標函數值,稱為染色體的適應度。

    字符串的長度、字符表和編碼方式統稱為表達模式。

    一定數量的染色體構成了初始種群P(0)P(0)P(0),之后對齊進行交叉和變異操作,在經過k次迭代之后,計算整個種群的適應度,并按照如下兩個步驟構造一個新的種群P(k+1)P(k+1)P(k+1)

    選擇和進化步驟

    選擇——將表現好的染色體選擇出來放到另一個地方

    • 輪盤賭模式
    • 錦標賽模式

    輪盤賭模式

    選擇的過程是將P(k)P(k)P(k)種群中生成M(k)M(k)M(k)種群,兩個種群中的染色體數量相同,都為N,這意味表現好的染色體會被重復選入M(k),每個染色體被選擇的概率為:

    f(xi(k))∑f(xi(k))\frac{f(\mathbf{x}^{(k)}_i)}{\sum f(\mathbf{x}^{(k)}_i)}f(xi(k)?)f(xi(k)?)?

    即個體的適應度與種群的適應度間的比值。

    錦標賽模式:

    從P(k)中隨機選擇兩個染色體,比較他們的適應度,將表現好的放入M(k)中,不斷進行這種操作,直到M(k)中的染色體數量為N。

    進化——對M(k)中的染色體進行交叉和變異

    交叉:從配對池M(k)中選擇“父代”染色體,選擇一個交叉點,交叉后生成“子代”,之后利用子代的染色體替代配對池中的染色體。

    變異:從配對池中抽取染色體,并以一定概率隨機改變其中的某個元素,產生變異。

    5.2 遺產算法步驟

  • k:=0k:=0k:=0,產生一個初始種群P(0)
  • 評估P(k),即計算種群中每個個體的適應度
  • 如果滿足停止條件就停止
  • 從P(k)中選擇M(k)
  • 進化M(k),構成新的種群P(k+1)
  • 令k=k+1,返回到第2步
  • 流程圖如下所示:

    在遺傳算法的迭代過程中,持續追蹤當前為止最好的染色體,即適應度最高的染色體。在一次迭代后,當前為止最好的染色體作為最優解的備選。實際上,甚至可以將其復制到新一代種群中。這是精英主義者的做法,這種精英主義的策略容易導致種群被“超級染色體”主導。但是,實際應用經驗表明,精英主義的策略很多時候可以提高算法的性能。

    遺傳算法和其它優化算法有如下不同:

    第一,不需要計算目標函數的導數(全局搜索的其他方法也有這個性質)。

    第二,在每次迭代中,采用的是隨機操作(與其他隨機搜索方法是一致的)。

    第三,每次迭代是利用一組點而不是一個點開展搜索(與粒子群優化算法相似)。

    第四,對約束集進行編碼,而不是直接在約束集本身上開展搜索。

    總結

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

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