《二维粒子群算法matlab源程序》由会员分享,可在线阅读,更多相关《二维粒子群算法matlab源程序(11页珍藏版)》请在技术文库上搜索。
1、9微博,快来“关注”我,了解我的最新动态吧。http:/t.sohu.com/u/1987891 bool=0; %不可行解elsebool=1; %可行解end我正在玩搜狐ax( 0, g1(n,x), g2(n,x) );%判断约束条件%endif(r0)on bool = feasible( x,n )r=0;%for i=1:gnr=m% 可行解的判决函数 gn为约束条件的个数(暂时未用) n为解(粒子)的维数functigama = gama + kesa(i);endgama = gama/tn;sa(i) = ( m1+rou*m2)/( abs(y0(i)-y1(i) +rou。
2、*m2 ); m2= abs(y0(i)-y1(i);endendfor i=1:tnke0(i)-y1(i)m2 ) %-应该取大于呢还是小于;m2= abs(y0(1)-y1(1) ;for i=1:tnif( abs(y =0.5;kesa= zeros(tn,1); m1= abs(y0(1)-y1(1)nction gama = graydegree( tn,y0,y1 )gama=0;rou越大相似性越好 ) % tn目标函数个数 x0基准序列(一组值) x1贷检(一组值)fu,x)r=0;for i=1:nr=0;end% 灰色关联度计算函数 ( for i=1:nr=0;end。
3、%约束函数2function r=g2(n(x(i)3);end%约束函数1function r=g1(n,x)r=0;(n,x)r=0;for i=1:nr=r+(abs(x(i)0.8+5*sint(x(i)2+x(i+1)2);end%目标函数2function r=f2n,x)r=0;for i=1:n-1r=r+(-10)*exp(-0.2)*sqr,y1); % 关联度在某种意义上就是适应度%目标函数1function r=f1(f1(n,xp),f2(n,xp); % n为粒子维数fit=graydegree(2,y039.6162,-18.4561;% y0=-86.8312,。
4、-29.9217;y1=意:这是基准序列,也就是单个最优的极值y0=-9.9907,-7.7507;%y0=-%需要求极值的函数,本例即peaks函数%y0=-85.4974,-29.9217; % 注*function fit = fitness(n,xp)*% 计算适应度%*%*ze,pos_present(k,1:part_size); %计算原始种群的适应度 end k=1:pop_sizearr_fitness(k,1) = fitness(part_siess = ini_fit(pos_present,pop_size,part_size)foregion(j,2) );end%。
5、初始化适应度function arr_fitnresent(1,j)=region(j,1) ) & ( pos_present(1,j)gbest(end)gb bate = 0.1;xlhd=xlhd+bate*rxl;=-30;bl=30;rxl=al+(bl-al)*cxl;%3搜索j)=0.9;endend%2映射alendif cxl(j)=1cxl(if cxl(j)=0.75cxl(j)=0.76;f cxl(j)=0.5cxl(j)=0.51;end25cxl(j)=0.26;endi cxl(j)=0.1;endif cxl(j)=0. for j=1:part_sizei。
6、f cxl(j)=05 %次数%1生成cxl=rand(1,part_size);xlhd = gbest(1:part_size); if(1)for p=1:2-混沌-arr_present(best_index,:); % 全局的极值end%比以前的好,则更新最优值gbest,如果是最小的值为小于号,相反则为大于号gbest = in(arr_present(best_index,:),region) ) % 如果当前最好的结果是最小的值为min,相反则为maxif bestgbest(end) & ( Region_t_index = max(arr_present(:,end); %。
7、 如果的历史极值endend% 以下更新全局的极值best bes反则为大于号pbest(j,:) = arr_present(j,:); % 更新个体_present(j,:),region) % 根据条件更新pbest,如果是最小的值为小于号,相f (arr_present(j,end)pbest(j,end)&(Region_in(arrize); % 适应度更新 (保存至最后一列)% 适应度评价与可行域限制i(j,end) = fitness(part_size,arr_present(j,1:part_st_size);% 粒子位置更新 (b)%最后一列是适应度arr_present。
8、:part_size) = arr_present(j,1:part_size)+v(j,1:par endend%前几列是位置信息arr_present(j,1ate,sum(100*clock);v(j,k)=20*rand();:part_sizeif abs(v(j,k)20rand(st 判断v的大小,限制v的绝对值小于20for k=1-arr_present(j,1:part_size); % 粒子速度更新 (a)%art_size).+c2.*rand.*(gbest(1:part_size)+c1.*rand.*(pbest(j,1:part_size)-arr_presen。
9、t(j,1:p-for j=1:pop_sizev(j,:) = w.*v(j,:)i/max_gen; % 线形递减权重% 当前进化代数:对于每个粒子进行更新和评价-lush%pause(0.01);w = w_max-(w_max-w_min)*,2),arr_present(:,3),*),hold off;%drawnow %f;%画出粒子群%plot3(arr_present(:,1),arr_present(:0*3 最后一列保存的是适应度pbest = zeros(pop_size,part_size+是一个外部的记忆体,存储每个粒子历史最优值(2维数值):根据适应度更新!%注意。
10、:pbest数组11); % pbest:粒子以前搜索到的最优值,最后一列包括这些值的适应度% 1*80 保度值) v=ini_v(pop_size,part_size); %不是当前种群,可看作存每代的最优值best_record = zeros(part_size+1,max_gen); % best_record数组:记录每一代的最好的粒子的适应度w_max = 0. % 初始化当前速度 % 一个10*2的随机的矩阵(初始化所有粒子的所有维数的速9; % w_max权系数最大值w_min = 0.2; % w_min权系数最最后一列为 arr_present = ini_pos(pop_。
11、size,part_size);小值v_max = 2; % 最大速度,为粒子的范围宽度c1 = 2; % 学习因子1c2 = 2; % 学习因子2% % 当前位置,随机初始化% 一个10*3的随机的矩阵(初始化所有粒子的所有维数的位置值),其中% 计算原始种群的适应度,及初始化% m(100*clock); % 重置随机数发生器状态%当前种群的信息矩阵,逐代进化的群体% 注意:传入的第一个参数是当前的粒子群体 ,ini_fit函数计算每个粒子的适应度% arr_present(:,end)是最后一列 ,保存每个粒子的适应值,是这样的!3,3; % 每一维设定不同范围(称之为解空间,不是可行域。
12、空间)rand(state,suxuanarr_present(:,end)= ini_fit( arr_present, po10*-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-3,3;-p_size, part_size );% 数组赋值,初始化每个粒子个体的历史最优值,以后会更新的 pbest = arr_present; % 初始化各个粒子最优值% 找ion=zeros(part_size,2); % 设定搜索空间范围-解空间region=到当前群体中适应度最小的(在最后一列中寻找),best_value% 改为max,表示关联度最大zeros(pa。
13、rt_size,pop_size*part_size);%xuanregbest_value best_index = max(arr_present(:,end); %初始化全局最优,即适应度为全局最小的值,根据需要也可以选取为最大值% 唯一的全局最优max_gen = 200; % max_gen 最大迭代次数%best=值,是当前代所有粒子中最好的一个gbest = arr_present(best_index,:st = zeros(1,part_size+1); % gbest 当前搜索到的最小的值 );% 因为是多目标,因此这个-% 只是示意性的画出3维的%x=-3:0.01:3;。
14、%y=-3:0.01:3;%X,Y=meshsize = 2; % part_size 粒子大小 /粒子的维数 gbegrid(x,y);%Z1=(-10)*exp(-0.2)*sqrt(X2+Y2);size = 10; % pop_size 种群大小 /粒子数量part_%Z2=(abs(X)0.8+abs(Y)0.8+5*sin(X3)+5*sin(Y3);%z1=(x,y)(-10)*exp(-0.2)*sqrt(x2+y2);%zbal present;% close all;clc;clear all;pop_2=(x,y)(abs(x)0.8+abs(y)0.8+5*sin(x3)+5*sin(y-USE Particle Swarm Optimization Algorithm% glo3);%ezmeshc(z1);grid on;%ezmeshc(z2);grid on;%开始进化,直到最大代数截至for i=1:max_gen%grid onfunction pso F = pso_2D()% FUNCTION PSO -;%三维图象 %多维图象是画不出来的%ezmesh(z),hold on,grid on。