Algoritma BA (Bat Algorithm) 12


Algoritma BA (Bat Algorithm) adalah salah satu algoritma optimasi yang dapat digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah mengenai pencarian posisi dengan pengembalian nilai fungsi maksimal.
Algoritma ini meniru tingkah laku dari kelelawar yang berpindah-pindah tempat menggunakan pancaran getaran untuk mengetahui keadaan sekitar. Kelelawar akan cenderung memilih tempat yang lebih sunyi dibandingkan tempat yang bising.



Diasumsikan ada sebaran titik 2 dimensi antara -2 sampai dengan 2
Fungsi yang diketahui adalah fungsi Himmelblau, dengan rumus f(x, y) = (x^2+y-11)^2 + (x+y^2-7)^2
Tentukan posisi dimana fungsi tersebut mengembalikan nilai maksimal



Fungsi Himmelblau adalah salah satu fungsi yang dapat digunakan untuk mengoptimasi suatu permasalahan. Fungsi ini memiliki sebuah nilai maksimum pada x = -0.270845, and y = -0.923039 dengan nilai fungsi sebesar f(x,y) = 181.617, dengan asumsi bahwa rentang minimal dan maksimal dari sebaran titik adalah -2 sampai dengan 2

Grafik fungsi Himmelblau yang normal, atau untuk sebaran titik tak terbatas adalah sebagai berikut.
Grafik Himmelblau

Sedangkan Grafik fungsi Himmelblau untuk sebaran titik dengan rentang minimal -2 dan maksimal 2 adalah sebagai berikut.
Grafik Himmelblau -2sd2
Dapat dilihat bahwa pada gambar tersebut, didapatkan area dengan titik tertinggi (berwarna merah) berada pada area x = -0, and y = -1, dimana titik tersebut mengembalikan nilai fungsi tertinggi. Oleh sebab itu digunakan algoritma ini untuk mencari titik di area berwarna merah tersebut.



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan jumlah kelelawar / bat yang digunakan
Nilai yang direkomendasikan adalah 10 sampai dengan 40
Diasumsikan dalam kasus ini, bat yang digunakan adalah 20 ekor

* Tentukan jumlah maksimal iterasi yang digunakan
Diasumsikan dalam kasus ini, jumlah maksimal iterasi adalah 500 kali

* Tentukan jumlah dimensi yang digunakan
Diasumsikan dalam kasus ini, jumlah dimensi adalah 2 karena posisi bunga hanya ditentukan dari 2 sumbu yaitu sumbu x dan y

* Tentukan posisi minimal dan maksimal dari fungsi yang akan dihitung
Jika tidak ada batasan posisi, tentu saja posisi yang mendekati tak terhingga akan terpilih karena akan mengembalikan nilai fungsi yang sangat besar
Diasumsikan dalam kasus ini, posisi minimal adalah -2, dan posisi maksimal adalah +2

* Tentukan matriks batas bawah dan batas atas posisi pada masing-masing dimensi yang sudah ditentukan sebelumnya
Matriks ini akan digunakan untuk mengecek apakah posisi serangga yang baru masih berada dalam batas yang diperbolehkan

* Tentukan batas minimal dan maksimal frekuensi yang digunakan untuk menghitung kecepatan kelelawar
Diasumsikan dalam kasus ini, frekuensi minimal adalah 0, dan frekuensi maksimal adalah 2

* Tentukan batas minimal rasio pemancaran getaran kelelawar
Jika sebuah kelelawar terkena pantulan getaran setelah memancarkan getaran, maka posisinya akan sedikit bergeser dari posisi semula
Diasumsikan dalam kasus ini, batas minimal rasio pemancaran getaran adalah 0.5

* Tentukan batas maksimal Amplitudo / tingkat kebisingan pada saat kelelawar memancarkan getaran
Jika ada solusi yang lebih baik, tetapi posisi tersebut terlalu bising, maka kelelawar tidak akan menuju tempat tersebut
Diasumsikan dalam kasus ini, batas maksimal tingkat kebisingan adalah 0.5


Langkah-langkah penggunaan algoritma ini adalah

* Lakukan proses perhitungan dengan metode BA (Bat Algorithm)
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 1 – 3)

Memasuki perhitungan pada fungsi BA

1. Lakukan inisialisasi kelelawar pada posisi acak,
Kemudian hitung nilai fungsi pada posisi tersebut
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini

* Gunakan fungsi ini untuk menghitung nilai fungsi dengan rumus:
f(x, y) = (x ^ 2 + y – 11) ^ 2 + (x + y ^ 2 – 7) ^ 2

2. Catat posisi terbaik dengan nilai fungsi tertinggi sementara

