
優(yōu)化算法—粒子群算法(PSO)
一、粒子群算法的概述
粒子群算法(PSO)屬于群智能算法的一種,是通過模擬鳥群捕食行為設(shè)計的。假設(shè)區(qū)域里就只有一塊食物(即通常優(yōu)化問題中所講的最優(yōu)解),鳥群的任務(wù)是找到這個食物源。鳥群在整個搜尋的過程中,通過相互傳遞各自的信息,讓其他的鳥知道自己的位置,通過這樣的協(xié)作,來判斷自己找到的是不是最優(yōu)解,同時也將最優(yōu)解的信息傳遞給整個鳥群,最終,整個鳥群都能聚集在食物源周圍,即我們所說的找到了最優(yōu)解,即問題收斂。
二、粒子群算法的流程
粒子群算法通過設(shè)計一種無質(zhì)量的粒子來模擬鳥群中的鳥,粒子僅具有兩個屬性:速度和位置,速度代表移動的快慢,位置代表移動的方向。每個粒子在搜索空間中單獨的搜尋最優(yōu)解,并將其記為當(dāng)前個體極值,并將個體極值與整個粒子群里的其他粒子共享,找到最優(yōu)的那個個體極值作為整個粒子群的當(dāng)前全局最優(yōu)解,粒子群中的所有粒子根據(jù)自己找到的當(dāng)前個體極值和整個粒子群共享的當(dāng)前全局最優(yōu)解來調(diào)整自己的速度和位置。粒子群算法的思想相對比較簡單,主要分為:1、初始化粒子群;2、評價粒子,即計算適應(yīng)值;3、尋找個體極值;4、尋找全局最優(yōu)解;5、修改粒子的速度和位置。下面是程序的流程圖:
(PSO流程)
下面我們具體解釋下流程圖里面的每一個步驟:
1、初始化
首先,我們需要設(shè)置最大的速度區(qū)間,防止超出最大的區(qū)間。位置信息即為整個搜索空間,我們在速度區(qū)間和搜索空間上隨機(jī)初始化速度和位置。設(shè)置群體規(guī)模。
2、個體極值與全局最優(yōu)解
個體極值為每個粒子找到的歷史上最優(yōu)的位置信息,并從這些個體歷史最優(yōu)解中找到一個全局最優(yōu)解,并與歷史最優(yōu)解比較,選出最佳的作為當(dāng)前的歷史最優(yōu)解。
3、更新速度和位置的公式
更新公式為:
其中,稱為慣性因子,
稱為加速常數(shù),一般取
。
表示區(qū)間
上的隨機(jī)數(shù)。
表示第
個變量的個體極值的第d維。
表示全局最優(yōu)解的第d維。
4、終止條件
有兩種終止條件可以選擇,一是最大代數(shù):;二是相鄰兩代之間的偏差在一個指定的范圍內(nèi)即停止。我們在實驗中選擇第一種。
三、實驗
我們選擇的測試函數(shù)是:Griewank。其基本形式如下:
圖像為:
(Griewank函數(shù)圖像)
在實驗中我們選擇的維數(shù)是20;MATLAB程序代碼如下:
主程序:
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
c1=2;%學(xué)習(xí)因子
c2=2;%學(xué)習(xí)因子
Dimension=20;
Size=30;
Tmax=500;
Velocity_max=1200;%粒子最大速度
F_n=2;%測試函數(shù)名
Fun_Ub=600;%函數(shù)上下界
Fun_Lb=-600;
Position=zeros(Dimension,Size);%粒子位置
Velocity=zeros(Dimension,Size);%粒子速度
Vmax(1:Dimension)=Velocity_max;%粒子速度上下界
Vmin(1:Dimension)=-Velocity_max;
Xmax(1:Dimension)=Fun_Ub;%粒子位置上下界,即函數(shù)自變量的上下界
Xmin(1:Dimension)=Fun_Lb;
[Position,Velocity]=Initial_position_velocity(Dimension,Size,Xmax,Xmin,Vmax,Vmin);
Pbest_position=Position;%粒子的歷史最優(yōu)位置,初始值為粒子的起始位置,存儲每個粒子的歷史最優(yōu)位置
Gbest_position=zeros(Dimension,1);%全局最優(yōu)的那個粒子所在位置,初始值認(rèn)為是第1個粒子
for j=1:Size
Pos=Position(:,j);%取第j列,即第j個粒子的位置
fz(j)=Fitness_Function(Pos,F_n,Dimension);%計算第j個粒子的適應(yīng)值
end 數(shù)據(jù)分析師培訓(xùn)
[Gbest_Fitness,I]=min(fz);%求出所有適應(yīng)值中最小的那個適應(yīng)值,并獲得該粒子的位置
Gbest_position=Position(:,I);%取最小適應(yīng)值的那個粒子的位置,即I列
for itrtn=1:Tmax
time(itrtn)=itrtn;
Weight=1;
r1=rand(1);
r2=rand(1);
for i=1:Size
Velocity(:,i)=Weight*Velocity(:,i)+c1*r1*(Pbest_position(:,i)-Position(:,i))+c2*r2*(Gbest_position-Position(:,i));
end
%限制速度邊界
for i=1:Size
for row=1:Dimension
if Velocity(row,i)>Vmax(row)
Veloctity(row,i)=Vmax(row);
elseif Velocity(row,i)<Vmin(row)
Veloctity(row,i)=Vmin(row);
else
end
end
end
Position=Position+Velocity;
%限制位置邊界
for i=1:Size
for row=1:Dimension
if Position(row,i)>Xmax(row)
Position(row,i)=Xmax(row);
elseif Position(row,i)<Xmin(row)
Position(row,i)=Xmin(row);
else
end
end
end
for j=1:Size
P_position=Position(:,j)';%取一個粒子的位置
fitness_p(j)=Fitness_Function(P_position,F_n,Dimension);
if fitness_p(j)< fz(j) %粒子的適應(yīng)值比運(yùn)動之前的適應(yīng)值要好,更新原來的適應(yīng)值
Pbest_position(:,j)=Position(:,j);
fz(j)=fitness_p(j);
end
if fitness_p(j)<Gbest_Fitness
Gbest_Fitness=fitness_p(j);
end
end
[Gbest_Fitness_new,I]=min(fz);%更新后的所有粒子的適應(yīng)值,取最小的那個,并求出其編號
Best_fitness(itrtn)=Gbest_Fitness_new; %記錄每一代的最好適應(yīng)值
Gbest_position=Pbest_position(:,I);%最好適應(yīng)值對應(yīng)的個體所在位置
end
plot(time,Best_fitness);
xlabel('迭代的次數(shù)');ylabel('適應(yīng)度值P_g');
初始化:
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function [Position,Velocity] = Initial_position_velocity(Dimension,Size,Xmax,Xmin,Vmax,Vmin)
for i=1:Dimension
Position(i,:)=Xmin(i)+(Xmax(i)-Xmin(i))*rand(1,Size); % 產(chǎn)生合理范圍內(nèi)的隨機(jī)位置,rand(1,Size)用于產(chǎn)生一行Size個隨機(jī)數(shù)
Velocity(i,:)=Vmin(i)+(Vmax(i)-Vmin(i))*rand(1,Size);
end
end
適應(yīng)值計算:
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function Fitness=Fitness_Function(Pos,F_n,Dimension)
switch F_n
case 1
Func_Sphere=Pos(:)'*Pos(:);
Fitness=Func_Sphere;
case 2
res1=Pos(:)'*Pos(:)/4000;
res2=1;
for row=1:Dimension
res2=res2*cos(Pos(row)/sqrt(row));
end
Func_Griewank=res1-res2+1;
Fitness=Func_Griewank;
end
最終的收斂曲線:
(收斂曲線)
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03