Kamis, 07 Januari 2016

Algoritma Genetika

Algoritma genetika adalah teknik pencarian stokastik berdasarkan mekanisme dari seleksi alam dan natural genetik. Proses algoritma ini meliputi seleksi, pairing, mating, crossover dan mutasi.
Langkah-langkah algoritma genetika adalah sebagai berikut:
  1. Bangkitkan secara random populasi dengan n kromosom.
  2. Hitung nilai fitness dari setiap kromosom dalam populasi.
  3.  Buat populasi baru dengan melakukan proses berikut :

·  Pilih dua induk kromosom dari populasi berdasarkan nilai fitnessnya (semakin baik fitnessnya semakin besar kesempatan untuk terpilih).
·  Dengan probabilitas crossover (pc), crossover-kan kedua induk untuk membentuk keturunan baru (anak). Jika tidak terjadi crossover, keturunan sama dengan induk.
·         Dengan probabilitas mutasi , mutasikan keturunan baru pada setiap lokus (posisi di dalam kromosom).
·         Tempatkan keturunan baru ke dalam populasi baru.
·         Evaluasi dan seleksi sehingga didapatkan populasi baru sebanyak pop size awal.
4.  Gunakan populasi yang baru ini untuk proses algoritma selanjutnya.
5. Jika kondisi pemberhentian dipenuhi, berhenti, pilih solusi yang paling baik dalam populasi sekarang. Jika tidak maka kembali ke langkah 2).

Source Code MATLAB Metode Beda Hingga

%======================================================
%Program Berikut adalah modifikasi dari
%Program Metode Beda Hingga pada modul Persamaan Differensial Numerik
%Original Author: Prof. Dr. Agus Suryanto, M.Sc.
%======================================================
%Diketahui Masalah Kondisi Batas
%X"(t)=2*t/(1+t^2)X'(t)-2/(1+t^2)X(t)+1
%X(0)=1.25; X(1)=-0.95
%======================================================
clear all;clc;
h=input('masukkan h=');
N=(1-0)/h;
A=zeros(N+1,N+1);
X=zeros(N+1,1);
salah=0;
t=0:h:1;

A(1,1)=1;
A(N+1,N+1)=1;

for i=2:N;
    p=1+t(i)^2;
    m=h^2;
    A(i,i-1)=1+(h*t(i)/p);%a(i)
    A(i,i)=(2*m/p)-2;     %b(i)
    A(i,i+1)=1-h*t(i)/p;  %c(i)
end


F=1.25; %nilai awal
k=((1/m)+((t(i))/(h*p)));
l=((1/m)-((2*t(i))/p));
for i=1:N-1
    if i==1
        F=[F 1-k*1.25];
    elseif i==N-1
        F=[F  1+l*0.95];
    else
        F=[F  1];
    end
end

F=[F  -0.95];
B=inv(A/h^2);
X=B*transpose(F);

%penyelesaian eksak
for i=1:N+1
    y(i)=t(i)*(1/20-1/2*pi)-9/4*t(i)^2+5/4+2*t(i)*atan(t(i))+1/2*...
        log(t(i)^2+1)*t(i)^2-1/2*log(t(i)^2+1);
end
for i=1:N+1
    eror(i)=abs(y(i)-X(i));
    salah=salah+eror(i);
end

 fprintf('____________________________________________________________\n');
 fprintf('Iterasi                Nilai t(i)                Nilai X(i)\n');
 fprintf('-----------------------------------------------------------\n');
   

for i=1:N+1;
    fprintf('%f                     %f                 %f\n   ',i,t(i),X(i));
end

figure(1)
plot(t,X,'ro');
grid on;
hold on;
plot(t,y,'b*');

Source Code MATLAB Algoritma Genetika

