image thumbnail
from Global maximum point for 3D surface using GA by Ali Talib Oudah
Finding the global maximum height for 3D multiple peak surface using genetic algorithm

ga_main_program.m
%multipeak 3Dimension Problem using genetic algorithm to find the maximum
%(global optimum)point for 3D multipeak surface

% Author: Ali Talib Oudah
%MSc Mechtronics Eng. Dept.
%e-mail: alitalib82@yahoo.com

clear,clc
close all
global  bound rng
%% Initializing parameters
pops=20;                      %population size
maxgen=70;                    %maximum generation
crossp=0.8;                   %crossover probability
mutatep=0.35;                 %mutation probability
bound=[-1 1;-1 1];
numvar=size(bound,1);         % chromosome length (number of variables)
rng=(bound(:,2)-bound(:,1))'; % variable range

%.................population initialization.................
pop=zeros(pops,numvar);       %pop = initial population
pop(:,1:numvar)=(ones(pops,1)*rng).*(rand(pops,numvar))+...
    (ones(pops,1)*bound(:,1)');
%......................start generation......................
for it=1:maxgen
    fpop=multipeak(pop);
    [cs,inds]=max(fpop);bchrom=pop(inds,:);  % for elitism
    
    %........tournamet selection
    toursize=5;              % tournament size
    players=ceil(pops*rand(pops,toursize));
    scores=fpop(players);
    [a,m]=max(scores');
    pind=zeros(1,pops);
    for i=1:pops
        pind(i)=players(i,m(i));
        parent(i,:)=pop(pind(i),:);
    end
    %...............crossover
    child=cross(parent,crossp);
    %................mutation
    pop=mutate(child,mutatep);
     
    mm=multipeak(pop); 
    maxf(it)=max(mm);
    meanf(it)=mean(mm);
    
    [bfit,bind]=max(mm);  % bfit=best fitness & bind=best fitness index
    bsol=pop(bind,:);
    %.....................plotting 3D surface....................
    [x,y]=meshgrid([-1:0.05:1]);
    r=sqrt(x.^2+y.^2);
    s=sqrt((x-0.5).^2+y.^2);
    ss=sqrt((x-0.8).^2+y.^2);
    fff=exp(-2*r.^2)+2*exp(-1000*s.^2)+3*exp(-1000*ss.^2);
    cla
    mesh(x,y,fff),hold on
    %....................plot all the points.............................
    plot3( pop(:,1),pop(:,2),mm,'y+');
    %...................plot the optimum point.........................
    plot3( bsol(1),bsol(2),bfit,'rd');%hold on
    axis([-1.5 ,1.5,-1.5 ,1.5])
    xlabel(bsol(1))
    ylabel(bsol(2))
    zlabel(bfit)
    title(['Generation=',num2str(it)])
    pause(0)
    %................................elitism.......................
    pop(inds,:)=bchrom;
    %..............................................................
end
disp(['x=',num2str(bsol(1))])
disp(['y=',num2str(bsol(2))])
disp(['z=',num2str(bfit)])
%...............................End generation.........................
figure, plot(maxf), hold on, plot(meanf,'r-');
xlabel('generation')
ylabel('fitness')
title('fitness preogress')
legend('maximum fintness','meanftness',4)

Contact us at files@mathworks.com