改進方法學習

2021-10-25 07:18:32 字數 1658 閱讀 7883

根據人工蜂群演算法的機制我們可以看出,演算法的初始化對演算法的影響較大,初始化的蜜源如果在解空間中分布的不夠均勻,覆蓋解空間的範圍小,將會限制演算法在解空間中的搜尋範圍,導致對解空間中的一些區域搜尋不到,影響演算法的全域性搜尋能力。初始化中若蜜源分布過近會影響演算法的效能。如圖所示

發生如上圖所示的情況,初始種群中 a,b 出現扎堆現象,a,b 的搜尋範圍的很大一部分發生了重疊,這將會導致多個個體對同一區域進行重複搜尋,浪費搜尋資源,並且還有可能導致解空間中一些其他區域因為覆蓋不到而無法搜尋。因此,為了使初始化的種群在解空間中分布的更加均勻,本文基於貪心演算法的貪心選擇思想設計了一種小範圍淘汰的初始化方法,通過比較種群中距離較近的兩個個體的優劣程度,淘汰掉較差的個體,避免了種群中的個體因為距離過近所產生的重複搜尋現象。具體操作方法如下:

(1)初始化若干倍種群規模的蜜源;

(2)計算每乙個蜜源的適應度值及蜜源兩兩之間的距離;

(3)找出距離最近的兩個蜜源,比較兩個蜜源的適應度值並剔除掉適應度值較低的那乙個;

(4)重複第(3)步直至剩下種群規模規定的數量的蜜源。

這樣做可以將蜜源盡可能的在解空間中分布均勻,使用更少的個體覆蓋了更大範圍的解空間,增強演算法對解空間的全域性搜尋能力。

為了改善人工蜂群演算法搜尋隨機性過強,對重點區域開採能力弱的缺點,通過在演算法中新增學習機制是一種較好地解決方法,學習機制的作用主要表現為種群中的個體通過向更優個體趨同的方式,以一定的方向對解空間進行搜尋,以此來降低演算法搜尋的隨機性,增強演算法的區域性開採能力。但是基於人工蜂群演算法的特性及上文中對於演算法的改進分析可以看出,直接對群體最優進行學習並不是一種最佳策略。

綜上所述,提出一種基於動態鄰域擾動學習的搜尋機制,具體操作方法如下:

首先確定乙個鄰域範圍 m,在對乙個蜜源進行搜尋時,找出種群中m 個與當前蜜源最近的蜜源和待搜尋蜜源組成鄰域,鄰域的劃分方法如圖所示:

由上圖可知,對解空間中的蜜源x 進行搜尋時,首先根據設定好的鄰域範圍m,找到m個與當前蜜源距離最近的蜜源,將這些蜜源與x 劃分在一起,組成 x 的鄰域。基於此鄰域對 x 執行如下的搜尋方式:

判斷當前蜜源 x 是否是為此鄰域中的最優蜜源,如果是,則採用下式對蜜源進行搜尋:

是當前鄰域中的最優蜜源,則引導x向著群體最優的方向進行搜尋。

在採用本文提出的動態鄰域學習機制進行搜尋時,在每一次迭代過程中,每乙個蜜源所處的鄰域都會不停地變化,但是鄰域範圍始終圍繞在當前所搜尋的蜜源附近,搜尋範圍始終保持乙個合理水平,搜尋精細程度大大提高。通過個體向鄰域最優學習,鄰域最優向群體最優的學習的方式,使群體最優的資訊通過鄰域最優在整個解空間中擴散,指導每乙個個體進行搜尋,降低搜尋的隨機性,同時又控制了每乙個個體對群體最優的學習程度,有效避免了過度學習所造成的陷入區域性最優現象。為了對搜尋方式中存在的不足進行進一步改善,本文在搜尋公式中加入了高斯擾動因子:

如上圖所示,高斯隨機數是一種正負對稱,且分布概率從零開始,由近及遠逐漸降低的隨機數,本文對於上文中提到的搜尋公式進行高斯擾動的目的正是利用了高斯隨機數分布的這兩個特點。具體的作用如圖所示

swift方法學習

1.例項方法 2.型別方法 型別方法和oc中的類方法相似 結構體和列舉能夠定義方法是swift與oc c的主要區別之一。在oc中,類是唯一能定義方法的型別。但在swift中,你不僅能選擇是否要定義乙個類 結構體 列舉,還能靈活的在你建立的型別 類 結構體 列舉 上定義方法。例項方法 例項方法的語法和...

NIO ByteBuffer方法學習

建立heapbytebuffer例項,大小為1024位元組 bytebuffer heapbytebuffer bytebuffer.allocate 1024 建立directbytebuffer例項,大小為1024位元組 這裡的bytebuffer是directbytebuffer,不是heap...

C 擴充套件方法 學習

c 中可以定義擴充套件方法,還可以為集合做擴充套件方法。示例如下 using system using system.collections.generic using myspace 注意 引入擴充套件方法的空間 namespace con 1 先生。with xugang console.wri...