image thumbnail
from Genetic Algorithms Application by Wesam Elshamy
Drawing the largest circle in a space of stars without enclosing any of them using Genetic Algorithm

Simple EMOO Problem

Simple EMOO Problem

This code is an applicatino of EMOO by using Genetic algorithms to solve the following simple constrained problem: Draw the biggest possible circle in a 2D space filled with stars without enclosing any of them.

Author: Wesam ELSHAMY

Electrical Engineering Dept., Cairo University, Egypt

wesamelshamy@ieee.org

wesamelshamy.googlepages.com

Contents

Initializing parameters

clear;
stars = 30;
iterations = 500;
population = 100;
mutation = 0.7;
mutation_step = 0.8;
grid_size = 10;

Building the stars

for i = 1:stars
    for j = 1:2
        star(i,j) = rand(1)*grid_size;
    end
end
plot(star(:,1),star(:,2),'x')
hold on

Cearting initial population

for i = 1:population
    for j = 1:2
        cit(i,j)= rand(1)*grid_size;
    end
end

Initial Population Fitness Assignment

for j = 1:population
    for k = 1:stars
        d(k) = sqrt((star(k,1)-cit(j,1))^2 + (star(k,2)-cit(j,2))^2);
    end
    d(stars+1) = cit(j,1);
    d(stars+2) = grid_size - cit(j,1);
    d(stars+3) = cit(j,2);
    d(stars+4) = grid_size - cit(j,2);
    d = sort(d);
    cit(j,3) = d(1);
end
cit = sortrows(cit,-3);
cit(1,:)
cit(:,3) = cit(:,3)/cit(1,3);
ans =

    2.6457    7.1843    1.7186

The Iterations

for i = 1:iterations
    %--------------- Mating Selection -----------------
    cit(:,3) = cit(:,3)/cit(1,3);
    pool = [];
    for l = 1:population
        if rand(1)<cit(l,3),pool=[pool;cit(l,:)];,end
    end
    %--------------- Crossover ------------------
    s = size(pool,1);
    if s/2 - round(s/2) ~=0 , pool = pool(1:s-1,:); , s = size(pool,1); , end
    for m = 1:2:s
        pool = [ pool ; [pool(m,1) , pool(m+1,2) , 0]];
        pool = [ pool ; [pool(m+1,1) , pool(m,2) , 0]];
    end
    %--------------- Mutation -------------------
    s = size(pool,1);
    for m = 1:s
        if ((rand < mutation) & (pool(m,1) < grid_size - mutation_step)) , pool(m,1)=pool(m,1)+(2*rand - 1)*mutation_step;,end
        if ((rand < mutation) & (pool(m,2) < grid_size - mutation_step)) , pool(m,2)=pool(m,2)+(2*rand - 1)*mutation_step;,end
    end
    %--------------- Invironmental Selection------------
    temp = [cit ; pool];
    ts = size(temp,1);
    for j = 1:ts
        for k = 1:stars
            d(k) = sqrt((star(k,1)-temp(j,1))^2 + (star(k,2)-temp(j,2))^2);
        end
        d(stars+1) = temp(j,1);
        d(stars+2) = grid_size - temp(j,1);
        d(stars+3) = temp(j,2);
        d(stars+4) = grid_size - temp(j,2);
        d = sort(d);
        temp(j,3) = d(1);
    end
    temp = sortrows(temp,-3);
    cit = temp(1:population,:);
end
xc = cit(1,1);
yc = cit(1,2);
r  = cit(1,3);
x = (xc-r) : 0.05 : (xc+r);
for i = 1:size(x,2)
    y(i) = yc + sqrt(r^2-(x(i)-xc)^2);
end
plot (x,y)
for i = 1:size(x,2)
    y(i) = yc - sqrt(r^2-(x(i)-xc)^2);
end
plot (x,y)
hold off

Contact us at files@mathworks.com