日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

微粒群算法(PSO)

發布時間:2024/8/1 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微粒群算法(PSO) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.算法介紹?
????粒子群算法(Particle Swarm Optimization,PSO)的基本思想是模擬鳥群隨機搜尋食物的捕食行為,鳥群通過自身經驗和種群之間的交流調整自己的搜尋路徑,從而找到食物最多的地點。其中每只鳥的位置則為自變量組合,每次到達的地點的食物密度即函數值。每次搜尋都會根據自身經驗(自身歷史搜尋的最優地點)和種群交流(種群歷史搜尋的最優地點)調整自身搜尋方向和速度,這個稱為跟蹤極值,從而找到最優解。
????粒子群算法和其它演化算法相似,都是根據對環境適應度將群體中的個體移動到好的區域。
①相較于傳統算法計算速度非常快,全局搜索能力也很強;
②PSO對于種群大小不十分敏感,所以初始種群設為500-1000,速度影響也不大;
③粒子群算法適用于連續函數極值問題,對于非線性、多峰問題均有較強的全局搜索能力。

????粒子群算法中所涉及到的參數有:種群數量,迭代次數,慣性權重,學習因子,空間維數,位置限制,速度限制。其中核心算法公式為:?

? ? ? ? ? ? ?

算法流程圖為:

? ? ? ? ? ? ? ? ? ?

二.代碼:

(1)PSO.m文件

clc;
clear;
close all;??
f= @(x,y)(sin(x)+cos(y)); % 函數表達式??
figure(1);
ezsurf(f,[-3,3,-3,3]);??
N = 100;? ? ? ? ? ? ? ? ? ? ? ? ?% 初始種群個數??
d = 2;? ? ? ? ? ? ? ? ? ? ? ? ? ? % 空間維數??
ger = 100;? ? ? ? ? ? ? ? ? ? ?% 最大迭代次數?
w = 0.8;? ? ? ? ? ? ? ? ? ? ? ? ?% 慣性權重??
c1 = 0.5;? ? ? ? ? ? ? ? ? ? ? ? % 自我學習因子??
c2 = 0.5;? ? ? ? ? ? ? ? ? ? ? ? % 群體學習因子? ?
x =? -3+6* rand(N, d);? ?%初始種群的位置??
v = rand(N, d);? ? ? ? ? ? ? ?% 初始種群的速度??
xm = x;? ? ? ? ? ? ? ? ? ? ? ? ? % 每個個體的歷史最佳位置??
ym = zeros(1, d);? ? ? ? ? ?% 種群的歷史最佳位置??
fxm = zeros(N, 1);? ? ? ? ? % 每個個體的歷史最佳適應度??
fym = -inf;? ? ? ? ? ? ? ? ? ? ? % 種群歷史最佳適應度??
hold on??
title('初始狀態圖');??
figure(2)??
%% 群體更新??
iter = 1;??
record = zeros(ger, 1);? ? ? ? ? % 記錄器??
while iter <= ger??
? ? ?fx = matrixdeal(x) ; % 個體當前適應度? ? ?
? ? ?for i = 1:N? ? ? ??
? ? ? ? if? fxm(i) < fx(i)??
? ? ? ? ? ? fxm(i) = fx(i);? ? % 更新個體歷史最佳適應度??
? ? ? ? ? ? xm(i,:) = x(i,:);? ?% 更新個體歷史最佳位置??
? ? ? ? end? ?
? ? ?end??
if fym < max(fxm)??
? ? ? ? [fym, nmax] = max(fxm);? ?% 更新群體歷史最佳適應度??
? ? ? ? ym = xm(nmax, :);? ? ? % 更新群體歷史最佳位置??
?end??
? ? v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新??
? ? ?x = x + v;% 位置更新??
? ? record(iter) = fym;%最大值記錄??
? ? ? ezsurf(f,[-3,3,-3,3]);?
? ? ? plot3(x(:,1),x(:,2),matrixdeal(x),'g*');
? ? ? pause(0.1)
? ? iter = iter+1;??
end??
figure(3);
plot(record);title('收斂過程')??
figure(4);
ezsurf(f,[-3,3,-3,3]);?
hold on;
plot3( x(:,1),x(:,2), matrixdeal(x), 'g *');title('最終狀態位置')??
disp(['最大值:',num2str(fym)]);??

disp(['變量取值:',num2str(ym)]);?

(2)matrixdeal.m

function? ?l=matrixdeal(x)
f= @(x,y)(sin(x)+cos(y));
[m,n]=size(x);
l=zeros(m,1);
for i=1:m
? ? l(i)=f(x(i,1),x(i,2));
end

end


三.實驗結果

? ? ??? ??

? ? ??? ?

總結

以上是生活随笔為你收集整理的微粒群算法(PSO)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。