📄 geneticalgorithm.m
字号:
% Genetic algorithm for solving simple optimization problem
% f(x)=x1^2+x2^2, -5≤x1≤5, -5≤x2≤5
%The stategy of optimal maintaince is applied in the algorithm
clear all;
clc;
format long;
Population_Size=100;
String_Length=30;
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=100;
while(flag>0)&(generation<50)
sum_fit=0;
for i=1:Population_Size
a1=chromosome(i,1:15);a2=chromosome(i,16:30);
param=zeros(1,2);
for j=1:15
param(1,1)=param(1,1)+a1(1,j)*pow2(j-1);
end
for j=1:15
param(1,2)=param(1,2)+a2(1,j)*pow2(j-1);
end
m=pow2(15)-1;
x1=-5+param(1,1)/m*10;
x2=-5+param(1,2)/m*10;
fitness_function(1,i)=x1^2+x2^2;
if(fitness_function(1,i)<maxsat)
maxsat=fitness_function(1,i);
optimal=[x1 x2 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(rand(1)*32767);
sum=round(sum_fit);
rr=rem(x,sum);
n=1;ba=1;
partsum=0;
while((partsum<rr)&(n<Population_Size-1))
partsum=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)*32767);
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);
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
%mutation
pm=0.05;
for i=1:Population_Size-1
for j=1:String_Length
randnum=rand(1);
if(randnum<pm)
chromosome(i,j)=~chromosome(i,j);
end
end
end
end
generation=generation+1
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -