返回信息流m = [1.3993 1.3918 1.3649 1.3506 1.3608 1.3695 1.3472 1.3355 1.3197 1.3213 ...
1.3154 1.3264 1.309 1.2882 1.3001 1.3004 1.2965 1.3189 1.3211 1.3148 ...
1.2932 1.282 1.2811 1.3009 1.2851 1.2788 1.2942 1.2958 1.291 1.2864 ...
1.2882 1.2861 1.2797 1.2582 1.2566 1.2656 1.2827 1.2669 1.287 1.2714 ...
1.2718 1.2665 1.256 1.2528 1.2632 1.2544 1.2659 1.2615 1.2713 1.2804 ...
1.2896 1.2927 1.2974 1.303 1.3487 1.3658 1.3577 1.3615 1.348 1.3574 ...
1.3528 1.3298 1.3188 1.3255 1.3241 1.3472 1.348 1.3321 1.3268 1.3251 ...
1.3118 1.3186 1.3375 1.3266 1.3221 1.3188 1.3038 1.2901 1.2935 1.3006 ...
1.3125 1.3252 1.3022 1.313 1.3264 1.3244 1.3263 1.3413 1.3303];
n = length(m);% n=89
% 以60个数据预测
p=zeros(n-59,60); %30行60列
t=zeros(n-59,1); %30行1列
for i=1:(n-59)
p(i,:)=m(i:i+59); % p的下一行是上一行的右移一位的序列
if i~=n-59
t(i)=m(i+60); %t(1,1)到t(29,1)保存m中第61到89的数据
else t(i)=1.3299;%t(30,1)=0.8483,这是原始数据
end
end;
q= [1.3528 1.3298 1.3188 1.3255 1.3241 1.3472 1.348 1.3321 1.3268 1.3251 ...
1.3118 1.3186 1.3375 1.3266 1.3221 1.3188 1.3038 1.2901 1.2935 1.3006 ...
1.3125 1.3252 1.3022 1.313 1.3264 1.3244 1.3263 1.3413 1.3303 1.3299];%q是m的后30位,61-90.用于计算MSE。
h = [1.2882 1.2861 1.2797 1.2582 1.2566 1.2656 1.2827 1.2669 1.287 1.2714 ...
1.2718 1.2665 1.256 1.2528 1.2632 1.2544 1.2659 1.2615 1.2713 1.2804 ...
1.2896 1.2927 1.2974 1.303 1.3487 1.3658 1.3577 1.3615 1.348 1.3574 ...
1.3528 1.3298 1.3188 1.3255 1.3241 1.3472 1.348 1.3321 1.3268 1.3251 ...
1.3118 1.3186 1.3375 1.3266 1.3221 1.3188 1.3038 1.2901 1.2935 1.3006 ...
1.3125 1.3252 1.3022 1.313 1.3264 1.3244 1.3263 1.3413 1.3303 1.3299];
%m第31位起数据到90位数据,其中第90个数据
k = length(h);
d = zeros((k-59),60);
for j=1:(k-59)
d(j,:)=h(j:j+59);%d=h,1行60列
end
%sim(net,d') %d是1*60,m的31-90,d'1*60
%for kk=1:10
net=newff(minmax(p'),[3 1],{'logsig','logsig','purelin'},'trainscg');
net.trainparam.show=5;
net.trainparam.lr=0.01;
net.trainparam.epochs=2000;
net.trainparam.goal=1e-8;
%net.trainParam.minstep = 1.0e-10;
net.performFcn='mse';
net=train(net,p',t') ;%p是30*60,m的1-60,2-61,3-62...30-89;p'60行30列;t是30*1,m的61-89数据加第90个数据,t'1行30列
%pso
swarmCount = 20; %粒子数
swarmLength = 187; %粒子长度
vMax = 20; %粒子运动最大速度
pMax = 2; %粒子运动最大位置
swarm = rand(swarmCount, swarmLength); %初始粒子群,即粒子的位置
v = rand(swarmCount, swarmLength); %粒子的速度
swarmfitness = zeros(swarmCount, 1, 'double'); %粒子的适应度值
pBest = rand(swarmCount, swarmLength); %个体最优值
pBestfitness = zeros(swarmCount, 1, 'double'); %个体最优适应度值
pBestfitness(:, :) = 1;
gBest = rand(1, swarmLength); %全局最优值
gBestfitness = 1; %全局最优适应度值
c1 = 2;
c2 = 2;
maxEpoch = 2000; %最大训练次数
errGoal = 0.00001; %期望误差最小值
epoch = 1;
while (epoch < maxEpoch && gBestfitness > errGoal)
for i = 1 : swarmCount
%计算粒子的适应度值
net.iw{1, 1} = swarm(1,1:180)'; % 运行之后显示这行出错,说是输入p'是3by60的矩阵,那么输入层到隐含层的权值不就是有180个么?错在哪里呢?要怎么改,求高手指点,不胜感激!!!!
net.b{2} = swarm(1, 181 : 183)';
net.lw{2, 1} = swarm(1, 184 : 186);
net.b{2} = swarm(1, 187 : 187);
这是一条镜像帖。来源:北邮人论坛 / matlab / #7729同步于 2010/11/19
Matlab机器人发帖
请教高手,Matlab 关于PSO优化神经网络的程序
ailsali
2010/11/19镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。