📄 genetic.m
字号:
clear;
% function Genetic(StrAimFunc)
% This is simple genetic algorithm(SGA)
% In this function ,it fulfils genetic algorithm
global par;
M=50;
a=0.1; b=10;
lmd1=1;lmd2=2;
dlt1=1;dlt2=3;g=0;
T0=0;T1=0;T2=0;
L0=50;L1=100;L2=200;
alpha_U=0.05;
PL=0.9;
FJTJ=1; % 是否使用附加条件 0: 不使用 ; 1:使用
par=[M a b lmd1 lmd2 dlt1 dlt2 g T0 T1 T2 L0 L1 L2 alpha_U PL FJTJ];
%----------------These can be modified as you like-----------------------
maxgen=100; % maximum generation
sizepop=10; % size of population
% AimFunc='testAimFunc'; % this is function of counting fitness
AimFunc='fun'; % this is function of counting fitness
fselect='roulette'; % method of select
% you can choose 'tournament';'roulette'
fcode='float'; % method of coding
% you can choose 'float';'grey';'binary'
pcross=[0.6]; % probablity of crossover,between 0 and 1
fcross='float'; % method of crossover
% you can choose 'float';'simple';'uniform'
pmutation=[0.1]; % probability of mutation,between 0 and 1
fmutation='float'; % method of mutation
% you can choose 'float';'simple';
lenchrom=[1 1 1 1 1]; % length of bit of every varible
bound=[4 50;... % n 的范围
0 5;... % h1 的范围 h2<h1
0 5;... % h2 的范围
0.5 4;... % k1 的范围 k2<k1
0.5 4]; % k2 的范围
%--------------------------------------------------------------------------
disp('@=============================================================@');
disp('The simple genetic algorithm is runing, Please wait...!');
tic;
individuals=struct('fitness',zeros(1,sizepop),...%'value',zeros(1,sizepop),...
'chrom',[]); % structure of population
avgfitness=[]; % average fitness of population
bestfitness=[]; % best fitness of population
bestchrom=[]; % chromosome of best fitness
% inivitialization
for i=1:sizepop
% produce new population at random
individuals.chrom(i,:)=Code(lenchrom,fcode,bound);
x=Decode(lenchrom,bound,individuals.chrom(i,:),fcode);
% caculate fitness
% 修改处
%individuals.fitness(i)=AimFunc(x,heli,id_data,0);
individuals.fitness(i)=feval(AimFunc,x,par);
end
% find minimum value which is best
[bestfitness bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:);
avgfitness=sum(individuals.fitness)/sizepop;
% record average and best fitness of every generation
trace=[avgfitness bestfitness bestchrom];
% evolution begin
for i=1:maxgen
% selection
individuals=Select(individuals,sizepop,fselect);
avgfitness=sum(individuals.fitness)/sizepop;
% crossover
individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,...
sizepop,fcross,[i maxgen]);
% mutation
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,...
sizepop,fmutation,[i maxgen],bound);
% calculate fitness
for j=1:sizepop
x=Decode(lenchrom,bound,individuals.chrom(j,:),fcode);
% 修改处
%individuals.fitness(j)=AimFunc(x,heli,id_data,0);
individuals.fitness(j)=feval(AimFunc,x,par);
end
% substitute chromosome of worest fitness
% find minimum value which is best
[newbestfitness,newbestindex]=min(individuals.fitness);
[worestfitness,worestindex]=max(individuals.fitness);
% substitute chromosome of worest fitness
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:);
end
individuals.chrom(worestindex,:)=bestchrom;
individuals.fitness(worestindex)=bestfitness;
avgfitness=sum(individuals.fitness)/sizepop;
trace=[trace;avgfitness bestfitness individuals.chrom(newbestindex,:)];
end
toc;
% draw fitness of every generation
hfig=findobj('Tag','trace');
% See if it is open
if ishandle(hfig)
figure(hfig);
else
hfig=figure('Tag','trace');
end
figure(hfig);
[r c]=size(trace);
plot([1:r]',trace(:,1),'r-',[1:r]',trace(:,2),'b-');
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
legend('平均适应度','最佳适应度');
disp(['进化代数:' num2str(maxgen)]);
disp(['群体规模:' num2str(sizepop)]);
disp(['最佳适应度 变量(' num2str(size(x,2)) '个): n h1 h2 k1 k2']);
x=Decode(lenchrom,bound,bestchrom,fcode);
% show in command window
disp([bestfitness x]);
n=x(1);
h1=x(2);
h2=x(3);
k1=x(4);
k2=x(5);
alpha2=2*PHI(-k1);
beta22=PHI(k1-sqrt(n)*dlt2);
disp('alpha2 1-beta22');
disp([alpha2 1-beta22]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -