cxl(j)=0.9; end end %2映射
al=-30;bl=30; rxl=al+(bl-al)*cxl; %3搜索
bate = 0.1;
xlhd=xlhd+bate*rxl;
if fitness(part_size,xlhd)>gbest(end) gbest(1:part_size)=xlhd;
gbest(end)=fitness(part_size,xlhd); end %4更新
for j=1:part_size
cxl(j)=4*cxl(j)*(1-cxl(j)); end end end
%-------------混沌--------------------------------
%当前代的最优粒子的适应度(取自)保存
best_record(:,i) = gbest; % gbest:一个行向量 end
pso = gbest; % 最优个体 display(gbest);
figure;
plot(best_record(end,:));% 最优解与代数的进化关系图
best=zeros(part_size,max_gen); for i=1:part_size-1
best(i,:)=best_record(i,:); end
pareto1= zeros(1,max_gen); pareto2= zeros(1,max_gen); for i=1:max_gen
pareto1(i)=f1(part_size, best(:,i) ); pareto2(i)=f2(part_size, best(:,i) ); end figure; i=1:max_gen;
%plot(i,pareto1(i),'r*',i,pareto2(i),'g*'); plot(pareto1(i),pareto2(i),'r+'); xlabel('f1');ylabel('f2'); title('Pareto曲线');
%figure;
%plot(,f2(best_record),);
% movie2avi(F,'pso_2D1.avi','compression','MSVC');
%子函数
%------------------------------------------------------------------------- %------------------------------------------------------------------------- %返回随机的位置
function ini_present=ini_pos(pop_size,part_size)
ini_present = 10*3*rand(pop_size,part_size+1); %初始化当前粒子位置,使其随机的分布在工作空间
%返回一个随机的矩阵,10*(2+1),最后一列将用来保存适应度
%返回随机的速度
function ini_velocity=ini_v(pop_size,part_size)
ini_velocity =20*(rand(pop_size,part_size)); %初始化当前粒子速度,使其随机的分布在速度范围内
%判断是否处于范围内
function flag = Region_in(pos_present,region) [m n]=size(pos_present); % 1*11 n返回解的维数10 flag=1; for j=1:n-1
flag = flag & ( pos_present(1,j)>=region(j,1) ( pos_present(1,j)<=region(j,2) ); end
%初始化适应度
function arr_fitness = ini_fit(pos_present,pop_size,part_size) for k=1:pop_size
arr_fitness(k,1) = fitness(part_size,pos_present(k,1:part_size)); %计算原
)
&
始种群的适应度 end
%*************************************************************************** % 计算适应度
%*************************************************************************** function fit = fitness(n,xp)
%需要求极值的函数,本例即peaks函数
%y0=[-85.4974,-29.9217]; % 注意:这是基准序列,也就是单个最优的极值 y0=[-9.9907,-7.7507]; %y0=[-39.6162,-18.4561]; % y0=[-86.8312,-29.9217];
y1=[f1(n,xp),f2(n,xp)]; % n为粒子维数
fit=graydegree(2,y0,y1); % 关联度在某种意义上就是适应度
%目标函数1 function r=f1(n,x) r=0; for i=1:n-1
r=r+(-10)*exp((-0.2)*sqrt(x(i)^2+x(i+1)^2)); end
%目标函数2 function r=f2(n,x) r=0; for i=1:n
r=r+(abs(x(i)))^0.8+5*sin(x(i)^3); end
%约束函数1 function r=g1(n,x) r=0; for i=1:n r=0; end
%约束函数2 function r=g2(n,x) r=0; for i=1:n r=0; end
% 灰色关联度计算函数 ( 越大相似性越好 )
% tn目标函数个数 x0基准序列(一组值) x1贷检(一组值) function gama = graydegree( tn,y0,y1 ) gama=0; rou =0.5;
kesa= zeros(tn,1); m1= abs(y0(1)-y1(1)) ; m2= abs(y0(1)-y1(1)) ; for i=1:tn
if( abs(y0(i)-y1(i))>m2 ) %------------------应该取大于呢还是小于 m2= abs(y0(i)-y1(i)); end end for i=1:tn
kesa(i) = ( m1+rou*m2)/( abs(y0(i)-y1(i)) +rou*m2 );
gama = gama + kesa(i); end
gama = gama/tn;
% 可行解的判决函数 gn为约束条件的个数(暂时未用) n为解(粒子)的维数 function bool = feasible( x,n ) r=0; %for i=1:gn
r=max( 0, g1(n,x), g2(n,x) );%判断约束条件 %end if(r>0)
bool=0; %不可行解 else
bool=1; %可行解 end
我正在玩搜狐微博,快来“关注”我,了解我的最新动态吧。
http://t.sohu.com/u/19878919
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新经管营销二维粒子群算法的matlab源程序 (2)全文阅读和word下载服务。
相关推荐: