matlab基本粒子群演算法實現(四)

2022-08-16 13:51:14 字數 2309 閱讀 3540

最後在煉數成金那邊找到了很好的一篇教程

在這裡把它整理一下

做個粒子群演算法的收尾

%% i. 清空環境

clcclear

%% ii. 繪製目標函式曲線

figure

[x,y] = meshgrid(-5:0.1:5,-5:0.1:5);

z = x.^2 + y.^2 - 10*cos(2*pi*x) - 10*cos(2*pi*y) + 20;

mesh(x,y,z)

hold on

%% iii. 引數初始化

c1 = 1.49445;

c2 = 1.49445;

maxgen = 1000; % 進化次數

sizepop = 100; %種群規模

vmax = 1;

vmin = -1;

popmax = 5;

popmin = -5;

%% iv. 產生初始粒子和速度

for i = 1:sizepop

% 隨機產生乙個種群

pop(i,:) = 5*rands(1,2); %初始種群

v(i,:) = rands(1,2); %初始化速度

% 計算適應度

fitness(i) = fun(pop(i,:)); %染色體的適應度

end%% v. 個體極值和群體極值

[bestfitness bestindex] = max(fitness);

zbest = pop(bestindex,:); %全域性最佳

gbest = pop; %個體最佳

fitnessgbest = fitness; %個體最佳適應度值

fitnesszbest = bestfitness; %全域性最佳適應度值

%% vi. 迭代尋優

for i = 1:maxgen

for j = 1:sizepop

% 速度更新

v(j,:) = v(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));

v(j,find(v(j,:)>vmax)) = vmax;

v(j,find(v(j,:)popmax)) = popmax;

pop(j,find(pop(j,:)fitnessgbest(j)

gbest(j,:) = pop(j,:);

fitnessgbest(j) = fitness(j);

end% 群體最優更新

if fitness(j) > fitnesszbest

zbest = pop(j,:);

fitnesszbest = fitness(j);

endend

yy(i) = fitnesszbest;

end%% vii.輸出結果

[fitnesszbest, zbest]

plot3(zbest(1), zbest(2), fitnesszbest,'bo','linewidth',1.5)

figure

plot(yy)

title('最優個體適應度','fontsize',12);

xlabel('進化代數','fontsize',12);ylabel('適應度','fontsize',12);

fun.m

function y = fun(x)

%函式用於計算粒子適應度值

%x input 輸入粒子

%y output 粒子適應度值

matlab基本粒子群演算法實現(二)

雖然這個不是我寫的 但是這個粒子群是二維的 之前的是一維的。main.m clear all close all clc x y meshgrid 100 100,100 100 sigma 50 img 1 2 pi sigma 2 exp x.2 y.2 2 sigma 2 目標函式,高斯函式 ...

粒子群演算法的matlab實現

2018.7.19 粒子群演算法function xm,fv pso fitness,n,c1,c2,w,m,d 本函式用粒子群演算法實現優化 給定初始化條件 c1 學習因子1 c2 學習因子2 w 慣性權重 m 最大迭代次數 d 搜尋空間維數 n 初始化群體個體數目 xm,fv pso fitne...

PSO粒子群演算法及matlab實現

1原理 根據鳥類尋食的仿生學,結合個體的最優解和群體的最優解不斷地迭代來尋找區域的最優解。在n維的目標空間中,有m個粒子組成乙個群體,第i個粒子的位置表示為 每個位置對應乙個潛在解,把 代入適應函式中即可得到對應的適應值。粒子個體經過的最好的位置為 整個群體的最優位置為 粒子i的速度為 粒子群位置根...