3. Lakukan perhitungan sebanyak jumlah iterasi
Kemudian pada masing-masing iterasi, lakukan perhitungan pada masing-masing kelelawar yang ada (poin 3a – 3h)

3a. Tentukan nilai acak frekuensi yang digunakan sesuai dengan batas frekuensi yang tersedia

3b. Hitung kecepatan perpindahan kelelawar ke posisi yang baru

3c. Hitung posisi yang baru dari kelelawar tersebut

3d. Lakukan pengecekan apakah posisi bat yang baru masih berada dalam batas yang diperbolehkan
Jika posisi yang baru ternyata diluar batas yang diperbolehkan,
maka kembalikan posisinya agar masuk dalam batas tersebut

3e. Tentukan nilai acak untuk dibandingkan dengan parameter rasio pemancaran getaran
Jika nilai acak tersebut lebih dari batas minimal rasio pemancaran getaran,
maka lakukan sedikit pergeseran pada posisi kelelawar tersebut

3f. Hitung nilai fungsi pada posisi yang baru

3g. Tentukan nilai acak untuk dibandingkan dengan parameter tingkat kebisingan
Jika nilai fungsi baru lebih baik dari nilai fungsi terbaik kelelawar tersebut,
dan nilai acak tersebut kurang dari batas maksimal tingkat kebisingan,
maka ambil posisi yang baru sebagai posisi terbaik kelelawar tersebut

3h. Kemudian lakukan perbandingan dengan nilai fungsi terbaik
Jika nilai fungsi baru lebih baik dari nilai fungsi terbaik secara umum,
maka ambil posisi yang baru sebagai posisi yang terbaik


Hasil akhir adalah:


Contoh modul / source code menggunakan Matlab dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

12 pemikiran di “Algoritma BA (Bat Algorithm)

    • pip Penulis

      BIasanya yang di plot adalah variabel nilai fungsi terbaik.Jadi pada saat masing-masing iterasi, nilai fungsi terbaik disimpan dalam variabel tertentu dan dijadikan sebagai variabel output dari inti algoritma (BA.m). Selanjutnya pada program utama (main.m), variabel ini kemudian dapat digunakan untuk menghasilkan grafik sesuai yang anda inginkan.

        • pip Penulis

          Jika anda lihat pada file BA.m, nilai fungsi ditampung pada variabel nilaiFungsiTerbaik. Anda kemudian dapat menyimpan nilai ini pada variabel lain, misalnya p(iterasi) = nilaiFungsiTerbaik. Pada main.m, variabel p kemudian dapat digunakan untuk menghasilkan plot, misalnya seperti plot(p,'-k');. Kemudian anda dapat memberikan label dan judul pada plot, misalnya seperti ini xlabel('Iterasi');ylabel('Nilai Fungsi');title('BA');

    • pip Penulis

      Untuk melakukan plot anda hanya perlu untuk menyimpan nilai fungsi terbaik yang didapatkan dari masing-masing iterasi. Diakhir (bagian penutup) dari perulangan ini
      for iterasi = 1:jumlahIterasi
      Anda dapat menambahkan contoh skrip seperti ini
      p(iterasi) = nilaiFungsiTerbaik;
      Sehingga p memiliki isi nilai fungsi terbaik dari setiap iterasi. Selanjutnya masukkan p sebagai salah satu output fungsi BA, dan kemudian tambahkan skrip untuk plot pada file main.m, misalnya seperti ini
      figure; plot(p,'-k');
      xlabel('Iterasi');ylabel('Nilai Fungsi');title('BA');

        • pip Penulis

          Skrip ini seharusnya masih berjalan baik. Jika terdapat kesalahan maka kesalahan apakah yang terjadi? Mungkin kesalahan tersebut disebabkan karena versi Matlab yang anda gunakan terlalu lampau.

        • Fauzan

          Versi matlab inj yang udh versi terbaru . Saya udh coba source yang anda berikan di komentar atas . Tetap saja tidak bisa memunculkan plot nya . Mohon panduan detainya terimakasih .

        • pip Penulis

          Apakah anda sudah menyertakan nilai p sebagai salah satu output dari file BA? Jika tidak maka tentu saja nilai p akan bernilai kosong pada saat pembuatan plot

    • pip Penulis

      Tidak ada cara instan untuk mengkonversikan kode matlab ke python. Anda harus memahami konsep algoritma ini terlebih dahulu sebelum mengkonversikan skrip secara baris per baris dan melakukan penyesuaian yang diperlukan. Skrip ini dirancang dengan tidak bergantung pada library apapun yang tersedia pada perangkat lunak sehingga dapat dikonversikan ke dalam bahasa apapun setelah anda memahami konsep dasar algoritma ini.