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

📄 genetic.m

📁 用简单遗传算法SGA实现的关于控制图的程序
💻 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 + -