爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3501|回复: 2

[程序设计] matlab粒子群优化出错

[复制链接]
发表于 2016-5-18 20:27:47 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
clear all;
clc;
load('D:\\Software\\Matlab\\MATLAB\\input.mat','inputtrain') ;
load('D:\\Software\\Matlab\\MATLAB\output.mat','ptrain') ;
inputtrain=inputtrain';
%从1到600间随机排序
k=rand(1,600);
[m,n]=sort(k);
%找出训练数据和预测数据
inputtrain_train=inputtrain(n(1:500),:)';
ptrain_train=ptrain(:,n(1:500));
inputtrain_test=inputtrain(n(501:600),:)';
ptrain_test=ptrain(:,n(501:600));

%选连样本输入输出数据归一化
[inputtrain1,inputps]=mapminmax(inputtrain_train);
[ptrain1,pputps]=mapminmax(ptrain_train);
inputtrain=inputtrain';
net=newff([-1 1],[12 4 3]);
net.layers{2}.transferFcn='elliotsig';
net.inputs{1}.range=[-1 1;-1 1;-1 1];  
net.trainParam.epochs=10;
% 参数初始化
inputnum=3;
hiddennum1=12;
hiddennum2=4;
outputnum=3;

%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=250;   % 进化次数  
sizepop=60;   %种群规模
Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;
i=1;
for i=1:60
    net=init(net);
    [net,tr]=train(net,inputtrain1,ptrain1);
    para_1_1=net.iw{1,1};
    para_1=reshape(para_1_1,1,[]);
    para_2_1=net.b{1};
    para_2=reshape(para_2_1,1,[]);
    para_3_1=net.lw{2,1};
    para_3=reshape(para_3_1,1,[]);
    para_4_1=net.b{2};
    para_4=reshape(para_4_1,1,[]);
    para_5_1 =net.lw{3,2};
    para_5=reshape(para_5_1,1,[]);
    para_6_1=net.b{3};
    para_6=reshape(para_6_1,1,[]);
    pop(i,1:115)=[para_1,para_2,para_3,para_4,para_5,para_6];
    V(i,:)=rands(1,115);
    fitness(i)=fun1(pop(1,:),inputnum,hiddennum1,hiddennum2,outputnum,net,inputtrain,ptrain);
end
% 个体极值和群体极值
[bestfitness, bestindex]=min(fitness);
zbest=pop(bestindex,:);   %全局最佳
gbest=pop;    %个体最佳
fitnessgbest=fitness;   %个体最佳适应度值
fitnesszbest=bestfitness;   %全局最佳适应度值
x=zbest;
w1=x(1:inputnum*hiddennum1);%1:36
B1=x(inputnum*hiddennum1+1:inputnum*hiddennum1+hiddennum1);%37:48
w2=x(inputnum*hiddennum1+hiddennum1+1:inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2);%49:96
B2=x(inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+1:inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2 ...
+hiddennum2);%97:100
w3=x(inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+hiddennum2+1: ...
   inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+hiddennum2+hiddennum2*outputnum );%101:112
B3=x(inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+hiddennum2+1+hiddennum2*outputnum :115); %113:115
net.iw{1,1}=reshape(w1,hiddennum1,inputnum);
net.lw{2,1}=reshape(w2,hiddennum2,hiddennum1);
net.lw{3,2}=reshape(w3,outputnum,hiddennum2);
net.b{1}=reshape(B1,12,[]);
net.b{2}=reshape(B2,4,[]);
net.b{3}=reshape(B3,3,[]);
%% BP网络训练
%网络进化参数
net.trainParam.epochs=5000;
net.trainParam.lr=0.1;
%网络训练
net1=train(net,inputtrain1,ptrain1);
%% BP网络预测

%预测数据归一化
inputtrainn_test=mapminmax('apply',inputtrain_test,inputps);

%网络预测输出
an=sim(net,inputtrainn_test);

%网络输出反归一化
BPoutput=mapminmax('reverse',an,pputps);
B=[ptrain_test(1,:);BPoutput(1,:)]
[m,n]=size(B);
x=1:n;
plot(x,B(1,:),'m-');
hold on;
plot(x,B(2,:),'b-');
hold off
D=[ptrain_test(2,:);BPoutput(2,:)]
[m,n]=size(D);
x=1:n;
plot(x,D(1,:),'m-');
hold on;
plot(x,D(2,:),'b-');
hold off

E=[ptrain_test(3,:);BPoutput(3,:)]
[m,n]=size(E);
x=1:n;
plot(x,E(1,:),'m-');
hold on;
plot(x,E(2,:),'b-');
hold off


密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-5-18 20:29:35 | 显示全部楼层
fitness(i)=fun1(pop(1,:),inputnum,hiddennum1,hiddennum2,outputnum,net,inputtrain,ptrain);
这行出错。。说是没有定义与“network”相符合的“fun1”函数
密码修改失败请联系微信:mofangbao
发表于 2016-5-19 20:15:13 | 显示全部楼层
请附上数据,以便调试
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表