粒子群演算法tsp
⑴ 粒子群演算法
粒子群演算法(particle swarm optimization,PSO)是計算智能領域中的一種生物啟發式方法,屬於群體智能優化演算法的一種,常見的群體智能優化演算法主要有如下幾類:
除了上述幾種常見的群體智能演算法以外,還有一些並不是廣泛應用的群體智能演算法,比如螢火蟲演算法、布穀鳥演算法、蝙蝠演算法以及磷蝦群演算法等等。
而其中的粒子群優化演算法(PSO)源於對鳥類捕食行為的研究,鳥類捕食時,找到食物最簡單有限的策略就是搜尋當前距離食物最近的鳥的周圍。
設想這樣一個場景:一群鳥在隨機的搜索食物。在這個區域里只有一塊食物,所有的鳥都不知道食物在哪。但是它們知道自己當前的位置距離食物還有多遠。那麼找到食物的最優策略是什麼?最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。
Step1:確定一個粒子的運動狀態是利用位置和速度兩個參數描述的,因此初始化的也是這兩個參數;
Step2:每次搜尋的結果(函數值)即為粒子適應度,然後記錄每個粒子的個體歷史最優位置和群體的歷史最優位置;
Step3:個體歷史最優位置和群體的歷史最優位置相當於產生了兩個力,結合粒子本身的慣性共同影響粒子的運動狀態,由此來更新粒子的位置和速度。
位置和速度的初始化即在位置和速度限制內隨機生成一個N x d 的矩陣,而對於速度則不用考慮約束,一般直接在0~1內隨機生成一個50x1的數據矩陣。
此處的位置約束也可以理解為位置限制,而速度限制是保證粒子步長不超限制的,一般設置速度限制為[-1,1]。
粒子群的另一個特點就是記錄每個個體的歷史最優和種群的歷史最優,因此而二者對應的最優位置和最優值也需要初始化。其中每個個體的歷史最優位置可以先初始化為當前位置,而種群的歷史最優位置則可初始化為原點。對於最優值,如果求最大值則初始化為負無窮,相反地初始化為正無窮。
每次搜尋都需要將當前的適應度和最優解同歷史的記錄值進行對比,如果超過歷史最優值,則更新個體和種群的歷史最優位置和最優解。
速度和位置更新是粒子群演算法的核心,其原理表達式和更新方式:
每次更新完速度和位置都需要考慮速度和位置的限制,需要將其限制在規定范圍內,此處僅舉出一個常規方法,即將超約束的數據約束到邊界(當位置或者速度超出初始化限制時,將其拉回靠近的邊界處)。當然,你不用擔心他會停住不動,因為每個粒子還有慣性和其他兩個參數的影響。
粒子群演算法求平方和函數最小值,由於沒有特意指定函數自變數量綱,不進行數據歸一化。
⑵ TSP中用蟻群演算法和遺傳演算法有區別么
TSP,只是一個普通但很經典的NP-C問題。具有大的難以想像的解空間。一般的branch-and-bound演算法是很難搞定的。於是,人們嘗試智能演算法,包括遺傳演算法,蟻群演算法,粒子群演算法等。遺傳演算法和蟻群演算法都是基於種群的。但是這兩個演算法有著本質區別。遺傳演算法的進化機制是基於個體競爭,而蟻群演算法的搜索機制則是螞蟻之間的信息素傳導機制下的群體合作。因此,蟻群演算法,粒子群演算法,人工魚群演算法等,被歸納為群智能演算法,成為了一個有別於遺傳演算法的另一個進化計算領域的分支。由於搜索機制的不同,這兩種演算法對於不同的問題,具有不同的效率。就拿標准遺傳演算法和標准蟻群演算法來說,應該是蟻群演算法更適合求解TSP。然而,無論是遺傳演算法還是蟻群演算法,都有大量的變種演算法或者稱為改進演算法,所以很難簡單的說誰更適合TSP。
記得採納啊
⑶ 粒子群演算法簡單介紹
粒子群演算法(也稱粒子群優化演算法(particle swarm optimization, PSO)),模擬鳥群隨機搜索食物的行為。粒子群演算法中,每個優化問題的潛在解都是搜索空間中的一隻鳥,叫做「粒子」。所有的粒子都有一個由被優化的函數決定的適應值(fitness value),每個粒子還有一個速度決定它們「飛行」的方向和距離。
粒子群演算法初始化為一群隨機的粒子(隨機解),然後根據迭代找到最優解。每一次迭代中,粒子通過跟蹤兩個極值來更新自己:第1個是粒子本身所找到的最優解,這個稱為個體極值;第2個是整個種群目前找到的最優解,這個稱為全局極值。也可以不用整個種群,而是用其中的一部分作為粒子的鄰居,稱為局部極值。
假設在一個D維搜索空間中,有N個粒子組成一個群落,其中第i個粒子表示為一個D維的向量:
第i個粒子的速度表示為:
還要保存每個個體的已經找到的最優解 ,和一個整個群落找到的最優解 。
第i個粒子根據下面的公式更新自己的速度和位置:
其中, 是個體已知最優解, 是種群已知最優解, 為慣性權重, , 為學習因子(或加速常數 acceleration constant), , 是[0,1]范圍內的隨機數。
式(1)由三部分組成:
⑷ 粒子群演算法原理
粒子群算悉銀法原理如下:
粒子群優化(Particle Swarm Optimization,PSO)演算法是1995年由美國學者Kennedy等人提出的,該演算法是模擬鳥類覓食等群體智能行為的智能優化演算法。在自然界中,鳥群在覓食的時候,一般存在個體和群體協同的行為。
每個粒子都旦薯會向兩個值學習,一個值是個體的歷史最優值 ;另一個值是群體的歷史最優值(全局最優值) 。粒子會根據這兩個值來調整自身的速度和位置,而每個位置的優劣都是根據適應度值來確定的。適應度函數是優化的目標函數。
⑸ 粒子群演算法
粒子群演算法(Particle Swarm Optimization),又稱鳥群覓食演算法,是由數學家J. Kennedy和R. C. Eberhart等開發出的一種新的進化演算法。它是從隨機解開始觸發,通過迭代尋找出其中的最優解。本演算法主要是通過適應度來評價解的分數,比傳統的遺傳演算法更加的簡單,它沒有傳統遺傳演算法中的「交叉」和「變異」等操作,它主要是追隨當前搜索到的最優值來尋找到全局最優值。這種演算法實現容易,精度高,收斂快等特點被廣泛運用在各個問題中。
粒子群演算法是模擬鳥群覓食的所建立起來的一種智能演算法,一開始所有的鳥都不知道食物在哪裡,它們通過找到離食物最近的鳥的周圍,再去尋找食物,這樣不斷的追蹤,大量的鳥都堆積在食物附近這樣找到食物的幾率就大大增加了。粒子群就是這樣一種模擬鳥群覓食的過程,粒子群把鳥看成一個個粒子,它們擁有兩個屬性——位置和速度,然後根據自己的這兩個屬性共享到整個集群中,其他粒子改變飛行方向去找到最近的區域,然後整個集群都聚集在最優解附近,最後最終找到最優解。
演算法中我們需要的數據結構,我們需要一個值來存儲每個粒子搜索到的最優解,用一個值來存儲整個群體在一次迭代中搜索到的最優解,這樣我們的粒子速度和位置的更新公式如下:
其中pbest是每個粒子搜索到的最優解,gbest是整個群體在一次迭代中搜索到的最優解,v[i]是代表第i個粒子的速度,w代表慣性系數是一個超參數,rang()表示的是在0到1的隨機數。Present[i]代表第i個粒子當前的位置。我們通過上面的公式不停的迭代粒子群的狀態,最終得到全局最優解
⑹ 粒子群優化演算法
粒子群演算法 的思想源於對鳥/魚群捕食行為的研究,模擬鳥集群飛行覓食的行為,鳥之間通過集體的協作使群體達到最優目的,是一種基於Swarm Intelligence的優化方法。它沒有遺傳演算法的「交叉」(Crossover) 和「變異」(Mutation) 操作,它通過追隨當前搜索到的最優值來尋找全局最優。粒子群演算法與其他現代優化方法相比的一個明顯特色就是所 需要調整的參數很少、簡單易行 ,收斂速度快,已成為現代優化方法領域研究的熱點。
設想這樣一個場景:一群鳥在隨機搜索食物。已知在這塊區域里只有一塊食物;所有的鳥都不知道食物在哪裡;但它們能感受到當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢?
1. 搜尋目前離食物最近的鳥的周圍區域
2. 根據自己飛行的經驗判斷食物的所在。
PSO正是從這種模型中得到了啟發,PSO的基礎是 信息的社會共享
每個尋優的問題解都被想像成一隻鳥,稱為「粒子」。所有粒子都在一個D維空間進行搜索。
所有的粒子都由一個fitness function 確定適應值以判斷目前的位置好壞。
每一個粒子必須賦予記憶功能,能記住所搜尋到的最佳位置。
每一個粒子還有一個速度以決定飛行的距離和方向。這個速度根據它本身的飛行經驗以及同伴的飛行經驗進行動態調整。
粒子速度更新公式包含三部分: 第一部分為「慣性部分」,即對粒子先前速度的記憶;第二部分為「自我認知」部分,可理解為粒子i當前位置與自己最好位置之間的距離;第三部分為「社會經驗」部分,表示粒子間的信息共享與合作,可理解為粒子i當前位置與群體最好位置之間的距離。
第1步 在初始化范圍內,對粒子群進行隨機初始化,包括隨機位置和速度
第2步 根據fitness function,計算每個粒子的適應值
第3步 對每個粒子,將其當前適應值與其個體歷史最佳位置(pbest)對應的適應值作比較,如果當前的適應值更高,則用當前位置更新粒子個體的歷史最優位置pbest
第4步 對每個粒子,將其當前適應值與全局最佳位置(gbest)對應的適應值作比較,如果當前的適應值更高,則用當前位置更新粒子群體的歷史最優位置gbest
第5步 更新粒子的速度和位置
第6步 若未達到終止條件,則轉第2步
【通常演算法達到最大迭代次數或者最佳適應度值得增量小於某個給定的閾值時演算法停止】
粒子群演算法流程圖如下:
以Ras函數(Rastrigin's Function)為目標函數,求其在x1,x2∈[-5,5]上的最小值。這個函數對模擬退火、進化計算等演算法具有很強的欺騙性,因為它有非常多的局部最小值點和局部最大值點,很容易使演算法陷入局部最優,而不能得到全局最優解。如下圖所示,該函數只在(0,0)處存在全局最小值0。