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

📄 ga.m

📁 Genetic Algorithm for two variable
💻 M
字号:
clear;
clc;

% Initialize
Range = [1.2 1.5; -2 4];
RequiredPrecision = [3; 3];
PopulationSize = 30;
CrossoverRate = 0.85;
MutationRate = 0.01;
MaxGeneration = 1000;
[dimension, a] = size(Range);

%Compute Required bit for variable
domain = (Range(:, 2) - Range(:, 1)) .* 10 .^RequiredPrecision;
RequiredBit = zeros(dimension, 1);

i=1;
while i<= dimension
    RequiredBit(i) = RequiredBit(i) + 1;
    
    if domain(i) <= 2^RequiredBit(i)
        i = i+1;
    end;
end;

x = round(rand(PopulationSize, sum(RequiredBit)));       %Population size = 30

% Change Binary to Decimal
y = zeros(PopulationSize, dimension);


for i = 1:dimension
    pos1 = sum(RequiredBit(1:i-1))+1;
    pos2 = sum(RequiredBit(1:i));
    a1 = Range(i,1)*ones(PopulationSize, 1);
    a2 = (Range(i,2)-Range(i,1))/(2^RequiredBit(i)-1)*ones(PopulationSize,1);
    real = RealNumber(x(:, pos1:pos2));
    y(:,i) = a1 + real .* a2;
end;
y(:,i);

%Evaluation

temp = -100;
temp2 = [-10 -10 -10];
for generation = 1:MaxGeneration
f = (sin(5*pi*(y(:,1).^(3/4)-0.1))).^6-(y(:,2)).^2;

%SELECTION
%ROULETTE WHEEL Selection
%Fitness Function
p = 0;
for r = 1: length(f);
    p = p +1./f(r);
end;
    
for i = 1 : length(f)
    probability(i) = (1./(f(i))/p);                  
end;     
q(1) = probability(1);
for i = 2:length(f)
    q(i) = probability(i) + q(i-1);
end;

% New Chromosome
[PopulationSize, NumberOfGene] = size(x);

NewChromosome = zeros(PopulationSize, NumberOfGene);
for i = 1:PopulationSize
    r = rand;
    
    j = PopulationSize;
    while j > 1 && r < q(j)
        j = j-1;
    end;
    
    NewChromosome(i, :) = x(j, :);
end;

%CROSSOVER
%Generate New Chromosome
[PopulationSize, NumberOfGene] = size(NewChromosome);

Index = [];

for i = 1:PopulationSize
    r = rand;
    if r < CrossoverRate
        Index = [Index; i];
    end;
end;


%Define Index
[NumberOfSelected, N] = size(Index);
if NumberOfSelected > 1
    if mod(NumberOfSelected, 2) == 0
        ChromosomeAfterMating = DoCrossover(NewChromosome, Index);
    else
        ChromosomeAfterMating = DoCrossover(NewChromosome, Index(1:NumberOfSelected-1,:));
    end;
else
    ChromosomeAfterMating = NewChromosome;
end;

%MUTATION
    ChromosomeAfterMutation = mod((rand(size(ChromosomeAfterMating))<MutationRate)+ChromosomeAfterMating, 2);                         
    
x = ChromosomeAfterMutation;

for i = 1:dimension
    pos1 = sum(RequiredBit(1:i-1))+1;
    pos2 = sum(RequiredBit(1:i));
    a1 = Range(i,1)*ones(PopulationSize, 1);
    a2 = (Range(i,2)-Range(i,1))/(2^RequiredBit(i)-1)*ones(PopulationSize,1);
    real = RealNumber(x(:, pos1:pos2));
    y(:,i) = a1 + real .* a2;
end;
y(:,i);
f = (sin(5*pi*(y(:,1).^(3/4)-0.1))).^6-(y(:,2)).^2;
[value, position] = max(f);
Fvalue = value;
Flocation = y(position,:);
Pick = [Flocation Fvalue];
if Pick(:,3) > temp2(:,3)
       temp2 = Pick;
   else
       Pick = temp2;
   end

if value >= temp
    temp = value;
    PickMax(generation) = temp;
    else
    PickMax(generation) = temp;
    end;
 
end;
Pick
%Plotting
plot(PickMax)
title('Genetic Algorithm')
xlabel('Number Of Generation')
ylabel('f(x,y)')
box on

⌨️ 快捷键说明

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