粒子群優化演算法c
㈠ 什麼是粒子群演算法
粒子群演算法,也稱粒子群優化演算法(Partical Swarm Optimization),縮寫為 PSO, 是近年來發展起來的一種新的進化演算法((Evolu2tionary Algorithm - EA)。PSO 演算法屬於進化演算法的一種,和遺傳演算法相似,它也是從隨機解出發,通過迭代尋找最優解,它也是通過適應度來評價解的品質,但它比遺傳演算法規則更為簡單,它沒有遺傳演算法的「交叉」(Crossover) 和「變異」(Mutation) 操作,它通過追隨當前搜索到的最優值來尋找全局最優。這種演算法以其實現容易、精度高、收斂快等優點引起了學術界的重視,並且在解決實際問題中展示了其優越性。設想這樣一個場景:一群鳥在隨機搜索食物。在這個區域里只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。 PSO從這種模型中得到啟示並用於解決優化問題。PSO中,每個優化問題的解都是搜索空間中的一隻鳥。我們稱之為「粒子」。所有的粒子都有一個由被優化的函數決定的適應值(fitness value),每個粒子還有一個速度決定他們飛翔的方向和距離。然後粒子們就追隨當前的最優粒子在解空間中搜索。 PSO 初始化為一群隨機粒子(隨機解)。然後通過迭代找到最優解。在每一次迭代中,粒子通過跟蹤兩個"極值"來更新自己。第一個就是粒子本身所找到的最優解,這個解叫做個體極值pBest。另一個極值是整個種群目前找到的最優解,這個極值是全局極值gBest。另外也可以不用整個種群而只是用其中一部分作為粒子的鄰居,那麼在所有鄰居中的極值就是局部極值。 粒子公式 在找到這兩個最優值時,粒子根據如下的公式來更新自己的速度和新的位置: v[] = w * v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) (a) present[] = persent[] + v[] (b) v[] 是粒子的速度, w是慣性權重,persent[] 是當前粒子的位置. pbest[] and gbest[] 如前定義 rand () 是介於(0, 1)之間的隨機數. c1, c2 是學習因子. 通常 c1 = c2 = 2. 程序的偽代碼如下 For each particle ____Initialize particle END Do ____For each particle ________Calculate fitness value ________If the fitness value is better than the best fitness value (pBest) in history ____________set current value as the new pBest ____End ____Choose the particle with the best fitness value of all the particles as the gBest ____For each particle ________Calculate particle velocity according equation (a) ________Update particle position according equation (b) ____End While maximum iterations or minimum error criteria is not attained 在每一維粒子的速度都會被限制在一個最大速度Vmax,如果某一維更新後的速度超過用戶設定的Vmax,那麼這一維的速度就被限定為Vmax
㈡ 粒子群演算法的優缺點
優點:PSO同遺傳演算法類似,是一種基於迭代的優化演算法。系統初始化為一組隨機解,通過迭代搜尋最優值。同遺傳演算法比較,PSO的優勢在於簡單容易實現,並且沒有許多參數需要調整。
缺點:在某些問題上性能並不是特別好。網路權重的編碼而且遺傳運算元的選擇有時比較麻煩。最近已經有一些利用PSO來代替反向傳播演算法來訓練神經網路的論文。
(2)粒子群優化演算法c擴展閱讀:
注意事項:
基礎粒子群演算法步驟較為簡單。粒子群優化演算法是由一組粒子在搜索空間中運動,受其自身的最佳過去位置pbest和整個群或近鄰的最佳過去位置gbest的影響。
對於有些改進演算法,在速度更新公式最後一項會加入一個隨機項,來平衡收斂速度與避免早熟。並且根據位置更新公式的特點,粒子群演算法更適合求解連續優化問題。
㈢ 離散粒子群優化演算法的背景和意義是什麼
定義粒子群優化演算法(Particle Swarm optimization,PSO)又翻譯為粒子群演算法、微粒群演算法、或微粒群優化演算法。是通過模擬鳥群覓食行為而發展起來的一種基於群體協作的隨機搜索演算法。通常認為它是群集智能 (Swarm intelligence, SI) 的一種。它可以被納入多主體優化系統 (Multiagent Optimization System, MAOS). 粒子群優化演算法是由Eberhart博士和kennedy博士發明。PSO模擬鳥群的捕食行為PSO模擬鳥群的捕食行為。一群鳥在隨機搜索食物,在這個區域里只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。從模型中得到的啟示PSO從這種模型中得到啟示並用於解決優化問題。PSO中,每個優化問題的解都是搜索空間中的一隻鳥。我們稱之為「粒子」。所有的粒子都有一個由被優化的函數決定的適應值(fitnessvalue),每個粒子還有一個速度決定他們飛翔的方向和距離。然後粒子們就追隨當前的最優粒子在解空間中搜索。PSO初始化PSO初始化為一群隨機粒子(隨機解),然後通過疊代找到最優解,在每一次疊代中,粒子通過跟蹤兩個「極值」來更新自己。第一個就是粒子本身所找到的最優解,這個解叫做個體極值pBest,另一個極值是整個種群目前找到的最優解,這個極值是全局極值gBest。另外也可以不用整個種群而只是用其中一部分最優粒子的鄰居,那麼在所有鄰居中的極值就是局部極值。編輯本段演算法介紹在找到這兩個最優值時, 粒子根據如下的公式來更新自己的速度和新的位置v[] = v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) (a)present[] = persent[] + v[] (b)v[] 是粒子的速度, persent[] 是當前粒子的位置. pbest[] and gbest[] 如前定義 rand () 是介於(0, 1)之間的隨機數. c1, c2 是學習因子. 通常 c1 = c2 = 2.程序的偽代碼如下For each particle____Initialize particleENDDo____For each particle________Calculate fitness value________If the fitness value is better than the best fitness value (pBest) in history____________set current value as the new pBest____End____Choose the particle with the best fitness value of all the particles as the gBest____For each particle________Calculate particle velocity according equation (a)________Update particle position according equation (b)____EndWhile maximum iterations or minimum error criteria is not attained在每一維粒子的速度都會被限制在一個最大速度Vmax,如果某一維更新後的速度超過用戶設定的Vmax,那麼這一維的速度就被限定為Vmax。編輯本段遺傳演算法和PSO的比較共同點①種群隨機初始化。②對種群內的每一個個體計算適應值(fitness value)。適應值與最優解的距離直接有關。③種群根據適應值進行復制 。④如果終止條件滿足的話,就停止,否則轉步驟② 。從以上步驟,我們可以看到PSO和遺傳演算法有很多共同之處。兩者都隨機初始化種群,而且都使用適應值來評價系統,而且都根據適應值來進行一定的隨機搜索。兩個系統都不是保證一定找到最優解。但是,PSO沒有遺傳操作如交叉(crossover)和變異(mutation),而是根據自己的速度來決定搜索。粒子還有一個重要的特點,就是有記憶。不同點與遺傳演算法比較,PSO的信息共享機制是很不同的。在遺傳演算法中,染色體(chromosomes)互相共享信息,所以整個種群的移動是比較均勻的向最優區域移動。在PSO中, 只有gBest (orlBest) 給出信息給其他的粒子, 這是單向的信息流動。整個搜索更新過程是跟隨當前最優解的過程。與遺傳演算法比較, 在大多數的情況下,所有的粒子可能更快的收斂於最優解。編輯本段人工神經網路和PSO定義人工神經網路(ANN)是模擬大腦分析過程的簡單數學模型,反向轉播演算法是最流行的神經網路訓練演算法。進來也有很多研究開始利用演化計算(evolutionary computation)技術來研究人工神經網路的各個方面。研究方面演化計算可以用來研究神經網路的三個方面:網路連接權重,網路結構(網路拓撲結構,傳遞函數),網路學習演算法。不過大多數這方面的工作都集中在網路連接權重,和網路拓撲結構上。在GA中,網路權重和/或拓撲結構一般編碼為染色體(Chromosome),適應函數(fitness function)的選擇一般根據研究目的確定。例如在分類問題中,錯誤分類的比率可以用來作為適應值優缺點演化計算的優勢在於可以處理一些傳統方法不能處理的例子例如不可導的節點傳遞函數或者沒有梯度信息存在。但是缺點在於:1、在某些問題上性能並不是特別好。2. 網路權重的編碼而且遺傳運算元的選擇有時比較麻煩。最近已經有一些利用PSO來代替反向傳播演算法來訓練神經網路的論文。研究表明PSO 是一種很有潛力的神經網路演算法。PSO速度比較快而且可以得到比較好的結果。而且還沒有遺傳演算法碰到的問題。舉例這里用一個簡單的例子說明PSO訓練神經網路的過程。這個例子使用分類問題的基準函數 (Benchmark function)IRIS數據集。(Iris 是一種鳶尾屬植物) 在數據記錄中,每組數據包含Iris花的四種屬性:萼片長度,萼片寬度,花瓣長度,和花瓣寬度,三種不同的花各有50組數據. 這樣總共有150組數據或模式。我們用3層的神經網路來做分類。現在有四個輸入和三個輸出。所以神經網路的輸入層有4個節點,輸出層有3個節點我們也可以動態調節隱含層節點的數目,不過這里我們假定隱含層有6個節點。我們也可以訓練神經網路中其他的參數。不過這里我們只是來確定網路權重。粒子就表示神經網路的一組權重,應該是4*6+6*3=42個參數。權重的范圍設定為[-100,100] (這只是一個例子,在實際情況中可能需要試驗調整).在完成編碼以後,我們需要確定適應函數。對於分類問題,我們把所有的數據送入神經網路,網路的權重有粒子的參數決定。然後記錄所有的錯誤分類的數目作為那個粒子的適應值。現在我們就利用PSO來訓練神經網路來獲得盡可能低的錯誤分類數目。PSO本身並沒有很多的參數需要調整。所以在實驗中只需要調整隱含層的節點數目和權重的范圍以取得較好的分類效果。
㈣ 粒子群優化的演算法參數
PSO參數包括:群體規模m,慣性權重w,加速常數c1和c2,最大速度Vmax,最大代數Gmax,解空間[Xmin Xmax]。
Vmax決定在當前位置與最好位置之間的區域的解析度(或精度)。如果Vmax太高,微粒可能會飛過好解,如果Vmax太小,微粒不能進行足夠的探索,導致陷入局部優值。該限制有三個目的:防止計算溢出;實現人工學習和態度轉變;決定問題空間搜索的粒度。
慣性權重w使微粒保持運動的慣性,使其有擴展搜索空間的趨勢,有能力探索新的區域。
加速常數c1和c2代表將每個微粒推向pbest和gbest位置的統計加速項的權重。低的值允許微粒在被拉回來之前可以在目標區域外徘徊,而高的值導致微粒突然的沖向或者越過目標區域。
如果沒有後兩部分,即c1 = c2 = 0,微粒將一直以當前的速度飛行,直到到達邊界。由於它只能搜索有限的區域,將很難找到好的解。
如果沒有第一部分,即w = 0,則速度只取決於微粒當前的位置和它們歷史最好位置pbest和gbest,速度本身沒有記憶性。假設一個微粒位於全局最好位置,它將保持靜止。而其它微粒則飛向它本身最好位置pbest和全局最好位置gbest的加權中心。在這種條件下,微粒群將統計的收縮到當前的全局最好位置,更象一個局部演算法。
在加上第一部分後,微粒有擴展搜索空間的趨勢,即第一部分有全局搜索的能力。這也使得w的作用為針對不同的搜索問題,調整演算法全局和局部搜索能力的平衡。
如果沒有第二部分,即c1 = 0,則微粒沒有認知能力,也就是「只有社會(social-only)」的模型。在微粒的相互作用下,有能力到達新的搜索空間。它的收斂速度比標准版本更快,但是對復雜問題,比標准版本更容易陷入局部優值點。
如果沒有第三部分,即c2 = 0,則微粒之間沒有社會信息共享,也就是「只有認知(cognition-only)」的模型。因為個體間沒有交互,一個規模為m的群體等價於m個單個微粒的運行。因而得到解的幾率非常小。
㈤ 粒子群優化演算法的參數設置
從上面的例子我們可以看到應用PSO解決優化問題的過程中有兩個重要的步驟: 問題解的編碼和適應度函數PSO的一個優勢就是採用實數編碼, 不需要像遺傳演算法一樣是二進制編碼(或者採用針對實數的遺傳操作.例如對於問題 f(x) = x1^2 + x2^2+x3^2 求解,粒子可以直接編碼為 (x1, x2, x3), 而適應度函數就是f(x). 接著我們就可以利用前面的過程去尋優.這個尋優過程是一個疊代過程, 中止條件一般為設置為達到最大循環數或者最小錯誤
PSO中並沒有許多需要調節的參數,下面列出了這些參數以及經驗設置
粒子數: 一般取 20–40. 其實對於大部分的問題10個粒子已經足夠可以取得好的結果, 不過對於比較難的問題或者特定類別的問題, 粒子數可以取到100 或 200
粒子的長度: 這是由優化問題決定, 就是問題解的長度
粒子的范圍: 由優化問題決定,每一維可是設定不同的范圍
Vmax: 最大速度,決定粒子在一個循環中最大的移動距離,通常設定為粒子的范圍寬度,例如上面的例子里,粒子 (x1, x2, x3) x1 屬於 [-10, 10], 那麼 Vmax 的大小就是 20
學習因子: c1 和 c2 通常等於 2. 不過在文獻中也有其他的取值. 但是一般 c1 等於 c2 並且范圍在0和4之間
中止條件: 最大循環數以及最小錯誤要求. 例如, 在上面的神經網路訓練例子中, 最小錯誤可以設定為1個錯誤分類, 最大循環設定為2000, 這個中止條件由具體的問題確定.
全局PSO和局部PSO: 我們介紹了兩種版本的粒子群優化演算法: 全局版和局部版. 前者速度快不過有時會陷入局部最優. 後者收斂速度慢一點不過很難陷入局部最優. 在實際應用中, 可以先用全局PSO找到大致的結果,再用局部PSO進行搜索.
另外的一個參數是慣性權重, 由Shi 和Eberhart提出, 有興趣的可以參考他們1998年的論文(題目: A modified particle swarm optimizer)。
㈥ 粒子群優化演算法C語言實現
隨著計算機技術的不斷發展,軟體的規模越來越大,隨之而來軟體的錯誤也越來越隱蔽,造成的後果也越來越嚴重。因此,提高軟體質量及可靠性己成為軟體工程領域的重要任務。而軟體測試則是保證軟體質量、提高軟體可靠性的關鍵。但軟體測試需要耗費巨大的人力、物力和時間,故提高軟體測試的自動化程度對於確保軟體開發質量、降低軟體開發成本都是非常重要的。其中,提高生成測試用例的自動化程度又是提高軟體測試自動化程度的關鍵。 本文分析了軟體測試中測試用例自動生成技術的發展現狀和粒子群優化演算法的基本原理及實現步驟,並詳細研究了幾種重要的改進的粒子群優化演算法。在此基礎上,改進了基本粒子群優化演算法,提出了基於改進的粒子群優化演算法的測試用例自動生成系統框架,並給出了基於改進的粒子群優化演算法的測試用例自動生成演算法。最後,採用C語言編程實現了基於改進的粒子群優化演算法的測試用例自動生成演算法,用具體實例對其進行了實驗,並對結果數據進行了分析。 本文提出的基於改進的粒子群優化演算法的測試用例自動生成演算法具有簡單、易實現、設置參數少和收斂速度快等特點。實驗結果表明,使用本文提出的演算法測試用例自動生成的效果明顯優於遺傳演算法等測試用例自動生成演算法。 本文提出的基於改進的粒子群優化演算法的測試用例自動生成演算法提高了測試用例自動生成的效率,但該演算法只實現了數值類型的數據,而且還存在手動操作問題,這將是作者下一步的主要研究方向。
㈦ 粒子群優化演算法的優化參數范圍怎麼確定
參數設置時:
LB=[0.5 1 0.3 1]';
UB=[1 2 0.8 1.5]';
這樣就確定了參數范圍了
㈧ 最優化 粒子群法
運行結果。
function[xm,fv]=PSO(fitness,N,c1,c2,w,M,D)
%[xm,fv]=PSO(@fitness,40,2,2,0.8,1000,2)
%
%求解無約束優化問題
%fitness待優化目標函數
%N粒子數目,
%cX學習因子
%W慣性權重
%M最大迭代次數
%D自由變數的個數
%xm目標函數取最小值時的自由變數
%fv目標函數的最小值
%Detailedexplanationgoeshere
tic;
formatlong;
%------step1.初始化種群的個體------------
x=zeros(N,D);
v=zeros(N,D);
fori=1:N
forj=1:D
x(i,j)=100*rand-50;%隨機初始化位置
v(i,j)=100*rand-50;%隨機初始化速度
end
end
%------step2.先計算各個粒子的適應度,並初始化Pi和PgPg為全局最優-------------
p=zeros(N,1);
%y=zeros(N,D);
fori=1:N
p(i)=fitness(x(i,:));
%y(i,:)=x(i,:);
end
y=x;
pg=x(N,:);%Pg為全局最優
fori=1:(N-1)
iffitness(x(i,:))<fitness(pg)
pg=x(i,:);
end
end
%------step3.進入主要循環,按照公式依次迭代------------
%Pbest=zeros(M,1);
fort=1:M
fori=1:N
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
fork=1:D
ifv(i,k)>10%10=vmax
v(i,k)=10;
end
end
x(i,:)=x(i,:)+v(i,:);
fork=1:D
ifx(i,k)>50%50=xmax
x(i,k)=31;
end
end
iffitness(x(i,:))<p(i)
p(i)=fitness(x(i,:));
y(i,:)=x(i,:);
end
ifp(i)<fitness(pg)
pg=y(i,:);
end
end
%Pbest(t)=fitness(pg);
end
xm=pg';
fv=fitness(pg);
toc;
㈨ C++的粒子群優化演算法運行結果是怎麼樣的
它是每進化一代就差找一次,能否找到結果是看你設置的最大迭代次數和終止條件是否滿足。你可以看pso演算法的兩個公式。
演算法運行和用什麼語言沒關系。
PSO的具體實現步驟如下:
Step1: 參數初始化。
在初始范圍內,隨機初始化一群粒子。即設置種群規模m,粒子的初始位置 x1,x2,...,xm,初始速度v1,,v2…,vm,並將各粒子的個體最優pi設置為初始位置,全局最優值pg設為pi中的最優值。
Step2: 根據速度和位置公式對粒子的速度和位置進行更新。
Step3: 計算每個粒子的適應值。
Step4: 判斷每個粒子的個體最優值。
對每個粒子,將其當前的適應值和上一次的個體最優值pi進行比較,如果當前適應值優於pi,則令pi取當前適應值,否則,個體最優值仍為原來的pi(其中i=1,2,...,m)。
Step5:判斷整個粒子群的全局最優值。
比較當前每個粒子的個體最優值,找出當前迭代中的全局最優值,與歷史全局最優pg比較,如果優於pg,則令pg取當前迭代中的全局最優值,否則,全局最優pg還取原來的值。
Step6: 判斷是否滿足終止條件。如果滿足則轉入Step7;否則,轉Step2,繼續迭代。
Step7: 輸出全局最優解,演算法進行結束。
㈩ 粒子群優化參數尋優
研究PSO參數尋優中,採用粒子群演算法對SVM的參數(懲罰參數C,核函數參數σ)進行最優選擇。PSO是一種進化計算技術,由Eberhart和Kennedy於1995年提出,其思想源於鳥類捕食行為,演算法的數學描述如下(何同弟等,2011):
設在一個D維搜索空間中,由有m個粒子組成的一個群體,其中第i個粒子的位置表示為向量zi=(zi1,zi2,…,ziD),i=1,2,…,m。第i個粒子的飛行速度表示為向量vi=(vi1,vi2,…,viD),其搜索的最佳位置pi=(pi1,pi2,…,piD),整個粒子群搜索到的最優位置pg=(pg1,pg2,…,pgD)。找到這兩個最優位置時,各粒子根據如下公式更新自己的速度和位置:
高光譜遙感影像信息提取技術
式中:i=1,2,…,m;ψ是慣性權重函數,用來控制前面速度對當前速度的影響;c1和c2稱為加速因子,為非負常數;r1和r2是[0,1]的隨機數。