|
楼主 |
发表于 2016-12-31 18:52:52
|
显示全部楼层
- % 改进的粒子群算法
- clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
- warning off % 消除警告
- feature jit off % 加速代码运行
- format long % 数据类型
- tic % 运算计时
- global ani bni hni dni eni fni gnj si Dij Wnmax Mnmax Fnmax e b r alpha
- parameters; % 加载参数
- %% PSO算法参数初始化
- % PSO粒子群算法中的两个参数
- c1 = 2; % 学习因子1
- c2 = 2; % 学习因子2
- w0 = 0.5; % 惯性权重
- iter = 30; % 进化次数
- sizepop = 1000; % 精英种群
- Vmax = 20; % 粒子速度上限
- Vmin = -20; % 粒子速度下限
- % P O H v Y
- minbound = [zeros(1,4), zeros(1,4), zeros(1,4), 20*ones(1,6), zeros(1,4)]; % 粒子取值范围下限
- maxbound = [5000*ones(1,4), 2000*ones(1,4), 3000*ones(1,4), 120*ones(1,6), ones(1,4)]; % 粒子取值范围上限
- %% 产生初始粒子和速度
- for i=1:sizepop
- % 随机产生一个种群
- for j=1:length(minbound)
- pop(i,j) = round( minbound(j) + (maxbound(j)-minbound(j))*rand );
- end
- [fitness(i),pop(i,:)]= PSO_fitness(pop(i,:)); % 适应度值
- end
- V = Vmax*rands(size(pop,1),size(pop,2)); % 初始化速度
- %% 找最好的粒子种群
- [bestfitness,best_index] = min(fitness); % 最小适应度值
- zbest = pop(best_index,:); % 全局最佳
- fitnesszbest = bestfitness; % 全局最佳适应度值
- gbest = pop; % 个体最佳
- fitnessgbest = fitness; % 个体最佳适应度值
- %% 迭代寻优
- wmax = w0; % 最大权值
- wmin = 0.05; % 最小权值
- w = wmin:(wmax-wmin)/(sizepop-1):wmax; % 权重线性递增
- for i=1:iter
- disp(['当前迭代次数:',num2str(i)]) % 迭代次数
- for j=1:sizepop
- % 速度更新
- V(j,:) = w(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,:) = round( (pop(j,:)+0.5*V(j,:)) ); % 取整
- % pop个体取值范围约束
- for np = 1:size(pop,2)
- if pop(j,np)>maxbound(1,np) % 上限
- pop(j,np)=maxbound(1,np);
- elseif pop(j,np)<minbound(1,np) % 下限
- pop(j,np)=minbound(1,np);
- end
- end
-
- % 适应度值更新
- [fitness(j),pop(j,:)] = PSO_fitness(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
- M(i)=fitnesszbest; % 最优适应度值
- end
- % 结果分析
- [Pni,Oni,Hni,vnj,Yni]=funy(zbest)
- figure('color',[1,1,1])
- plot(M,'Linewidth',2)
- title(['适应度曲线 ' '终止代数=' num2str(iter)]);
- grid on
- xlabel('进化代数');ylabel('适应度值Fit');
- % 结果
- % RBF网络逼近函数程序
- function [fitness]=PSO_RBF(p)
- global cy mc mj ql jb
- % 网络学习参数
- alfa=0.08; % 动量因子
- xite=0.7; % 学习因子
- x=[0,0,0,0]';
- % 节点个数
- inputnum = 4; % 输入节点
- hiddennum = 3; % 隐藏节点
- outputnum = 1; % 输出节点
- % b=1.5*ones(hiddennum,1);
- % c=0.5*ones(inputnum,hiddennum);
- % w=rands(hiddennum,outputnum);
- b=[p(1);p(2);p(3)];
- c=[p(4),p(5),p(6);
- p(7),p(8),p(9);
- p(10),p(11),p(12);
- p(13),p(14),p(15)];
- w=[p(16);p(17);p(18)];
- w_1=w; w_2=w_1;
- c_1=c; c_2=c_1;
- b_1=b; b_2=b_1;
- y_1=0;
- for k=1:1:length(jb)
-
- x(1)=cy(k); % 4个输入值
- x(2)=mc(k);
- x(3)=mj(k);
- x(4)=ql(k);
-
- y(k)=jb(k); % 输出值
- for j=1:1:hiddennum
- h(j)=exp(-norm(x-c(:,j))^2/(2*b(j)*b(j)));% 高斯基函数
- end
- ym(k)=w'*h';
- em(k)=y(k)-ym(k);
-
- dd_w=0*w; d_b=0*b; d_c=0*c;
- for j=1:1:hiddennum
- d_w(j,1)=xite*em(k)*h(j);
- d_b(j,1)=xite*em(k)*w(j)*h(j)*(b(j)^-3)*norm(x-c(:,j))^2;
- for i=1:1:inputnum
- d_c(i,j)=xite*em(k)*w(j)*h(j)*(x(i)-c(i,j))*(b(j)^-2);
- end
- end
- w=w_1+ d_w+alfa*(w_1-w_2);
- b=b_1+d_b+alfa*(b_1-b_2);
- c=c_1+d_c+alfa*(c_1-c_2);
-
- y_1=y(k);
- w_2=w_1; w_1=w;
- c_2=c_1; c_1=c;
- b_2=b_1; b_1=b;
- end
- fitness = sum(sum( abs(em) ));
复制代码
|
|