量化軟件下載:赫茲量化中種群優(yōu)化算法---魚(yú)群搜索
1. 概述
魚(yú)群是聚集在一個(gè)地方的任何一堆魚(yú)的總稱。 魚(yú)類聚集可以是結(jié)構(gòu)化的,也可以是非結(jié)構(gòu)化的。 非結(jié)構(gòu)化聚集可能是一組混合物種和大小,它們隨機(jī)聚集在某些局部資源(如食物或筑巢地點(diǎn))附近。
此外,聚集相遇到一起,并如同社會(huì)般互動(dòng),那么可以說(shuō)它們就是團(tuán)體。 它們中的大多數(shù)處于其生命周期的同一階段,彼此積極接觸,并且隨時(shí)可以表現(xiàn)出對(duì)群體成員有用的生物活性和有組織的活動(dòng)。 與個(gè)體相對(duì)比,在更好地保護(hù)免受捕食者侵害和增加獲取食物的競(jìng)爭(zhēng)方面,群體生活的優(yōu)勢(shì)是在這兩者之間達(dá)成了折衷。
魚(yú)類在自然界中以若干種途徑形成群體。 按常規(guī),更喜歡由本物種的個(gè)體組成的較大團(tuán)體。 群落中任何在外貌上出格,或有某種形體差別的成員,都會(huì)成為捕食者的主要目標(biāo)。 這一事實(shí)解釋了為什么魚(yú)類更喜歡雷同個(gè)體的群體。 如此方式就實(shí)現(xiàn)了整個(gè)團(tuán)體的同質(zhì)化。
當(dāng)魚(yú)類以相同的速度和方向同步游泳時(shí),團(tuán)體的組織非常嚴(yán)格。 發(fā)生這種情況是由于魚(yú)類都是相同的物種,按年齡和大小,彼此之間保持一定距離。 魚(yú)類團(tuán)體能夠執(zhí)行復(fù)雜的動(dòng)作,就好像它們具有群體智慧和共同的頭腦一樣。 團(tuán)體形成的微妙之處遠(yuǎn)未被完全理解,尤其是運(yùn)動(dòng)和喂養(yǎng)方式的各個(gè)方面。
已經(jīng)提出了許多假設(shè)來(lái)解釋群居行為,包括更好的定向、同步狩獵、迷惑捕食者、和降低被捕獵的風(fēng)險(xiǎn)。 魚(yú)群里的魚(yú)類似乎能分享信息,從而在近距離控制彼此的行為。 每條魚(yú)的攝食行為會(huì)迅速刺激其它魚(yú)積極尋找食物。 團(tuán)聚的魚(yú)群在細(xì)長(zhǎng)的方陣中游弋,經(jīng)常快速上升和下降,并繞軸線旋轉(zhuǎn),同時(shí)它們改變魚(yú)群的形狀,避免相互碰撞。 這種機(jī)動(dòng)需要一個(gè)非??焖俚捻憫?yīng)系統(tǒng)。 團(tuán)體生活方式意味著魚(yú)類擁有感官系統(tǒng),可以立即對(duì)它們感應(yīng)到與鄰居相對(duì)位置的微小變化,并做出反應(yīng)。
為了創(chuàng)建更完整的圖片,以這種行為進(jìn)行數(shù)學(xué)建模。 最常見(jiàn)的數(shù)學(xué)模型假設(shè)團(tuán)體中的個(gè)體生物遵循三個(gè)基本規(guī)則:
移動(dòng)方向與鄰居相同
始終與鄰居保持近距離
避免與鄰居發(fā)生碰撞
團(tuán)聚的魚(yú)群如何選擇游弋方向的問(wèn)題仍未解決。 在遷移過(guò)程中,似乎大多數(shù)成員都知道該去哪里。如果一個(gè)團(tuán)體里的所有成員都同樣意識(shí)到食物的可用性,那么小型組群中仍然有一些領(lǐng)導(dǎo)者比其它鄰居更大膽。 這種團(tuán)體行為促使眾多研究人員不僅創(chuàng)建出一個(gè)數(shù)學(xué)模型,而且還創(chuàng)建了一個(gè)解決各種優(yōu)化問(wèn)題的算法模型。
2. 算法說(shuō)明
魚(yú)群搜索(FSS)是群體智能算法的一個(gè)子家族,屬于元啟發(fā)式算法類。 它由 Bastos Filho 和 Lima Neto 于 2008 年提出,并于 2009 年首次發(fā)表。 在 FSS 中,簡(jiǎn)單的代理者被稱為魚(yú),每條魚(yú)都有一個(gè)權(quán)重,代表其在搜索過(guò)程中取得“成功”。 權(quán)重的數(shù)值和變化會(huì)影響個(gè)體和團(tuán)體運(yùn)動(dòng)。 內(nèi)置的配食和協(xié)調(diào)的行動(dòng)機(jī)制迫使團(tuán)體朝著正梯度的方向前進(jìn),以增加權(quán)重,并找到局部和全局的最佳地點(diǎn)。 FSS 是為多模態(tài)搜索空間中的連續(xù)優(yōu)化問(wèn)題而開(kāi)發(fā)的。 這也促使其他研究人員提出了解決其他問(wèn)題的選擇,例如二元問(wèn)題的優(yōu)化和多目標(biāo)優(yōu)化。
在 FSS 算法中,可以簡(jiǎn)化為想象魚(yú)類在有條件的水族箱中游泳,水族箱的外壁是所研究函數(shù)定義域的邊界。 魚(yú)的權(quán)重是衡量成功尋找食物(解)的指標(biāo)。 此外,它還扮演著魚(yú)的記憶作用。 權(quán)重的存在是算法的主要思想,也是與一群粒子的區(qū)別。 FSS 算法的這一特性消除了查找和修復(fù)全局最佳解的需要,就像一群粒子一樣。
FSS 算法的算子分為兩組: - 投喂算子(feeding operator)正式確定區(qū)域勘探的成功 - 游泳算子(swimming operators)為單個(gè)魚(yú)和整個(gè)團(tuán)體實(shí)現(xiàn)遷移算法
投喂算子計(jì)算魚(yú)的權(quán)重。 基本思想是讓魚(yú)群朝正梯度“游弋”,以便“進(jìn)食”并“增重”。 總的來(lái)說(shuō),權(quán)重較大的魚(yú)對(duì)整個(gè)搜索過(guò)程的影響更大,這會(huì)導(dǎo)致魚(yú)群質(zhì)量的中心在迭代中向搜索空間中更好的位置移動(dòng)。 給定迭代中的權(quán)重增量與適應(yīng)度函數(shù)值的歸一化差值成正比:
fishes [f].weight = fishes [f].weight + (fishes [f].delta_fitness / max_delta_fitness);
其中:
weight - 魚(yú)的權(quán)重
delta_fitness - 適應(yīng)度函數(shù)值之間的差值
max_delta_fitness - 所有魚(yú)之間適應(yīng)度函數(shù)差值的最大值
浮動(dòng)算子(Floating operators)根據(jù)運(yùn)動(dòng)類型分為三種類型:
- 個(gè)體; - 本能集體; - 集體意志;
個(gè)體游弋可以解釋為魚(yú)在當(dāng)前位置附近進(jìn)行局部搜索。 個(gè)體的運(yùn)動(dòng)矢量是隨機(jī)定向的,并且具有不同的值。
fishes [f].new_position [d] = fishes [f].current_position [d] + step_ind [d] * r;
其中:
new_position - 相應(yīng)坐標(biāo)處的新位置
current_position - 相應(yīng)坐標(biāo)上的當(dāng)前位置
step_ind - 個(gè)體移動(dòng)步驟的計(jì)算為
initial_step_ind * (rangeMax [d] - rangeMin [d]);
其中:
initial_step_ind - 個(gè)體運(yùn)動(dòng)的算法參數(shù)
rangeMax and rangeMin - 優(yōu)化的參數(shù)值范圍
r - 隨機(jī)數(shù)值 [-1.0;1.0]
示意性地,個(gè)體游弋如圖例 1 所示。

