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

📄 xw_ga_ann_19.m

📁 该程序运用遗传算法优化神经网络
💻 M
字号:
%这里做了一个所谓的军费预测(没题目找啊) 
>>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 
                for j=1:10 
                    param1(k,r)=param1(k,r)+a1(k,r,j)*pow2(j-1); 
                end 
            end 
        end 
        for k=1:4 
            for j=1:10 
                param2(1,k)=param2(1,k)+a2(1,k,j)*pow2(j-1); 
            end 
        end 
            
       m=pow2(10)-1; 
       for k=1:3 
            for r=1:5 
                x_param1(k,r)=-15+param1(k,r)/m*32; 
            end 
        end 
        for k=1:4 
            y_param2(1,k)=-15+param2(1,k)/m*32; 
        end 
        
       fitness_function(1,i)=xw_ga_ann19_fitness( x_param1,y_param2); 
       %fitness_function(1,i)=x1^2+x2^2+x3^2+x4^2+x5^2+x6^2+x7^2+x8^2+x9^2+x10^2; 
       if(fitness_function(1,i)>maxsat) 
           maxsat=fitness_function(1,i); 
           optimal_1=x_param1; 
           optimal_2=y_param2; 
           optimal_3=fitness_function(1,i); 
       end 
       if(fitness_function(1,i)<=0.001) 
           flag=-1; 
           %optimal 
           %generation 
           break; 
       else sum_fit=sum_fit+fitness_function(1,i); 
       end 
       if(flag<0) 
           break; 
       end 
   end 
   if(flag>0) 
       %the first select 
       sum_fit=sum_fit-fitness_function(1,Population_Size); 
       for i=1:Population_Size-1 
           x=round(randn(1)*1023); 
           sum=round(sum_fit); 
           rr=rem(x,sum); 
           n=1;ba=1; 
           partsum=0; 
           while((partsum<rr)&(n<Population_Size-1)) 
               parsum=partsum+fitness_function(1,n); 
               ba=n; 
               n=n+1; 
           end 
           selected(1,i)=ba; 
       end 
       %reproduce 
       for i=1:Population_Size-1 
           for j=1:String_Length 
               chromosome_change(i,j)=chromosome(selected(1,i),j); 
           end 
           fitness_function(1,i)=fitness_function(1,selected(1,i)); 
       end 
       %select before crossover 
       for i=1:Population_Size-1 
           x=round(rand(1)*32367); 
           sum=round(sum_fit); 
           rr=rem(x,sum)+1; 
           n=1; 
           partsum=0; 
           while((partsum<rr)&(n<=Population_Size-1)) 
               partsum=partsum+fitness_function(1,n); 
               bba=n; 
               n=n+1; 
           end 
           selected(1,i)=bba; 
       end 
       %crossover 
       maxsw=max(fitness_function); 
       for i=1:Population_Size/2-1 
           parent1=selected(1,i); 
           parent2=selected(1,Population_Size-1-i); 
           child1=i; 
           child2=Population_Size-1-i; 
           pc=0.8; 
           randnum=rand(1); 
           if randnum<pc 
            site1=round(rand(1)*String_Length); 
               for j=1:String_Length 
                   if(j<site1) 
                   chromosome(child1,j)=chromosome_change(parent1,j); 
                   chromosome(child2,j)=chromosome_change(parent2,j); 
                   else 
                   chromosome(child1,j)=chromosome_change(parent2,j); 
                   chromosome(child2,j)=chromosome_change(parent1,j); 
                   end 
               end 
           end 
       end 
       %mutation 
       pm=0.1; 
       for i=1:Population_Size-1             
           for j=1:String_Length 
               randnum=rand(1);                 
               if(randnum<pm) 
                   chromosome(i,j)=~chromosome(i,j);%变异取反 
                   %else 
                  % chromosome(i,j)=~chromosome(i,j);%变异取反 
               end 
           end 
       end 
   end 
   generation=generation+1; 
end 

⌨️ 快捷键说明

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