資源簡介
在MATLAB里用粒子群算法求基準測試函數Griewank的極值
代碼片段和文件信息
%%??繪制目標函數曲線
figure
[xy]=meshgrid(-5:0.1:5-5:0.1:5);
z=0.00025*(x.^2+y.^2)-cos(x)*cos(y./sqrt(2))+1;
mesh(xyz);
hold?on
%%??參數初始化
c1=1.49445;????
c2=1.49445;????
maxgen=1000;??????%?最大迭代次數
sizepop=20;???????%種群規模
Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;
%%??產生初始粒子和速度
for?i=1:sizepop
????%?隨機產生一個種群
????pop(i:)=5*rands(12);????%初始種群
????V(i:)=rands(12);????????%初始化速度
????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:));
????
評論
共有 條評論