%%請大神幫我注釋一下,網上找的源代碼,但是注釋不全
%% 清空環境
clear
clc
tic
%% 參數初始化
% 粒子群算法中的兩個參數
c1 = 1.49445;
c2 = 1.49445;
maxgen = 200; % 進化次數
sizepop = 20; % 種群規模
Vmax = 1;
Vmin = -1;
popmax = 5;
popmin = -5;
%% 產生初始粒子和速度
for i = 1:sizepop
% 隨機產生一個種群
pop(i,:) = 5 * rands(1,2); % 初始種群
V(i,:) = rands(1,2); % 初始化速度
% 計算適應度
fitness(i) = fun(pop(i,:)); % 染色體的適應度
end
% 找最好的染色體
[bestfitness bestindex] = min(fitness);
zbest = pop(bestindex,:); % 全局最佳
gbest = pop; % 個體最佳
fitnessgbest = fitness; % 個體最佳適應度值
fitnesszbest = bestfitness; % 全局最佳適應度值
%% 迭代尋優
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,:)<Vmin)) = Vmin;
%種群更新
pop(j,:) = pop(j,:) + 0.5*V(j,:);
pop(j,find(pop(j,:)>popmax)) = popmax;
pop(j,find(pop(j,:)<popmin)) = popmin;
% 自適應變異
if rand > 0.8
k = ceil(2*rand);
pop(j,k) = rand;
end
% 適應度值
fitness(j) = fun(pop(j,:));
end
% 個體最優更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
% 群體最優更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
yy(i) = fitnesszbest;
end
toc
%% 結果分析
plot(yy);
title(['適應度曲線 ' '終止代數=' num2str(maxgen)]);
xlabel('進化代數');
ylabel('適應度');
果斷自己,邊讀邊注釋呀,才有提高