Anda di halaman 1dari 10

Muhammad Azzahari

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:

fungsi_objektif(chromosome[1]) = Abs(( 12 + 4*5 + 5*3 + 6*8 +8*7) - 40)


= Abs((12 + 20 + 15 + 48 + 56) - 40)
= Abs(151 - 30)
= 121
fungsi_objektif(chromosome[2]) = Abs(( 2 + 4*1 + 5*8 + 6*3 +8*3) - 40)
= Abs((2 + 4 + 40 + 18 + 24) - 40)
= Abs(88 - 40)
= 48
fungsi_objektif(chromosome[3]) = Abs(( 10 + 4*4 + 5*3 + 6*4 +8*5) - 40)
= Abs((10 + 16 + 15 + 24 + 40) - 40)
= Abs(105 - 40)
= 65
fungsi_objektif(chromosome[4]) = Abs(( 20 + 4*1 + 5*10 + 6*6 +8*8) - 40)
= Abs((20 + 4 + 50 + 36 + 64) - 40)
= Abs(174 - 40)
= 134
fungsi_objektif(chromosome[5]) = Abs(( 1 + 4*4 + 5*3 + 6*9 +8*20) - 40)
= Abs((10 + 16 + 15 + 54 + 160) - 40)
= Abs(255 - 40)
= 215
fungsi_objektif(chromosome[6]) = Abs(( 20 + 4*5 + 5*7 + 6*1 +8*10) - 40)
= Abs((20 + 20 + 35 + 6 + 80) - 40)
= Abs(161 - 40)
= 121
fungsi_objektif(chromosome[7]) = Abs(( 15 + 4*5 + 5*9 + 6*1 +8*11) - 40)
= Abs((15 + 20 + 45 + 6 + 88) - 40)
= Abs(174 - 40)
= 134
Rata-rata dari fungsi objektif adalah:
rata-rata = (121+48+65+134+215+121+134)/7
= 838 / 7
= 119,71
Langkah 3
Seleksi Chromosome
Proses seleksi dilakukan dengan cara membuat chromosome yang mempunyai fungsi_objektif
kecil mempunyai kemungkinan terpilih yang besar atau mempunyai nilai probabilitas yang
tinggi. Untuk itu dapat digunakan fungsi fitness = (1/(1+fungsi_objektif)), fungsi_objektif perlu
ditambah 1 untuk menghindari kesalahan program yang diakibatkan pembagian oleh 0.

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

Total_Fitness = 0.0008 + 0.0204 + 0.0151 + 0.0074 + 0.0046 + 0.0008 + 0.0074


= 0.0565
Rumus untuk mencari probabilitas: P[i] = fitness[i] / total_fitness
P[1] = 0.0008/ 0.0565
= 0.0141
P[2] = 0.0204/ 0.0565
= 0.3610
P[3] = 0.0151/ 0.0565
= 0.2672
P[4] = 0.0074/ 0.0565
= 0.1309
P[5] = 0.0046/ 0.0565
= 0.0814
P[6] = 0.0008/ 0.0565
= 0.0141
P[7] = 0.0074/ 0.0565
= 0.1309
Dari probabilitas diatas dapat kita lihat kalau chromosome ke 2 yang mempunyai fitness paling
besar maka chromosome tersebut mempunyai probabilitas untuk terpilih pada generasi
selanjutnya lebih besar dari chromosome lainnya. Untuk proses seleksi kita gunakan roulette
wheel, untuk itu kita harus mencari dahulu nilai kumulatif probabilitasnya:
C[1] = 0.0141
C[2] = 0.0141 + 0.3610 = 0.3751
C[3] = 0.0141 + 0.3610 + 0.2672 = 0.6423
C[4] = 0.0141 + 0.3610 + 0.2672 + 0.1309 = 0.7732
C[5] = 0.0141 + 0.3610 + 0.2672 + 0.1309 + 0.0814 = 0.8546
C[6] = 0.0141 + 0.3610 + 0.2672 + 0.1309 + 0.0814 + 0.0141 = 0.8687
C[7] = 0.0141 + 0.3610 + 0.2672 + 0.1309 + 0.0814 + 0.0141 + 0.1309 = 0.9996

