%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)