您的位置:首页 > 编程语言 > MATLAB

粒子群对函数的优化 matlab,编译通过

2015-07-06 11:12 411 查看
% 主函数main.m

%=====================================================%

%下面是主程序

%% 清空环境

clc

clear

%% 参数初始化

%粒子群算法中的两个参数

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);%ceil朝正无穷大方向取整

pop(j,k)=rand;

end

%适应度值

fitness(j)=fun(pop(j,:));

%个体最优更新

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

end

yy(i)=fitnesszbest;

end

%% 结果分析

plot(yy)

title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);

xlabel('进化代数');ylabel('适应度');

%===========================%

%优化函数fun.m

function y = fun(x)

y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: