Matlab PSO优化RBF的程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab PSO优化RBF的程序。
找了很久,凡是能找到的都找到了。网上就没有对的。自己写的一直有问题。我有个不完整的。大家看看能不能补全:
AllSamIn=[];
AllSamOut=[];
%前向通道数据预设
global minAllSamOut;
global maxAllSamOut;
% 从总样本中抽取10%的样本作为测试样本,其余作为训练样本
[AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut] = premnmx(AllSamIn,AllSamOut);
TesSamIn=[];
TestSamOut=[];
TargetOfTestSam=[]; %测试样本目标
TrainSamIn=AllSamInn;
TrainSamOut=AllSamOutn;
%样本评估:
EvaSamIn=[]; %样本评估输入
EvaSamInn=tramnmx(EvaSamIn,minAllSamIn,maxAllSamIn); %归一化处理
global Ptrain;
Ptrain= TrainSamIn;
global Ttrain;
Ttrain=TrainSamOut;
Ptest = TestSamIn;
Ttest = TestSamOut;
spread=1.2;
vmax=0.5; %最大速率
minerr=0.001; %适应度阈值
wmax=0.90; %惯性权重的最大值
wmin=0.30; %惯性权重的最小值
global itmax;
itmax=300; %允许的最大迭代步数
c1=2; %学习因子
c2=2; %学习因子
for iter= 1:itmax
W(iter)=wmax-((wmax-wmin)/itmax)*iter; %惯性权重下降
end
%粒子在a,b之间随机初始化:
a=-1;
b=1;
m=-1;
n=1;
global N; %粒子种群数目
N=40;
global D; %粒子群长度
D=(indim+1)*hiddennum+(hiddennum+1)*outdim;
%粒子群位置初始化:
rand('state',sum(100*clock)); %产生0-1之间的随机数,粒子在a,b(-1,1)之间初始化
X=a+(b-a)*rand(N,D,1); %产生N行D列由0-1之间的矩阵
V=m+(n-m)*rand(N,D,1); %粒子群速度在m,n即-1和1之间初始化
%粒子群优化RBF神经网络的适应度值
global fvrec;
MinFit=[]; %最小适应度
BestFit=[]; %最大适应度
global net; %建立一个待初始化的神经网络
net=newrbe(P,T,spread);
%调用fitcal函数
fitness=fitcal();
fvrec(:,1,1)=fitness(:,1,1);
[C,I]=min(fitness(:,1,1));
MinFit=[MinFit C];
BestFit=[BestFit C];
L(:,1,1)=fitness(:,1,1); %记录每次反复的例子的适应度函数
B(1,1,1)=C; %记录粒子的最小适应函数
gbest(1,:,1)=X(I,:,1); %全局极值
%粒子群优化RBF神经网络的例子速度和位置计算
V(:,:,2)=W(1)*V(:,:,1)+c1*rand*(pbest(:,:,1)-X(:,:,1))+c2*rand*(G(:,:,1)-X(:,:,1));
%用vmax限制粒子的速度,如果V>vmax则V=vmax,如果V<-vmax则V=-vmax
for ni=1:N
for di=1:D
if V(ni,di,2)>vmax
V(ni,di,2)=vmax;
elseif V(ni,di,2)<-vmax
V(ni,di,2)=-vmax;
else
V(ni,di,2)=V(ni,di,2);
end
end
X(:,:,2)=X(:,:,1)+V(:,:,2);
%粒子群优化RBF神经网络的粒子适应度值更新
fitness=fitcal(X,net,indim,hiddennum,outdim,D,Ptrain,Train,minAllSamout,maxAllSamOut);
fvrec(:,1,j)=fitness(:,1,j);
[C,I]=min(fitness(:,1,j));
MinFit=[Minfit C];
BestFit=[BestFit min(MinFit)];
L(:,1,j)=fitness(:,1,j);
B(1,1,j)=C;
gbest(1,:,j)=X(I,;,j);
[C,I]=min(B(1,1,;));
%保存gbest是已经出现过的最好粒子
if B(1,1,j)<=C
gbest(1,:,j)=gbest(1,:,j)
else
gbest(1,:,j)=gbest(1,:,I);
end
%粒子群优化RBF神经网络的速度和位置更新
V(:,:,j+1)=W(j)*V(:,:,j)+c1*rand*(pbest(:,:,j)-X(:,:,j))+c2*rand*(G(:,:,j)-X(:,:,j))