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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

粒子群算法matlab多元,进化算法之粒子群算法和Matlab实现(多维)

發布時間:2025/4/16 循环神经网络 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 粒子群算法matlab多元,进化算法之粒子群算法和Matlab实现(多维) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面一篇文章介紹了遺傳算法,這里再介紹一種進化算法,稱為粒子群算法。同遺傳算法類似,粒子群算法也是仿照了自然界的生物現象得到的。這種現象就是鳥群在某個未知空間內尋找食物這一思想。

鳥群通過自身經驗和種群之間的交流調整自己的搜尋路徑,從而不斷尋找,直到找到食物最多的地點。其中某個個體就是鳥群中某一只鳥,該個體具有的屬性就是其所在位置和搜索方向。該個體所在地點對應的食物數量可以理解為該處函數取值的理想程度。開始時先隨機放置各個個體在整個尋找范圍內,然后根據個體本身搜索到的歷史最優地點和整個種群搜索到的歷史最優地點來調整自己的搜索方向和搜索跨度,從而經過多次搜索后找到最優的地點,即最優解。

下面寫如何用MATLAB具體實現上述過程。

clc;clear;close all;

%% 初始化種群

f= @(a,b)(a .* sin(a) .* cos(2 * a) - 2 * a .* sin(3 * a)).*(b .* sin(b) .* cos(2 * b) - 2 * b .* sin(3 * b)); % 函數表達式

figure(1);

[x0_1, x0_2]=meshgrid(0:.2:20);

y0=f(x0_1,x0_2);

mesh(x0_1, x0_2, y0);

hold on;

N = 500; % 初始種群個數

d = 2; % 空間維數

ger = 300; % 最大迭代次數

limit = [0, 20;0,20]; % 設置位置參數限制(矩陣的形式可以多維)

vlimit = [-1.5, 1.5;-1.5, 1.5]; % 設置速度限制

c_1 = 0.8; % 慣性權重

c_2 = 0.5; % 自我學習因子

c_3 = 0.5; % 群體學習因子

for i = 1:d

x(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);%初始種群的位置

end

v = rand(N, d); % 初始種群的速度

xm = x; % 每個個體的歷史最佳位置

ym = zeros(1, d); % 種群的歷史最佳位置

fxm = zeros(N, 1); % 每個個體的歷史最佳適應度

fym = -inf; % 種群歷史最佳適應度

plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'ro');title('初始狀態圖');

hold on;

figure(2);

mesh(x0_1, x0_2, y0);

hold on;

plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'ro');

hold on;

%% 粒子群工作

iter = 1;

times = 1;

record = zeros(ger, 1); % 記錄器

while iter <= ger

fx = f(x(:,1),x(:,2)) ; % 個體當前適應度

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 * c_1 + c_2 * rand *(xm - x) + c_3 * rand *(repmat(ym, N, 1) - x);% 速度更新

% 邊界速度處理

for i=1:d

for j=1:N

if v(j,i)>vlimit(i,2)

v(j,i)=vlimit(i,2);

end

if v(j,i) < vlimit(i,1)

v(j,i)=vlimit(i,1);

end

end

end

x = x + v;% 位置更新

% 邊界位置處理

for i=1:d

for j=1:N

if x(j,i)>limit(i,2)

x(j,i)=limit(i,2);

end

if x(j,i) < limit(i,1)

x(j,i)=limit(i,1);

end

end

end

record(iter) = fym;%最大值記錄

if times >= 10

cla;

mesh(x0_1, x0_2, y0);

plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('狀態位置變化');

pause(0.5);

times=0;

end

iter = iter+1;

times=times+1;

end

figure(3);plot(record);title('收斂過程')

figure(4);

mesh(x0_1, x0_2, y0);

hold on;

plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('最終狀態圖');

disp(['最大值:',num2str(fym)]);

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

粒子群運算過程如圖所示:

例:五維的代碼:

clc;clear;close all;

%% 初始化種群

f= @(a,b,c,d,e)(a.*b.*c.*d.*e); % 函數表達式

% figure(1);

% [x0_1, x0_2]=meshgrid(0:.2:20);

% y0=f(x0_1,x0_2);

% mesh(x0_1, x0_2, y0);

% hold on;

N = 500; % 初始種群個數

d = 5; % 空間維數

ger = 300; % 最大迭代次數

limit = [0, 20;0,20;0,20;0,20;0,20]; % 設置位置參數限制(矩陣的形式可以多維)

vlimit = [-1.5, 1.5;-1.5, 1.5;-1.5, 1.5;-1.5, 1.5;-1.5, 1.5]; % 設置速度限制

c_1 = 0.8; % 慣性權重

c_2 = 0.5; % 自我學習因子

c_3 = 0.5; % 群體學習因子

for i = 1:d

x(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);%初始種群的位置

end

v = rand(N, d); % 初始種群的速度

xm = x; % 每個個體的歷史最佳位置

ym = zeros(1, d); % 種群的歷史最佳位置

fxm = zeros(N, 1); % 每個個體的歷史最佳適應度

fym = -inf; % 種群歷史最佳適應度

% plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'ro');title('初始狀態圖');

% hold on;

% figure(2);

% mesh(x0_1, x0_2, y0);

% hold on;

% plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'ro');

% hold on;

%% 粒子群工作

iter = 1;

times = 1;

record = zeros(ger, 1); % 記錄器

while iter <= ger

fx = f(x(:,1),x(:,2),x(:,3),x(:,4),x(:,5)) ; % 個體當前適應度

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 * c_1 + c_2 * rand *(xm - x) + c_3 * rand *(repmat(ym, N, 1) - x);% 速度更新

% 邊界速度處理

for i=1:d

for j=1:N

if v(j,i)>vlimit(i,2)

v(j,i)=vlimit(i,2);

end

if v(j,i) < vlimit(i,1)

v(j,i)=vlimit(i,1);

end

end

end

x = x + v;% 位置更新

% 邊界位置處理

for i=1:d

for j=1:N

if x(j,i)>limit(i,2)

x(j,i)=limit(i,2);

end

if x(j,i) < limit(i,1)

x(j,i)=limit(i,1);

end

end

end

record(iter) = fym;%最大值記錄

% if times >= 10

% cla;

% mesh(x0_1, x0_2, y0);

% plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('狀態位置變化');

% pause(0.5);

% times=0;

% end

iter = iter+1;

times=times+1;

end

% figure(3);plot(record);title('收斂過程')

% figure(4);

% mesh(x0_1, x0_2, y0);

% hold on;

% plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('最終狀態圖');

disp(['最大值:',num2str(fym)]);

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

代碼效果:

標簽:種群,1.5,end,xm,算法,limit,Matlab,多維,x0

來源: https://www.cnblogs.com/chuqianyu/p/14395928.html

總結

以上是生活随笔為你收集整理的粒子群算法matlab多元,进化算法之粒子群算法和Matlab实现(多维)的全部內容,希望文章能夠幫你解決所遇到的問題。

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