% Algoritma Genetika Kontinyu
clear all;clc;
% Set semua parameter pada bagian I, II, and III
%_______________________________________________________
% I Setup the GA
ff='testfunction'; % fungsi objektif
npar=2; % jumlah variable optimasi
varhi=10; varlo=0; % batas variabel
%_______________________________________________________
% II Stopping criteria
maksiterasi=100; % jumlah iterasi maksimum
mincost=-9999999; % cost minimum
%_______________________________________________________
% III GA parameters
jumlahpop=10; % set population size
mutationrate=.2; % set mutation rate
selectionrate=0.5; % populasi yang dipakai (kept)
Nt=npar; % continuous parameter GA Nt=#variables
survive=floor(selectionrate*jumlahpop); % #population
% anggota populasi yang survive
nmut=ceil((jumlahpop-1)*Nt*mutationrate); % total jumlah mutasi
M=ceil((jumlahpop-survive)/2); % jumlah mating
%_______________________________________________________
% Membuat populasi awal
iga=0; % generation counter initialized
par=(varhi-varlo)*rand(jumlahpop,npar)+varlo; % random
cost=feval(ff,par); % hitung cost setiap populasi
[cost,ind]=sort(cost); % min cost di element 1
par=par(ind,:); % sort continuous
minc(1)=min(cost); % minc terdiri dari min dari
meanc(1)=mean(cost); % meanc terdiri dari rata-rata populasi
%_______________________________________________________
% iterasi terus-menerus setiap generasi
while iga<maksiterasi
iga=iga+1;
%_______________________________________________________
% Pair dan mate
M=ceil((jumlahpop-survive)/2); % jumlah mating
prob=flipud([1:survive]'/sum([1:survive])); % weights
% chromosomes
odds=[0 cumsum(prob(1:survive))']; % probabilitas

mate1=rand(1,M); % mate #1
mate2=rand(1,M); % mate #2

% ma dan pa terdiri dari kromosom yang akan disilangkan
ic=1;
while ic<=M
for id=2:survive+1
if mate1(ic)<=odds(id) & mate1(ic)>odds(id-1)
ma(ic)=id-1;
end
if mate2(ic)<=odds(id) & mate2(ic)>odds(id-1)
pa(ic)=id-1;
end
end
ic=ic+1;
end
%_______________________________________________________

ix=1:2:survive;
xp=ceil(rand(1,M)*Nt); % titik crossover
r=rand(1,M); % parameter pencampuran/mixing
for ic=1:M
xy=par(ma(ic),xp(ic))-par(pa(ic),xp(ic)); % ma and pa
% mate
par(survive+ix(ic),:)=par(ma(ic),:); % offspring 1
par(survive+ix(ic)+1,:)=par(pa(ic),:); % offspring 2
par(survive+ix(ic),xp(ic))=par(ma(ic),xp(ic))-r(ic).*xy;
% 1st
par(survive+ix(ic)+1,xp(ic))=par(pa(ic),xp(ic))+r(ic).*xy;
% 2nd
if xp(ic)<npar % crossover ketika variabel terakhir tidak terseleksi
par(survive+ix(ic),:)=[par(survive+ix(ic),1:xp(ic))
par(survive+ix(ic)+1,xp(ic)+1:npar)];
par(survive+ix(ic)+1,:)=[par(survive+ix(ic)+1,1:xp(ic))
par(survive+ix(ic),xp(ic)+1:npar)];
end % if
end
%_______________________________________________________
% Mutate the population
mrow=sort(ceil(rand(1,nmut)*(jumlahpop-1))+1);
mcol=ceil(rand(1,nmut)*Nt);

for ii=1:nmut
par(mrow(ii),mcol(ii))=(varhi-varlo)*rand+varlo;
% mutasi
end % ii
%_______________________________________________________
% offspring baru dan kromosom termutasi dievaluasi
cost=feval(ff,par);
%_______________________________________________________
[cost,ind]=sort(cost);
par=par(ind,:);
%_______________________________________________________
minc(iga+1)=min(cost);
meanc(iga+1)=mean(cost);
%_______________________________________________________
% Stopping criteria
if iga>maksiterasi | cost(1)<mincost
break
end
[iga cost(1)]
end
%_______________________________________________________
% Tampilan output
day=clock;
disp(datestr(datenum(day(1),day(2),day(3),day(4),day(5),day(6)),0))
disp(['fungsi optimumnya adalah ' ff])
format short g
disp(['jumlah populasinya adalah= ' num2str(jumlahpop)...
    ' mutation rate nya adalah = ' num2str(mutationrate)...
    ' # par = ' num2str(npar)])
disp(['#generasi ke=' num2str(iga) ' best cost=' num2str(cost(1))])
disp(['solusi terbaik'])
disp([num2str(par(1,:))])
disp('algoritma genetika kontinyu')

figure(1)
iters=0:length(minc)-1;
plot(iters,minc,iters,meanc,'--k');
xlabel('generasi');ylabel('cost');
text(0,minc(1),'best');text(1,minc(2),'populasi rata-rata')
grid on