⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matlabalgorithm.txt

📁 matlab遗传算法实例,用于在matlab环境下遗传算法的实现.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
matlab中遗传算法的一些例子! 
 
作者:未知    文章来源:本站原创    点击数:1343    更新时间:2005-5-26 
下面是关于简单遗传算法和简单bp网络的程序给大家看一下。 看你有用否??
y=1/x: 
%N=input('设定隐含层神经元个数:\n'); 
%maxecho=input('最大训练回合数'); 
%网络初始化 
N=3;%可以自己设定 
maxecho=1000; 
h=0.4;%学习速率 
p=1:1:100; 
t=1./p; 
inw=randn(N,2);%输入-隐含权值矩阵,单输入并加上了偏置一列 
ins=zeros(N,1);%隐含得到的诱导矩阵 
outg=zeros(N,1);%反向传到回至输入的delta值 
outs=zeros(N,1);%隐含输出的矩阵 
outw=randn(1,N+1);%隐含输出权值矩阵(加上一个偏置) 
outv=zeros(1,1);%输出得到的诱导矩阵 
outy=zeros(1,1); 
backg=zeros(1,1);%反向传至隐含层的delta值 
m=1; 
n=0; 
%开始样本训练 
%for x=1:maxecho 
while(n<=maxecho)%|m>0.2) 
   m=0; 
   for i=1:length(p) 
     ins=inw*[p(i);1]; 
     outs=1./(1+exp(-ins)); 
     outv=outw*[outs;1]; 
     outy=1./(1+exp(-outv)); 
     backg=(t(i)-outy)*(outy.*(1-outy)); 
     outg=(outs.*(1-outs)).*(outw(:,1:N)'*backg); 
     outw=outw+h*backg*[outs;1]'; 
     inw=inw+h*outg*[p(i),1]; 
     m=m+(t(i)-outy)^2; 
   end 
   n=n+1; 
end 
%开始样本测试 
textp=1:0.1:100; 
textt=1./textp; 
textout=zeros(1,length(textp)); 
error=zeros(1,length(textp)); 
for i=1:length(textp) 
   ins=inw*[textp(i);1]; 
   outs=1./(1+exp(-ins)); 
   outv=outw*[outs;1]; 
   outy=1./(1+exp(-outv)); 
   textout(i)=outy; 
   error(i)=abs(textt(i)-textout(i)); 
end 
%测试完成后,观察输出,以及误差的变化 
k=1:0.1:100; 
plot(k,textt,'r',k,textout,'b',k,error,'g'); 
xlabel(n); 

可以比较清楚的看到一个基本bp算法的过程,当时自己比较得意的就是其中的矩阵相乘。速度很快,而且比较容易扩展,即任意多的输入,任意多的隐含层。 
到后来,我的人工智能老师(海龟,他的老师的老师就是乍得)要求比较综合的算法,然后半个月里没日没夜的作小的project,小小的一门人工智能课占据了几乎所有的课外时间,弄得随机过程差点没混过去。还记得圣诞节快乐的一天,那时候在老师家里聚会(project完成后),半夜里就下雪了。杭州很少下雪...^_^,美妙的回忆。在做小程序期间认识了高手冰彬鱼六代(南航毕业,很强的人,自编了一个sga工具箱,现在法国留学),还有动力论坛的海阔天空,当时真是景仰万分,他们所作的无人能够代替。在此呢,略微效仿一下啦,虽然不算什么,但我是新手啊。

ga优化神经网权值&阈值程序。 
优化的基本原理和过程很多论文可以查到,在此不必赘述我就把用gaot5的小程序贴在下面吧,也是y=1/x(为看的方便,比较繁杂的也有) 
file:gabp.m 
%************************************** 
clear all 
% 用GA训练BP网络的权值、阈值 
% 开始计时 
tic, 
% BP网络初始化 
[P,T,R,S1,S2,S]=bpinit; 
bounds=ones(S,1)*[-10 10]; 
% 初始种群个数 
num=60; 
pop=initializega(num,bounds,'fitness'); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% clear all 
% % 用GA训练BP网络的权值、阈值 
% % 开始计时 
% tic, 
% % BP网络初始化 
% [P,T,R,S1,S2,S]=bpinit; 
% bounds=ones(S,1)*[0.1 0.9]; 
% % 初始种群个数 
% num=60; 
% pop=initializega(num,bounds,'fitness'); 
% % 遗传代数 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 



% 遗传代数 
gen=500; 
[x endPop bPop trace]=ga(bounds,'fitness',[],pop,[1e-6 1 1],'maxGenTerm',gen,... 
'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]); 



for i=1:S 
  x(i)=endPop(1,i); 
end; 
sum=0; 
% 前R*S1个编码为W1 
for i=1:S1, 
   for k=1:R, 
     W1(i,k)=x(R*(i-1)+k); 
   end 
end 
% 接着的S1*S2个编码(即第R*S1个后的编码)为W2 
for i=1:S2, 
  for k=1:S1, 
     W2(i,k)=x(S1*(i-1)+k+R*S1); 
  end 
end 
% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1 
for i=1:S1, 
  B1(i,1)=x((R*S1+S1*S2)+i); 
end 
% 接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2 
for i=1:S2, 
  B2(i,1)=x((R*S1+S1*S2+S1)+i); 
end 
% 计算S1与S2层的输出 
for i=1:100 
   x1=W1*P(i)+B1; 
   A1=1./(1+exp(-x1)); 
   x2=W2*A1+B2; 
   A2=1./(1+exp(-x2)); 
% A1=logsig(W1*P(1:17,i),B1); 
% A2=logsig(W2*A1,B2); 
YY(i)=A2; 
% 计算误差平方和 
% SE=; 
%sum=sum+sumsqr(T(i)-A2); 
end 

i=1:1:100 
plot(i,YY(i),'r+',i,T(i),'b-'); 


% [W1 B1 W2 B2]=gadecod(x); 
% 仿真结果 
% TT=simuff(P,W1,B1,'logsig',W2,B2,'logsig') 
toc % 结束计时 

>>file:fitness.m 
function[sol,eval]=fitness(sol,options) 
[P,T,R,S1,S2,S]=bpinit; 
numv=size(sol,2)-1; 
       x=sol(1:numv); 
       eval=f(x); 

>>file:f.m 

function [eval]=f(sol) 
       numv=size(sol,2); 
       x=sol(1:numv); 
       [P,T,R,S1,S2,S]=bpinit; 
%get the value of fitness 

% 前R*S1个编码为W1 
for i=1:S1 
   for k=1:R, 
     W1(i,k)=x(R*(i-1)+k); 
   end 
end 
% 接着的S1*S2个编码(即第R*S1个后的编码)为W2 
for i=1:S2 
  for k=1:S1, 
     W2(i,k)=x(S1*(i-1)+k+R*S1); 
  end 
end 
% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1 
for i=1:S1 
  B1(i,1)=x((R*S1+S1*S2)+i); 
end 
% 接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2 
for i=1:S2 
  B2(i,1)=x((R*S1+S1*S2+S1)+i); 
end 


sum=0; 
SE=0; 
for i=1:100 
   x1=W1*P(i)+B1; 
   A1=1./(1+exp(-x1)); 
   x2=W2*A1+B2; 
   A2=1./(1+exp(-x2)); 
% A1=logsig(W1*P(1:17,i),B1); 
% A2=logsig(W2*A1,B2); 

% 计算误差平方和 
SE=sumsqr(T(i)-A2); 
sum=sum+SE; 
end 
eval=10/sum; % 遗传算法的适应值 

>>file:bpinit.m 
% BP网络初始化:给出网络的训练样本P、T, 
% 输入、输出数及隐含神经元数R,S2,S1 
function [P,T,R,S1,S2,S]=bpinit; 
for i=1:100 
   P(i)=i; 
   T(i)=1/P(i); 
end 
[R,Q]=size(P);%R=1 
[S2,Q]=size(T);%S2=1 
S1=3;%3 nu 
S=R*S1+S1*S2+S1+S2; % 遗传算法编码长度。

这个是copy的。 
这里做了一个所谓的军费预测(没题目找啊) 
>>file:xw_ga_ann_19%431网络,总共19个权值阈值 
clear all; 
clc; 
format long; 
Population_Size=200; 
String_Length=190; 
chromosome=round(rand(Population_Size,String_Length)); 
chromosome_change=zeros(Population_Size,String_Length); 
flag=1; 
fitness_function=zeros(1,Population_Size); 
selected=zeros(1,Population_Size); 
generation=1; 
maxsat=0; 
a1=zeros(3,5,10); 
a2=zeros(1,4,10); 
param1=zeros(3,5); 
param2=zeros(1,4); 
x_param1=zeros(3,5); 
y_param2=zeros(1,4); 
while(flag>0)&(generation<1000) 
   sum_fit=0; 
   for i=1:Population_Size 
       param1=zeros(3,5); 
       param2=zeros(1,4); 
       x_param1=zeros(3,5); 
       y_param2=zeros(1,4); 
       a1(1,1,1:10)=chromosome(i,1:10);a1(1,2,1:10)=chromosome(i,11:20);a1(1,3,1:10)=chromosome(i,21:30); 
       a1(1,4,1:10)=chromosome(i,31:40);a1(1,5,1:10)=chromosome(i,41:50);a1(2,1,1:10)=chromosome(i,51:60); 
       a1(2,2,1:10)=chromosome(i,61:70);a1(2,3,1:10)=chromosome(i,71:80);a1(2,4,1:10)=chromosome(i,81:90); 
       a1(2,5,1:10)=chromosome(i,91:100); a1(3,1,1:10)=chromosome(i,101:110); a1(3,2,1:10)=chromosome(i,111:120); 
       a1(3,3,1:10)=chromosome(i,121:130); a1(3,4,1:10)=chromosome(i,131:140);a1(3,5,1:10)=chromosome(i,141:150); 
       a2(1,1,1:10)=chromosome(i,151:160); a2(1,2,1:10)=chromosome(i,161:170); a2(1,3,1:10)=chromosome(i,171:180); 
       a2(1,4,1:10)=chromosome(i,181:190); 
        
        for k=1:3 
            for r=1:5 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -