📄 xw_ga_ann_19.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 + -