Algoritma FPAO (Flower Pollination Algorithm Optimization) 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 penyerbukan bunga oleh serangga yang ada di alam semesta. Serangga akan berpindah dari bunga ke bunga lain untuk membantu penyerbukan bunga. Tentu saja bunga yang berpenampilan lebih baik akan dipilih oleh sebuah serangga untuk dihinggapi daripada bunga yang berpenampilan kurang baik.
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.
Sedangkan Grafik fungsi Himmelblau untuk sebaran titik dengan rentang minimal -2 dan maksimal 2 adalah sebagai berikut.
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 serangga yang digunakan
Nilai yang direkomendasikan adalah 10 sampai dengan 25
Diasumsikan dalam kasus ini, hanya digunakan 10 serangga untuk mempercepat perhitungan
jumlahSerangga = 10;
* Tentukan probabilitas serangga berpindah ke bunga (titik) yang lain
Diasumsikan dalam kasus ini nilai probabilitas berpindah adalah 0.8
Sehingga serangga hanya memiliki kemungkinan 20% untuk berpindah ke bunga yang baru
probPindah = 0.8;
* Tentukan jumlah maksimal iterasi yang digunakan
Diasumsikan dalam kasus ini, jumlah maksimal iterasi adalah 500 kali
jumlahIterasi = 500;
* 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
jumlahDimensi = 2;
* 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
minPosisi = -2; maksPosisi = 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
Lb = minPosisi * ones(1,jumlahDimensi); Ub = maksPosisi * ones(1,jumlahDimensi);
Langkah-langkah penggunaan algoritma ini adalah
* Lakukan proses perhitungan dengan metode FPAO (Flower Pollination Algorithm Optimization)
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 1 – 3)
[posisiSeranggaTerbaik, nilaiFungsiTerbaik] = FPAO(jumlahSerangga, probPindah, jumlahIterasi, jumlahDimensi, Lb, Ub);
Memasuki perhitungan pada fungsi FPAO
1. Lakukan inisialisasi serangga pada posisi acak,
Kemudian hitung nilai fungsi pada posisi tersebut
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini
for i = 1:n, daftarSerangga(i,:) = Lb + (Ub-Lb).* rand(1,jumlahDimensi); nilaiFungsi(i) = HitungNilaiFungsi(daftarSerangga(i,:)); end
* Gunakan fungsi ini untuk menghitung nilai fungsi dengan rumus:
f(x, y) = (x ^ 2 + y – 11) ^ 2 + (x + y ^ 2 – 7) ^ 2
function z=HitungNilaiFungsi(u) z=(u(1)^2 + u(2) - 11) ^ 2 + (u(1) + u(2)^2 - 7) ^ 2;
2. Catat posisi terbaik dengan nilai fungsi tertinggi sementara
[nilaiFungsiTerbaik,I] = min(nilaiFungsi); posisiSeranggaTerbaik = daftarSerangga(I,:); daftarSeranggaTerbaik = daftarSerangga;
3. Lakukan perhitungan sebanyak jumlah iterasi
Kemudian pada masing-masing iterasi, lakukan perhitungan pada masing-masing serangga (poin 3a – 3e)
for iterasi = 1:jumlahIterasi, for i = 1:n, . . .
3a. Tentukan nilai acak antara 0 sampai dengan 1
Kemudian bandingkan apakah nilai nya lebih dari probabilitas serangga berpindah
Jika benar, maka serangga ini siap melakukan proses penyerbukan bunga ke tempat yang lain (poin 3a1 – 3a3)
if rand > p, . . .
3a1. Hitung jarak terbang yang harus ditempuh serangga tersebut dengan menggunakan fungsi Levy
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini
L = Levy(jumlahDimensi);
* Gunakan fungsi ini untuk menghitung jarak terbang serangga
Rumus yang digunakan adalah:
x_i ^ {t+1} = x_i ^ t + L(x_i ^ t-gbest)
function L=Levy(d) beta=3/2; sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta); u=randn(1,d)*sigma; v=randn(1,d); step=u./abs(v).^(1/beta); L=0.01*step;
3a2. Setelah menentukan jarak terbang, maka lakukan perhitungan posisi yang baru
Kemudian catat posisi terbaik untuk serangga tersebut
dS=L.*(daftarSerangga(i,:)-posisiSeranggaTerbaik); daftarSeranggaTerbaik(i,:)=daftarSerangga(i,:)+dS;
3a3. Lakukan pengecekan apakah posisi serangga 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
tmpPosisi=daftarSeranggaTerbaik(i,:); I=tmpPosisiUb; tmpPosisi(J)=Ub(J); daftarSeranggaTerbaik(i,:)=tmpPosisi;
3b. Jika nilai acak sebelumnya kurang dari probabilitas serangga berpindah
maka serangga hanya melakukan perpindahan ke bunga disekitar bunga awal (poin 3b1 – 3b4)
. . . else . . .
3b1. Tentukan epsilon, yaitu nilai yang sangat kecil antara 0 sampai dengan 1
epsilon=rand;
3b2. Tentukan 2 indeks serangga acak untuk digunakan pada perhitungan berikutnya
Perhitungan ini bisa saja mengembalikan indeks serangga diri sendiri
JK=randperm(n);
3b3. Hitung posisi serangga yang baru dengan rumus
x_i ^ {t+1} + epsilon * (x_j ^ t – x_k ^ t)
daftarSeranggaTerbaik(i,:)=daftarSeranggaTerbaik(i,:)+epsilon*(daftarSerangga(JK(1),:)-daftarSerangga(JK(2),:));
3b4. Sama seperti perhitungan sebelumnya,
lakukan pengecekan apakah posisi serangga 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
tmpPosisi=daftarSeranggaTerbaik(i,:); I=tmpPosisiUb; tmpPosisi(J)=Ub(J); daftarSeranggaTerbaik(i,:)=tmpPosisi;
3c. Hitung nilai fungsi pada posisi yang baru
nilaiFungsiBaru = HitungNilaiFungsi(daftarSeranggaTerbaik(i,:));
3d. Jika nilai fungsi baru lebih baik dari nilai fungsi terbaik serangga tersebut,
maka ambil posisi yang baru sebagai posisi terbaik serangga tersebut
if (nilaiFungsiBaru > nilaiFungsi(i)), daftarSerangga(i,:) = daftarSeranggaTerbaik(i,:); nilaiFungsi(i) = nilaiFungsiBaru; end
3e. Jika nilai fungsi baru lebih baik dari nilai fungsi terbaik secara umum,
maka ambil posisi yang baru sebagai posisi yang terbaik
if nilaiFungsiBaru > nilaiFungsiTerbaik, posisiSeranggaTerbaik = daftarSeranggaTerbaik(i,:) ; nilaiFungsiTerbaik = nilaiFungsiBaru ; disp(['Iterasi: ', num2str(iterasi), ... ', Serangga: ', num2str(i), ... ', Posisi terbaik: ', num2str(posisiSeranggaTerbaik), ... ', Nilai Fungsi terbaik: ', num2str(nilaiFungsiTerbaik)]); end
Hasil akhir adalah:
Algoritma FPAO (Flower Pollination Algorithm Optimization) Contoh: Mencari posisi dengan pengembalian nilai fungsi maksimal 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 Jumlah Serangga = 10 Probabilitas berpindah ke bunga lain = 0.8 Jumlah maksimal iterasi = 500 Jumlah dimensi = 2 Batas minimal posisi bunga = -2 Batas maksimal posisi bunga = 2 Iterasi: 1, Serangga: 1, Posisi terbaik: 1.2577 1.74, Nilai Fungsi terbaik: 66.3237 Iterasi: 1, Serangga: 2, Posisi terbaik: -1.6134 1.6655, Nilai Fungsi terbaik: 79.4133 Iterasi: 1, Serangga: 3, Posisi terbaik: -0.2121 -0.093823, Nilai Fungsi terbaik: 173.9643 Iterasi: 10, Serangga: 6, Posisi terbaik: 0.29824 -1.1436, Nilai Fungsi terbaik: 174.4092 Iterasi: 11, Serangga: 9, Posisi terbaik: -0.40943 -0.37694, Nilai Fungsi terbaik: 178.4629 Iterasi: 17, Serangga: 5, Posisi terbaik: -0.34098 -1.4178, Nilai Fungsi terbaik: 179.7455 Iterasi: 27, Serangga: 8, Posisi terbaik: -0.38114 -1.3224, Nilai Fungsi terbaik: 180.0067 Iterasi: 27, Serangga: 10, Posisi terbaik: -0.1215 -0.68, Nilai Fungsi terbaik: 180.4214 Iterasi: 28, Serangga: 10, Posisi terbaik: -0.23042 -1.0621, Nilai Fungsi terbaik: 181.4551 Iterasi: 36, Serangga: 10, Posisi terbaik: -0.26656 -0.9765, Nilai Fungsi terbaik: 181.5937 Iterasi: 65, Serangga: 10, Posisi terbaik: -0.27131 -0.96148, Nilai Fungsi terbaik: 181.6042 Iterasi: 76, Serangga: 9, Posisi terbaik: -0.27441 -0.95798, Nilai Fungsi terbaik: 181.6055 Iterasi: 79, Serangga: 9, Posisi terbaik: -0.273 -0.94917, Nilai Fungsi terbaik: 181.6105 Iterasi: 81, Serangga: 9, Posisi terbaik: -0.26911 -0.94614, Nilai Fungsi terbaik: 181.6122 Iterasi: 105, Serangga: 2, Posisi terbaik: -0.27301 -0.94051, Nilai Fungsi terbaik: 181.6137 Iterasi: 106, Serangga: 7, Posisi terbaik: -0.27053 -0.93975, Nilai Fungsi terbaik: 181.6142 Iterasi: 106, Serangga: 8, Posisi terbaik: -0.27533 -0.93301, Nilai Fungsi terbaik: 181.615 Iterasi: 114, Serangga: 8, Posisi terbaik: -0.27252 -0.93161, Nilai Fungsi terbaik: 181.6158 Iterasi: 116, Serangga: 9, Posisi terbaik: -0.2733 -0.93036, Nilai Fungsi terbaik: 181.6158 Iterasi: 117, Serangga: 6, Posisi terbaik: -0.27339 -0.91949, Nilai Fungsi terbaik: 181.6163 Iterasi: 118, Serangga: 10, Posisi terbaik: -0.27111 -0.92229, Nilai Fungsi terbaik: 181.6165 Iterasi: 152, Serangga: 10, Posisi terbaik: -0.27063 -0.92242, Nilai Fungsi terbaik: 181.6165 Iterasi: 164, Serangga: 10, Posisi terbaik: -0.271 -0.92297, Nilai Fungsi terbaik: 181.6165 Iterasi: 214, Serangga: 10, Posisi terbaik: -0.27075 -0.92287, Nilai Fungsi terbaik: 181.6165 Iterasi: 215, Serangga: 6, Posisi terbaik: -0.2709 -0.92292, Nilai Fungsi terbaik: 181.6165 Iterasi: 215, Serangga: 10, Posisi terbaik: -0.27083 -0.92298, Nilai Fungsi terbaik: 181.6165 Iterasi: 242, Serangga: 10, Posisi terbaik: -0.27086 -0.92298, Nilai Fungsi terbaik: 181.6165 Iterasi: 266, Serangga: 10, Posisi terbaik: -0.27082 -0.92301, Nilai Fungsi terbaik: 181.6165 Iterasi: 270, Serangga: 10, Posisi terbaik: -0.27083 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 279, Serangga: 6, Posisi terbaik: -0.27084 -0.92302, Nilai Fungsi terbaik: 181.6165 Iterasi: 284, Serangga: 7, Posisi terbaik: -0.27083 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 296, Serangga: 2, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 306, Serangga: 2, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 368, Serangga: 2, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 391, Serangga: 3, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 403, Serangga: 2, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 425, Serangga: 5, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 443, Serangga: 5, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Iterasi: 465, Serangga: 8, Posisi terbaik: -0.27084 -0.92304, Nilai Fungsi terbaik: 181.6165 Posisi Terbaik: -0.27084 -0.92304 Nilai Fungsi Terbaik =181.6165
Contoh modul / source code menggunakan Matlab dapat didownload disini:
[sdm_download id=”1801″ fancy=”0″]
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.
Leave a Reply