B A B II LANDASAN TEORI
2.1 Akar suatu Persamaan Sebuah fungi disebut sebagai polinomial jika bisa dinyatakan ke dalam bentuk
( x) an x n an1 x n1 di mana
a2 x 2 a1 x a0 ,
adalah bilangan bulat nonnegatif dan
konstanta, disebut koefisien polinomial. Untuk
adalah
, maka kita akan dapatkan
sebuah fungsi nonlinear. Persamaan yang berbentuk fungsi nonlinear selanjutnya disebut persamaan nonlinear. Misalkan diberikan sebuah persamaan nonlinear x 2 10 x 21 0 . Maka, yang dinamakan sebagai akar persamaan adalah x0 sedemikian sehingga
x 2 10 x 21 0 benar. Tentu saja, x dan x0 haruslah mempunyai domain yang sama. Dengan mudah, menggunakan metode melengkapkan kuadrat sempurna, dari persamaan nonlinear tersebut kita akan dapatkan,
x2 10 x 25 4 x 5 4 x 5 4 2 . 2
Sehingga, akar dari
persamaan x 2 10 x 21 0 adalah x0 2 5 3 atau
x0 2 5 7 .
2.3 Algoritma Genetika Algoritma genetika merupakan metode optimasi berbasis pada prinsip gegnetika dan seleksi alam dalam organisme hidup. Algoritma ini dikembangkan oleh John Holland pada tahun 1975 dan dipopulerkan oleh David Goldberg pada tahun 1989. Salah satu keuntungan utama dari algoritma genetika dibandingkan dengan metode konvensional adalah algoritma genetika tidak
memerlukan
evaluasi gradien dari fungsi tujuan.
1
Berdasarkan cara pengodean variabel ke dalam kode program pada komputer, pengodean
algoritma genetika dapat dibedakan menjadi algoritma
genetika tipe biner dan algoritma genetika tipe kontinu. Kedua tipe algoritma genetika tersebut telah diimplementasikan dalam banyak bidang. Roush dan Branton menggunakan algoritma genetika biner untk mengestimasi model pertumbuhan unggas. Tutkun menggunakan algoritma genetik kontinu untuk mengestimasi parameter dari suatu model sistem dinamik yang berbentuk sistem persamaan differensial linear orde satu. Windarto dkk. membandingkan penggunaan algoritma genetika biner dan kontinu dalam estimasi parameter suatu model pertumbuhan logistik. Layaknya algoritma pada umumnya, algoritma genetika mempunyai beberapa prosedur. Windarto (2015) menjelaskan prosedur implementasi algoritma genetika kontinu yang diadaptasi dari buku teks karya Haupt dan Haupt : 1. Definisikan fungsi fitness dan variabel keputusan yang terkait dengan permasalahan optimasi. 2. Tentukan nilai parameter banyaknya generasi maksimum (ngen), probabilitas pindah silang (pc), dan probabilitas mutasi (pmut). Probabilitas pindah silang menyatakan proporsi populasi pada generasi sekarang yang tetap dipertahankan pada generasi berikutnya. Untuk keperluan praktis, probabilitas pindah silang dipilih sebesar 0,5. 3. Hitunglah nilai fitness untuk masing-masing individu (solusi). Pada permasalahan optimasi berbentuk penentuan nilai minimum, semakin kecil nilai fungsi tujuan, maka semakin tinggi nilai fitnes. Sebaliknya, semakin besar nilai fungsi tujuan, semakin rendah nilai fitness. Pada permasalahan optimasi berbentuk penentuan nilai maksimum, semakin besar nilai fungsi tujuan, maka semakin tinggi nilai fitness. Sebaliknya, semakin kecil nilai fungsi tujuan, semakin rendah nilai fitness. 4. Seleksi sejumlah individu pada populasi menjadi subpopulasi individu induk. 5. Lakukanlah proses pemilihan pasangan pada subpopulasi individu induk.
2
6. Lakukanlah proses pindah silang pada individu induk untuk menghasilkan individu anak (offspring). 7. Lakukanlah proses mutasi secara acak pada sejumlah individu. 8. Cek apakah kondisi akhir sudah terpenuhi. Jika tidak, ulangi kembali prosedur (3). Salah satu kriteria terpenuhinya kondisi akhir adalah banyaknya generasi maksimum sudah tercapai.
Berikut adalah deskripsi singkat dari istilah yang berhubungan dengan algoritma genetika : 1. Kromosom disebut juga sebagai individu. Secara fisis, suatu kromosom menyatakan satu solusi dari permasalahan model optimasi terkait. Satu kromosom bisa terdiri dari dari satu gen (variabel) atau beberapa gen. 2. Induk
merupakan
(dikombinasikan)
individu
dengan
(solusi)
induk
yang
lainnya
akan
(solusi
dikawinkan
lainnya)
untuk
menghasilkan anak atau offspring (solusi) baru. 3. Seleksi induk merupakan pemilihan individu pada populasi menjadi individu induk. 4. Pindah silang (cross over) merupakan mekanisme pengambilan sifat (nilai) dua individu induk dan pengubahan sifat (nilai) dari kedua individu tersebut untuk menghasilkan satu atau dua individu anak (offspring). 5. Mutasi merupakan pengubahan sifat (nilai) pada suatu individu (solusi) sehingga diperoleh individu (solusi) lain. Proses mutasi
merupakan
eksplorasi ruang solusi. Semakin besar mutasi, semakin banyak ruang solusi yang dieksplorasi. Namun, mutasi juga berpotensi merusak individu (solusi) yang sudah bernilai baik. Oleh karena itu, perlu ditentukan probabilitas mutasi yang optimum. 6. Fitness merupakan ukuran daya tahan suatu individu (solusi) dalam suatu populasi individu (populasi solusi). Semakin besar nilai fitness suatu individu, semakin besar peluang individu tersebut tetap bertahan pada generasi berikutnya.
3
B A B III HASIL DAN PENGAMATAN
4.1. Algoritma dan Program Penentuan Akar Persamaan dengan Matlab Diberikan sebuah persamaan 2cos x x 1 0,
. Kita akan
mencari akar persamaan tersebut. Sebelum menggunakan algoritma genetika, kita harus mengubah persoalan di atas menjadi persoalan optimasi. Kita bisa mentransformasikan
persoalan
tersebut
dengan
mencari
nilai
yang
meminimumkan fungsi
f ( x) 2cos x x 1 , 2
.
Sekarang, dengan bantuan Matlab, kita bisa menggunakan algoritma genetika untuk masalah optimasi di atas. Berikut algoritmanya : 1. Pertama, kita harus menciptakan populasi atau ruang solusinya, yaitu memenuhi interval
. Oleh karena itu, kita menggunakan program
M-File Matlab sebagai berikut : % Kode program Bangkit_Populasi.m % %%% npop = Banyaknya individu (ukuran populasi) %%% nvar = Banyaknya variabel keputusan (dalam hal ini nvar = 1) %%% vup = Vektor yang berisi batas atas nilai variabel keputusan. %%% vdown = Vektor yang berisi batas bawah nilai variabel keputusan. function varargout = bangkit_pop( npop, nvar,vup,vdown) pop = rand(npop,nvar); for k = 1:nvar pop(:,k) = vdown(k) + (vup(k) - vdown(k))*pop(:,k); end varargout = {pop}; end % Akhir kode program Bangkit_Populasi.m % Karena dalam fungsi di atas kita hanya mencari nilai
, maka kita cukup
memberikan nilai nvar=1.
4
2. Setelah itu, kita akan menghitung nilai fitness dari setiap solusi yang sudah kita ciptakan pada ruang solusi sebelumnya, dengan program berikut : % Kode program nilai_fitness.m % function varargout = nilai_fitness(dpop) [npop,klm] = size(dpop); fitness_pop = (2*cos(dpop)-dpop+1).^2; yterbaik = min(fitness_pop); indeks = min(find(fitness_pop == yterbaik)); xterbaik = dpop(indeks,:); varargout ={fitness_pop,xterbaik,yterbaik}; end % Akhir kode program nilai_fitness.m % Perhatikan program di atas, kita memasukkan nilai fitness dengan fungsi tujuannya. Lalu, kita tinggal mencari nilai minimum fungsi tujuan dari individu-individu di ruang solusi. 3. Kita sudah mempunyai nilai fitness dan individu terhadap fungsi tersebut. Sekarang, kita akan menyeleksi individu yang masih bertahan. Kita akan menggunakan proporsi 0,5, yaitu
. Berikut programnya :
%%% Kode program Seleksi_Populasi.m %%% function varargout = Seleksi_Pop(pop,fitness_pop,xrate) [npop, ngen] = size(pop); [fitness_pop_urut,indeks] = sort(fitness_pop); ninduk = round(npop*xrate); popinduk = zeros(ninduk,ngen); popinduk = pop(indeks(1:ninduk),:); varargout = {popinduk}; end %%% Akhir kode program Seleksi_Populasi.m %%% Dari program di atas, kita akan mendapatkan setengah dari jumlah individu awal. Individu ini yang dinamakan induk.
5
4. Setelah itu, kita akan memasangkan induk tersebut atau pindah silang. Tapi, sebelumnya kita akan menentukan pasangannya dengan metode pemilihan pasangan secara acak terboboti. Menggunakan rumus :
P(n)
nbertahan n 1 nbertahan
n
2(nbertahan n 1) . nbertahan (nbertahan 1)
n 1
Berikut programnya : %%% Akhir kode program Probabilitas_Kumulatif.m %%% function varargout = Probabilitas_Kumulatif(ninduk) %%% Probabilitas kumulatif dihitung berdasarkan rank peringkat = ninduk + 1 - (1:ninduk).'; peringkat_kumulatif = ninduk*(ninduk+1)/2; prob_kum = zeros(ninduk,1); for k = 1:ninduk prob_kum(k) = sum(peringkat(1:k))/peringkat_kumulatif; end varargout = {prob_kum}; end %%% Akhir kode program Probabilitas_Kumulatif.m %%% 5. Sekarang, kita akan menentukan pasangan induknya. Dengan bantuan probabilitas kumulatif yang kita peroleh sebelumnya, dan dengan program berikut : %%% Awal kode program Seleksi_Induk.m %%% function varargout = Seleksi_Induk( ninduk, prob_kum ) nparents = round(ninduk/2); vacak = rand(nparents,2); indeks_induk = zeros(nparents,2); for k = 1:nparents indeks_induk(k,1) = min(find(prob_kum > vacak(k,1))); indeks_induk(k,2) = min(find(prob_kum > vacak(k,2))); end
6
varargout = {vacak, indeks_induk}; end %%% Akhir M-File Seleksi_Induk.m %%%, kita akan mendapatkan pasangan-pasangan induk berbentuk matriks. Pada program di atas, kita membentuk
matriks, dengan
adalah setengah dari
jumlah individu awal di ruang solusi. 6. Setelah kita menentukan pasangannya, maka kita sekarang akan mengawinkan pasangan tersebut untuk membentuk individu baru. Tujuannya untuk melengkapkan kembali individu yang terbuang saat seleksi populasi ke jumlah individu awal. Berikut programnya : %%% Kode program Pindah_Silang.m %%% function varargout = Pindah_Silang( indeks_induk,popinduk ) [ninduk,ngen] = size(popinduk); popbaru = zeros(2*ninduk, ngen); popbaru(1:ninduk,:) = popinduk; [brs,klm] = size(indeks_induk); nparents = brs; alpha = ceil(rand*ngen); beta = rand(nparents,1); for k = 1:nparents induk_A = popinduk(indeks_induk(k,1),alpha); induk_B = popinduk(indeks_induk(k,2),alpha); popbaru(ninduk+2*k-1,alpha) = induk_A - beta(k)*(induk_A - induk_B); popbaru(ninduk+2*k,alpha) = induk_B + beta(k)*(induk_A - induk_B); end varargout={beta,popbaru}; end %%% Akhir kode program Pindah_Silang.m %%% Pada program tersebut, kita membuat bilangan acak
dengan
.
Salah satu metode pindah silang adalah dengan kombinasi linear. Misalkan
7
terdapat 2 individu induk
dan
diperoleh dengan kombinasi linear
, maka 2 individu baru
dan
dapat
dan .
7. Sampai sini, kita sudah membuat individu baru hasil pindah silang. Selanjutnya, kita akan mengeksplorasi ruang solusi lain yang masih mungkin bisa kita dapatkan, proses ini dikenal dengan mutasi. Perlu
diketahui,
probabilitas populasi yang besar akan menghasilkan semakin besarnya ruang solusi yang dieksplorasi, tapi akan mengakibatkan individu dengan nilai fitness yang tinggi akan rusak, atau tidak fisibel lagi. Untuk mencegannya, kita akan menggunakan probabilitas mutasi sebesar 0,125, yaitu . Berikut adalah programnya : %%% Awal kode program M-File Mutasi.m %%% function varargout = Mutasi(pop,mutrate,vup,vdown) [npop,nvar] = size(pop); nmut = ceil((npop-1)*nvar*mutrate); mrow = ceil(rand(1,nmut)*(npop-1))+1; mcol = ceil(rand(1,nmut)*nvar); %% Proses mutasi individu_baru = rand(nmut,1); for k = 1:nmut for m = 1:nvar pop(mrow(k),mcol(m)) = vbawah(m) + ... (vup(m)-vdown(m))*individu_baru(k); end end varargout = {pop}; end %%% Akhir kode program M-File Mutasi.m %%%
Untuk program utamanya, bisa dilihat pada lampiran.
8