1804205010002
Magister Teknik Elektro
Non-Reguler
Algoritma & Pemrograman
1. Misalkan ada persamaan a+4b+5c+6d+8e = 40, kita mencari nilai a, b, c, dan d yang
memenuhi persamaan diatas. Bagaimanakah cara penyelesaian permasalahan diatas dengan
menggunakan algoritma genetika ?
Langkah 1
Pembentukan chromosome
Karena yang dicari adalah nilai a, b, c, d dan e maka variabel a, b, c, d, e dijadikan sebagai gen-
gen pembentuk chromosome. Batasan nilai variabel a adalah bilangan integer 0 sampai 40.
Sedangkan batasan nilai variabel b, c, dan d adalah bilangan integer 0 sampai 15.
Langkah 2
Inisialisasi
Proses inisialisasi dilakukan dengan cara memberikan nilai awal gen-gen dengan nilai acak
sesuai batasan yang telah ditentukan.
Misalkan kita tentukan jumlah populasi adalah 7, maka:
Chromosome[1] = [a;b;c;d:e] = [12;05;03;08;07]
Chromosome[2] = [a;b;c;d:e] = [02;01;08;03;03]
Chromosome[3] = [a;b;c;d:e] = [10;04;03;04;05]
Chromosome[4] = [a;b;c;d:e] = [20;01;10;06;08]
Chromosome[5] = [a;b;c;d:e] = [01;04;03;09;20]
Chromosome[6] = [a;b;c;d:e] = [20;05;07;01;10]
Chromosome[7] = [a;b;c;d:e] = [15;05;09;01;11]
Langkah 3
Evaluasi Chromosome
Permasalahan yang ingin diselesaikan adalah nilai variabel a, b, c, d dan e yang memenuhi
persamaan a+4b+5c+6d+8e = 40, maka fungsi_objektif yang dapat digunakan untuk
mendapatkan solusi adalah fungsi_objektif(chromosome) = | (a+4b+5c+6d+8e) – 40 | Kita hitung
fungsi_objektif dari chromosome yang telah dibangkitkan:
fitness[1] = 1 / (fungsi_objektif[1]+1)
= 1 / 122
= 0.0008
fitness[2] = 1 / (fungsi_objektif[2]+1)
= 1 / 49
= 0.0204
fitness[3] = 1 / (fungsi_objektif[3]+1)
= 1 / 66
= 0.0151
fitness[4] = 1 / (fungsi_objektif[4]+1)
= 1 / 134
= 0.0074
fitness[5] = 1 / (fungsi_objektif[5]+1)
= 1 / 216
= 0.0046
fitness[6] = 1 / (fungsi_objektif[6]+1)
= 1 / 122
= 0.0008
fitness[7] = 1 / (fungsi_objektif[7]+1)
= 1 / 135
= 0.0074
Angka acak pertama R[1] adalah lebih besar dari C[1] dan lebih kecil daripada C[2] maka pilih
chromosome[2] sebagai chromosome pada populasi baru, dari bilangan acak yang telah
dibangkitkan diatas maka populasi chromosome baru hasil proses seleksi adalah:
chromosome[1] = chromosome[3]
chromosome[2] = chromosome[3]
chromosome[3] = chromosome[2]
chromosome[4] = chromosome[6]
chromosome[5] = chromosome[3]
chromosome[6] = chromosome[4]
chromosome[7] = chromosome[4]
Chromosome baru hasil proses seleksi:
chromosome[1] = [10;04;03;04;05]
chromosome[2] = [10;04;03;04;05]
chromosome[3] = [02;01;08;03;03]
chromosome[4] = [20;05;07;01;10]
chromosome[5] = [10;04;03;04;05]
chromosome[6] = [20;01;10;06;08]
chromosome[7] = [20;01;10;06;08]
Langkah 5
Crossover
Setelah proses seleksi maka proses selanjutnya adalah proses crossover. Metode yang digunakan
salah satunya adalah one-cut point, yaitu memilih secara acak satu posisi dalam chromosome
induk kemudian saling menukar gen. Chromosome yang dijadikan induk dipilih secara acak dan
jumlah chromosome yang mengalami crossover dipengaruhi oleh parameter crossover_rate
( ρc ).
Pseudo-code untuk proses crossover adalah sebagai berikut:
begin
k← 0;
while(k<populasi) do
R[k] ← random(0-1);
if (R[k] < ρc ) then
select Chromosome[k] as parent;
end;
k = k + 1;
end;
end;
Misal kita tentukan crossover probability adalah sebesar 25%, maka diharapkan dalam satu
generasi ada 50% Chromosome (3 chromosome) dari satu generasi mengalami proses crossover.
Prosesnya adalah sebagai berikut:
Pertama kita bangkitkan bilangan acak R sebanyak jumlah populasi
R[1] = 0.293
R[2] = 0.358
R[3] = 0.861
R[4] = 0.107
R[5] = 0.258
R[6] = 0.440
R[7] = 0.441
Maka Chromosome ke k akan dipilih sebagai induk jika R[k] < ρc, dari bilangan acak R diatas
maka yang dijadikan induk adalah chromosome[1], chromosome[4] dan chromosome[5].
Setelah melakukan pemilihan induk proses selanjutnya adalah menentukan posisi crossover. Ini
dilakukan dengan cara membangkitkan bilangan acak dengan batasan 1 sampai (panjang
chromosome-1), dalam kasus ini bilangan acak yang dibangkitkan adalah 1 – 3. Misalkan
didapatkan posisi crossover adalah 1 maka chromosome induk akan dipotong mulai gen ke 1
kemudian potongan gen tersebut saling ditukarkan antar induk.
chromosome[2] >< chromosome[5]
chromosome[5] >< chromosome[6]
chromosome[6] >< chromosome[2]
Posisi cut-point crossover dipilih menggunakan bilangan acak 1-4 sebanyak jumlah crossover
yang terjadi, missal :
C[1] = 1
C[2] = 2
C[3] = 3
chromosome[1] = [11;04;02;07;06]
fungsi_objektif[1] = Abs(( 11 + 4*4 + 5*2 + 6*7 +8*6) - 40)
= Abs(( 11 + 16 + 10 + 42 + 48 ) - 40)
= Abs( 127 - 40)
= 87
chromosome[2] = [01;02;07;02;02]
fungsi_objektif[2] = Abs(( 1 + 4*2 + 5*7 + 6*2 +8*2) - 40)
= Abs(( 1 + 8 + 35 + 12 + 16) - 40)
= Abs( 72 - 40)
= 32
chromosome[3] = [09;03;04;05;06]
fungsi_objektif[3] = Abs(( 9 + 4*3 + 5*4 + 6*5 +8*6) - 40)
= Abs(( 1 + 12+ 20 + 30 + 48) - 40)
= Abs( 111 - 40)
= 71
chromosome[4] = [19;02;11;08;07]
fungsi_objektif[4] = Abs(( 19 + 4*2 + 5*11 + 6*8 +8*7) - 40)
= Abs(( 19 + 8+ 55 + 48 + 56) - 40)
= Abs( 186 - 40)
= 146
chromosome[5] = [03;05;05;08;18]
fungsi_objektif[5] = Abs(( 3 + 4*5 + 5*5 + 6*8 +8*18) - 40)
= Abs(( 3 + 20 + 25 + 48 + 144) - 40)
= Abs( 240 - 40)
= 200
chromosome[6] = [18;05;07;01;11]
fungsi_objektif[6] = Abs(( 18 + 4*5 + 5*7 + 6*1 +8*11) - 40)
= Abs(( 18 + 20 + 35 + 6 + 88) - 40)
= Abs( 167 - 40)
= 127
chromosome[7] = [14;06;07;03;14]
fungsi_objektif[7] = Abs(( 14 + 4*6 + 5*7 + 6*3 +8*14) - 40)
= Abs(( 14 + 24 + 35 + 18 + 114) - 40)
= Abs( 205 - 40)
= 165
Rata-rata fungsi objektif setelah satu generasi adalah:
rata-rata = ( 87 + 32 + 71 + 146 + 200 + 127 + 165) / 7
= 824 / 7
= 117,71