Setelah dihitung cumulative probabilitasnya maka proses seleksi menggunakan roulete-wheel


dapat dilakukan. Prosesnya adalah dengan membangkitkan bilangan acak R dalam range 0-1.
Jika R[k] < C[1] maka pilih chromosome 1 sebagai induk, selain itu pilih chromosome ke-k
sebagai induk dengan syarat C[k-1] < R < C[k]. Kita putar roulete wheel sebanyak jumlah
populasi yaitu 7 kali (bangkitkan bilangan acak R) dan pada tiap putaran, kita pilih satu
chromosome untuk populasi baru. Misal:
R[1] = 0.301
R[2] = 0.484
R[3] = 0.108
R[4] = 0.923
R[5] = 0.498
R[6] = 0.601
R[7] = 0.604

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

offspring[2] = chromosome[2] >< chromosome[5]


= [02;01;08;03;03]>< [01;04;03;09;20]
= [02;04;03;09]
offspring[5] = Chromosome[5] >< Chromosome[6]
= [01;04;03;09;20]>< [20;05;07;01;10]
= [01;01;08;03]
offspring[5] = Chromosome[6] >< Chromosome[2]
= [20;05;07;01;10]>< [02;01;08;03;03]
= [02;01;08;03]
Dengan demikian populasi Chromosome setelah mengalami proses crossover menjadi:
chromosome[1] = [12;05;03;08;07]
chromosome[2] = [02;01;08;03;03]
chromosome[3] = [10;04;03;04;05]
chromosome[4] = [20;01;10;06;08]
chromosome[5] = [01;04;03;09;20]
chromosome[6] = [20;05;07;01;10]
chromosome[7] = [15;05;09;01;11]
Langkah 6.
Mutasi
Jumlah chromosome yang mengalami mutasi dalam satu populasi ditentukan oleh parameter
mutation_rate. Proses mutasi dilakukan dengan cara mengganti satu gen yang terpilih secara
acak dengan suatu nilai baru yang didapat secara acak. Prosesnya adalah sebagai berikut.
Pertama kita hitung dahulu panjang total gen yang ada dalam satu populasi. Dalam kasus ini
panjang total gen adalah total_gen = (jumlah gen dalam chromosome) * jumlah populasi
=5*7
= 35
Untuk memilih posisi gen yang mengalami mutasi dilakukan dengan cara membangkitkan
bilangan integer acak antara 1 sampai total_gen, yaitu 1 sampai 35. Jika bilangan acak yang kita
bangkitkan lebih kecil daripada variabel mutation_rate (ρm) maka pilih posisi tersebut sebagai
sub-chromosome yang mengalami mutasi. Misal ρm kita tentukan 10% maka diharapkan ada
10% dari total_gen yang mengalami populasi:
jumlah mutasi = 0.1 * 35
= 3.5
=3
Misalkan setelah kita bangkitkan bilangan acak terpilih posisi gen 13 dan 19 yang mengalami
mutasi. Dengan demikian yang akan mengalami mutasi adalah chromosome ke-4 gen nomor 5
dan Chromosome ke-5 gen nomor 3. Maka nilai gen pada posisi tersebut kita ganti dengan
bilangan acak 0-40.
Misalkan bilangan acak yang terbangkitkan adalah 3 dan 6. Maka populasi chromosome setelah
mengalami proses mutasi adalah:
chromosome[1] = [11;04;02;07;06]
chromosome[2] = [01;02;07;02;02]
chromosome[3] = [09;03;04;05;06]
chromosome[4] = [19;02;11;08;07]
chromosome[5] = [03;05;05;08;18]
chromosome[6] = [18;05;07;01;11]
chromosome[7] = [14;06;07;03;14]
Setelah proses mutasi maka kita telah menyelesaikan satu iterasi dalam algoritma genetika atau
disebut dengan satu generasi. Maka fungsi_objective setelah satu generasi adalah:

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

Anda mungkin juga menyukai