Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 人工智能 > 进化计算
进化计算 A discussion board for Evolutionary Computation.
 
 
主题工具 显示模式
旧 2010-03-06, 17:20   #1
greensim
普通会员
 
注册日期: 2008-10-06
年龄: 25
帖子: 53
声望力: 18
greensim 正向着好的方向发展
默认 【原创】遗传算法优化神经网络黑箱函数通用MATLAB源码

遗传算法优化神经网络有两种情况,一种是把遗传算法用于神经网络的训练,充分利用遗传算法全局搜索的特性,得到一个初始的权值矩阵和初始的阈值向量,再用其它训练算法(如BP算法),得到最终的神经网络结构,另外一种情况,则是把训练好的神经网络作为黑箱函数,用遗传算法搜索该黑箱函数的最大值。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系。

function [Yp,Xp,LC1,LC2]=MYGA(bpnet,M,N,Pm,LB,UB,XX,YY)
%%
% GreenSim团队原创作品,转载请注明
% 欢迎访问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=[p1*AA(1:pos)+(1-p1)*BB(1:pos),p2*AA((pos+1):5)+(1-p2)*BB((pos+1):5)];
newfarm(i,:)=A;
newfarm(i+1,:)=B;
end
%新旧种群合并
FARM=[farm;newfarm];
%第四步:选择复制
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
__________________
算法设计、代写程序,欢迎访问GreenSim团队主页→
http://blog.sina.com.cn/greensim
greensim 当前离线   回复时引用此帖
 

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 23:54


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.