aiwa 发表于 2008-11-15 12:15:56

【原创】遗传算法优化神经网络黑箱函数通用MATLAB源码

遗传算法优化神经网络有两种情况,一种是把遗传算法用于神经网络的训练,充分利用遗传算法全局搜索的特性,得到一个初始的权值矩阵和初始的阈值向量,再用其它训练算法(如BP算法),得到最终的神经网络结构,另外一种情况,则是把训练好的神经网络作为黑箱函数,用遗传算法搜索该黑箱函数的最大值。本源码属于第二种情况,由GreenSim团队原创,转载请注明。
function =MYGA(bpnet,M,N,Pm,LB,UB,XX,YY)
%%
% GreenSim团队原创作品,转载请注明
% Email:greensim@163.com
% GreenSim团队主页:http://blog.sina.com.cn/greensim
%% 输入参数列表
%bpnet 训练好的神经网络
%M   遗传进化迭代次数
%N   种群规模(取偶数)
%Pm    变异概率
%LB    决策变量的下边界,1×5
%UB    决策变量的上边界,1×5
%XX    原始训练数据的输入部分
%YY    原始训练数据的输出部分
%% 输出参数列表
%Yp    最优个体对应输出值
%Xp    最优个体,1×5
%LC1   收敛曲线1,各代最优个体适应值的记录
%LC2   收敛曲线2,各代群体平均适应值的记录
%% ---------------------------------------------------------------
%第一步:变量初始化
LC1=zeros(1,M);%收敛曲线1
LC2=LC1;%收敛曲线2
%第二步:随机产生初始钟群
farm=zeros(N,5);
for i=1:N
    for j=1:5
      farm(i,j)=(UB(j)-LB(j))+B(j);
    end
end
counter=0;%设置迭代计数器
while counter<M
    %第三步:交叉
    newfarm=zeros(N,5);%新种群
    Ser=randperm(N);%保证随机配对
    for i=1:2:(N-1)
      AA=farm(Ser(i),:);% 待交叉的两个父代个体
      BB=farm(Ser(i+1),:);
      p2=rand;
      pos=unidrnd(4);
      A=;
      newfarm(i,:)=A;
      newfarm(i+1,:)=B;
    end
    %新旧种群合并
    FARM=;
    %第四步:选择复制
    FITNESS=zeros(1,2*N);
    fitness=zeros(1,N);
    for i=1:(2*N)
      X=FARM(i,:);
      FITNESS(i)=NETSIM(bpnet,X',XX,YY);
    end
    Ser=randperm(2*N);%选择复制采取两两随机配对竞争的方式,具有保留最优个体的能力
    for i=1:N
      f2=FITNESS(Ser(2*i));
      if f1>=f2
            farm(i,:)=FARM(Ser(2*i-1),:);
            fitness(i)=FITNESS(Ser(2*i-1));
      else
            farm(i,:)=FARM(Ser(2*i),:);
            fitness(i)=FITNESS(Ser(2*i));
      end
    end
    %记录最佳个体和收敛曲线
    maxfitness=max(fitness);
    meanfitness=mean(fitness);
    LC1(counter+1)=maxfitness;%收敛曲线1,各代最优个体适应值的记录
    LC2(counter+1)=meanfitness;%收敛曲线2,各代群体平均适应值的记录
    pos=find(fitness==maxfitness);
    Xp=farm(pos(1),:);
    Yp=maxfitness;
    %第五步:变异
    for i=1:N
      if Pm>rand&&i~=pos(1);%变异概率为Pm
            X=farm(i,:);
            p1=unidrnd(5);
            farm(i,:)=X;
      end
    end
    counter=counter+1;
    disp(counter);
end

lxz9804 发表于 2009-5-6 11:44:42

想知道该程序是完整代码吗

xieyubing734 发表于 2010-4-10 15:54:16

看懂了就知道怎么
用了额

huhuanzhuo 发表于 2010-5-10 11:04:33

子程序没出来
页: [1]
查看完整版本: 【原创】遗传算法优化神经网络黑箱函数通用MATLAB源码