最後在煉數成金那邊找到了很好的一篇教程
在這裡把它整理一下
做個粒子群演算法的收尾
%% i. 清空環境fun.mclcclear
%% 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);
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的速度為 粒子群位置根...