官术网_书友最值得收藏!

3.2 SCA算法原理

一般來說,基于群體的優化技術是以一組隨機解開始優化過程的。該組隨機解由目標函數反復求值,并由優化技術的核心規則集進行改進。由于基于群體的優化技術是隨機地尋找優化問題的最優解的,因此不能保證在每次運行中都找到一個解。然而,隨著隨機解的數量和優化步驟(迭代)的增加,找到全局最優解的概率將增加。

盡管不同的基于隨機解的優化算法之間存在差異,但其共同點是將優化過程劃分為兩個階段:探索階段與開發階段[164]。在探索階段,一種優化算法將解集中的隨機解突然結合起來,以較高的隨機性尋找搜索空間的有希望區域。在開發階段,隨機解是逐漸變化的,隨機變化要比探索階段小得多。

SCA算法是一種基于群體的優化算法,它主要依賴正余弦算子使搜索代理朝目標方向移動。該算法基于以下位置更新方程:

式中,為第t次迭代時,當前解在第i維中的位置;r1r3為隨機數;為目標點在第i維中的位置。于是有:

式中,r4是[0,1]中的一個隨機數。

如式(3.3)所示,SCA中有4個主要參數:r1r4r1指示下一個位置s區域(或移動方向),該區域可以位于解和目標之間的空間,也可以位于目標之外。r2定義了朝向目標或遠離目標移動的距離。為了隨機地加強(r3>1)或減弱(r3<1)目標在定義距離時的影響,r3為目標帶來一個隨機權重。最后,在式(3.3)中,r4在正弦分量和余弦分量之間均勻切換。

由于式(3.3)中使用了正弦函數和余弦函數,所以這個算法被命名為正余弦算法(SCA)。圖3.1顯示了該算法如何在搜索空間中定義兩個解之間的空間。需要注意的是,雖然圖3.1中顯示了一個二維模型,但實際上可以擴展到更高的維度。正弦函數和余弦函數的循環模式允許一個解圍繞另一個解重新定位。這可以保證利用兩個解之間定義的空間。為了探索搜索空間,解還應該能夠在其對應目標之間的空間之外進行搜索。

圖3.1 朝向目標或遠離目標

從圖3.1可以看出,當搜索代理進入[-2,1]和(1,2)時,當前解將離開目標,探索搜索空間;但是,當搜索代理在[-1,1]中移動時,當前的解將向目標移動并利用搜索空間。

算法應該能夠平衡探索和開發,找到搜索空間中有希望的區域,并最終收斂到全局最優。眾所周知,探索和開發階段尋求相互矛盾的目標。因此,為了平衡探索和開發,在優化過程中利用下式自適應地改變r1的值:

式中,t為當前迭代;T為最大迭代次數;a為常數。圖3.2顯示了隨著迭代次數的增加,正弦函數值和余弦函數值的范圍是如何減小的。

圖3.2 迭代次數的變化與正、余弦函數值的變化

從圖3.2可以看出,隨著迭代次數的增加,搜索空間的范圍逐漸縮小,開發變得越來越重要。此外,圖3.2(b)的范圍小于圖3.2(a)的范圍,這表明,a=2時比a=3時更容易進入搜索空間的開發階段,但探索能力較弱。也就是說,參數a決定了搜索空間的探索和開發之間的平衡。在本章中,將參數模型設為a=2。

SCA算法的偽代碼如算法3.1所示。該算法首先通過一組隨機解啟動優化的過程,然后保存到目前為止獲得的最佳解,將其指定為目標解,并更新與之相關的其他解。同時,隨著迭代次數的增加,對正弦函數值和余弦函數值的范圍進行了更新,以強調對搜索空間的開發。當迭代次數超過最大迭代次數時,算法終止優化過程。然而,任何其他終止條件,如最大迭代次數或得到的全局最優解的精度都可以被考慮。

算法3.1 SCA算法的偽代碼

通過以上介紹,從理論上可以確定優化問題的全局最優解,理由如下。

① SCA算法為給定的問題創建并改進了一組隨機解決方案,因此與基于個人的算法相比,SCA算法在本質上受益于較高的探索性能,從而避免了局部優化。

② 當正弦函數和余弦函數返回值大于或小于-1時,搜索空間的不同區域。

③ 當正弦函數和余弦函數返回值在-1和1之間時,搜索空間中有希望的區域被利用。

④ 該算法利用正弦函數和余弦函數的自適應范圍,實現了由探索到開發的平穩過渡。

⑤ 全局最優解的最佳逼近作為目標點存儲在一個變量中,在優化過程中不會丟失。

⑥ 由于解總是圍繞目前得到的最優解更新位置,所以在優化過程中搜索空間的最優區域是有趨勢的。

⑦ 由于該算法將優化問題視為黑盒問題,所以只要問題表述得當,就可以很容易地將其應用到不同領域的問題中。

為了說明SCA算法的收斂性能,選取23個基準函數(見附錄A)中的F1F9、F11F14進行測試。參數設置如下:種群大小為30;迭代次數為1000。測試函數和收斂曲線如圖3.3所示。

圖3.3 測試函數和收斂曲線

圖3.3 測試函數和收斂曲線(續)

從圖3.3中可以看出,單峰函數和多峰函數的測試中均具有明顯的收斂性。因此,可以將其用在目標跟蹤上,可看作在圖像上有多個變量時的求最優解問題。

主站蜘蛛池模板: 元阳县| 巴楚县| 革吉县| 黄浦区| 通山县| 湘阴县| 浦东新区| 偏关县| 竹北市| 峨边| 洛南县| 芦山县| 焦作市| 恭城| 崇礼县| 大方县| 广昌县| 湖南省| 涞源县| 阳信县| 青川县| 莆田市| 中江县| 长治市| 桐乡市| 兰溪市| 梅州市| 尼勒克县| 东莞市| 泸水县| 屯门区| 东乡| 湄潭县| 仪陇县| 和政县| 巴林左旗| 滕州市| 民县| 桂平市| 青川县| 乐山市|