?? ga.asv
字號:
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
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;
Floca
if value >= temp
temp = value
PickMax(generation) = temp
else
PickMax(generation) = temp
end;
end;
%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 + -