編輯切換為居中
圖例 1. 個(gè)體游弋 每條魚(yú)的運(yùn)動(dòng)向量是隨機(jī)方向的,并且具有不同的標(biāo)量值
個(gè)體游弋后,測(cè)量適應(yīng)度函數(shù)。 如果魚(yú)的最終位置沒(méi)有改善,那么我們認(rèn)為這條特殊的魚(yú)沒(méi)有任何運(yùn)動(dòng),它仍然停在原地。 只有那些改善了適應(yīng)度函數(shù)的魚(yú)才會(huì)移動(dòng)到新的位置。
個(gè)體游弋完成后,執(zhí)行本能集體運(yùn)動(dòng)算子。 我們先看一下圖例 2。

編輯切換為居中
圖例 2. 本能集體游弋:其運(yùn)動(dòng)特征適配于所有相對(duì)于質(zhì)心G 的方向和幅度相同的魚(yú)類。
本能集體運(yùn)動(dòng)是為了調(diào)整魚(yú)群團(tuán)的一般位置,同時(shí)考慮到上一次迭代中每條魚(yú)的適應(yīng)度函數(shù)的變化。 新坐標(biāo)的計(jì)算方法如下:
fishes [f].new_position [d] = fishes [f].current_position [d] + collective_instinct [d];
其中:
new_position - 魚(yú)在相應(yīng)坐標(biāo)處的新位置
current_position - 相應(yīng)坐標(biāo)上的當(dāng)前位置
collective_instinct - 沿相應(yīng)坐標(biāo)的移動(dòng)量,計(jì)算公式為:
collective_instinct [d] = fishes [f].delta_position [d] * fishes [f].delta_fitness;
其中:
delta_position - 在個(gè)體游弋階段獲得的當(dāng)前坐標(biāo)與先前位置之間的差值
delta_fitness - 個(gè)體游弋時(shí)當(dāng)前位置和前一個(gè)位置的適應(yīng)度函數(shù)變化
本能集體游弋正式將一群魚(yú)群團(tuán)同步移動(dòng)到新地方,從而建立尋找食物的新地點(diǎn),而個(gè)體運(yùn)動(dòng)可以改善局部的情況。
現(xiàn)在,我們來(lái)研究集體意志游弋。 它分為兩種類型:
- 從質(zhì)心 — 如果與之前的位置相比,團(tuán)體的整體位置沒(méi)有改善,而魚(yú)群向兩側(cè)擴(kuò)散,象征著進(jìn)一步尋找食物(圖例 3) - 如果發(fā)生改善,則移動(dòng)到質(zhì)心。 然后魚(yú)群移動(dòng)到質(zhì)心,擠壓成環(huán),象征著對(duì)獵物的攻擊。 從算法上講,這意味著完善優(yōu)化問(wèn)題的解(圖例 4)。