Algoritma FPAO (Flower Pollination Algorithm Optimization) 49


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.
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 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:



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 *

49 pemikiran di “Algoritma FPAO (Flower Pollination Algorithm Optimization)

  • Laila

    1. iterasi itu untuk apa ya? agar dpt hasil paling optimum?
    2. jadi pencarian titik yg di dapat, adalah titik yg berada pada area merah?
    3. jika FPA digunakan untuk implementasi lokasi BTS, yg berperan sebagai radius antar titik, fungsi yg mana ya?
    mohon penjelasannya ^^ terima kasih

    • pip Penulis

      1. Iterasi adalah jumlah perulangan, jadi sebanyak berapa kali proses perhitungan dijalankan untuk mendapatkan hasil optimal dari suatu kasus
      2. Lebih tepatnya adalah tujuan proses perhitungan optimasi adalah untuk mencapai area merah pada grafik
      3. Dengan informasi anda yang masih terlalu minimal, saya masih belum dapat memahami maksud dari pertanyaan anda. Biasanya apabila anda menggunakan jurnal teori sebagai acuan, maka dalam jurnal tersebut sudah dijelaskan bagaimanakah cara perhitungan fungsi yang dibutuhkan dalam proses optimasi tersebut. Selanjutnya adalah tinggal mengganti fungsi
      function z=HitungNilaiFungsi(u)
      z=(u(1)^2 + u(2) - 11) ^ 2 + (u(1) + u(2)^2 - 7) ^ 2;

      sesuai dengan fungsi yang dijelaskan pada jurnal tersebut

      • Laila

        terima kasih atas tanggapannyaa ^^ berikut akan saya berikan informasi lebih lanjut mengenai pertnyaan no.3
        .
        saya ingin menggunakan FPA sbg metode pada studi kasus optimasi lokasi BTS / yg biasa dikenal di masyarakat adalah tower pemancar sinyal, nah otomatis sy membutuhkan lokasi bbrp titik yg optimal pada suatu area tertentu, atau mksd piptools adalah fungsi diasumsikan sbg luas area?

        terimakasih

        • pip Penulis

          Jika melihat kasus tersebut, berarti saya dapat asumsikan bahwa luas daerah / sebaran titik yang digunakan adalah berupa lokasi / koordinat dari masing-masing BTS, dan luas area / radius BTS digunakan sebagai salah satu batasan dalam proses optimasi. Fungsi bisa dihitung dari luas daerah dikurangi dengan banyak luas area yang tercover oleh BTS dan dioptimasi untuk dicari lokasi BTS mana saja yang paling banyak mencover sinyal dalam luas daerah tersebut.

        • Laila

          “radius BTS digunakan sebagai salah satu batasan dalam proses optimasi” apakah yg dimaksud adalah nilai Ub dan Lb? atau menggunakan radius yg sama antar BTS?
          mohon dijelaskan lebih detil mengenai kalimat terakhir karena yg sy tangkap adalah menentukan lokasi BTS utk area yg tdk trcover oleh BTS lain

        • pip Penulis

          Ub dan Lb merupakan batasan dari sebaran titik, yang menurut asumsi saya berarti adalah luas daerah.

          Dan benar, memang maksud saya adalah menentukan lokasi BTS untuk area yang tidak tercover oleh BTS lain. Hal ini saya sebut sebagai batasan karena masing-masing kasus memiliki cara implementasi sendiri-sendiri, dan belum tentu batasan pada kasus anda adalah menggunakan batasan ini.

        • Laila

          jika studi kasus sy adalah menentukan lokasi optimum BTS, apakah bisa jika mmg output hanya satu titik optimum lantas titik2 lain (lokasi BTS lain) menyesuaikan titik optimum tsb menggunakan radius antar titik? atau mungkin piptools punya pandangan lain?

        • pip Penulis

          Kalau sepemahaman saya, optimasi titiknya tidak dilihat dari 1 BTS kemudian disusun satu per satu untuk BTS lain, tetapi langsung semua BTS diletakkan pada suatu area dan radiusnya dihitung yang manakah yang mengcover paling banyak.

        • Laila

          berarti maksudnya adalah input BTS disini sbg input jumlah serangga kemudian outputnya adalah posisi terbaik dari setiap titik? jadi kita baru tau ukuran radius ketika sudah dapat titik ya?

        • Laila

          okeee, kalau begitu ukuran radius pada FPA ini bisa dihitung melalui apa ya? karena kan ukuran radius setiap titik berbeda

        • Laila

          kemudian untuk bentuk fungsi apakah bisa menggunakan fungsi optimasi apapun? yang tidak bergantung pada studi kasus

        • pip Penulis

          Radius dari masing-masing BTS ditentukan sendiri tergantung dari cara kerja sistem tersebut. Biasanya sudah dijelaskan dalam jurnal apabila radius antar BTS ukurannya tidak sama.

          Fungsi optimasi bisa menggunakan rumus apapun tetapi biasanya menyesuaikan kasus yang anda miliki, sehingga tidak bisa rumus dipilih secara acak dan dimasukkan dalam sistem. Sekali lagi biasanya rumus-rumus yang digunakan sudah tertulis pada jurnal sehingga selanjutnya adalah tinggal melakukan implementasi saja.

  • Laila

    maaf tanya lagi ? apakah inisialisasi populasi di awal itu selalu range [0,1] atau boleh dimodif? begitu pula untuk nilai switch probability apakah harus pada range nilai [0,1]? hal ini terkait dgn implementasi pada studi kasus saya

    • pip Penulis

      Mengenai inisialisasi populasi dan nilai probabilitas tentu saja tergantung dari masing-masing kasus, sehingga rentang nilainya bisa berbeda tergantung kebutuhan. Jika anda sudah memiliki panduan tersendiri, maka silahkan menggunakan nilai-nilai pada jurnal tersebut sebagai acuan.

        • pip Penulis

          Dalam contoh skrip ini tidak ada konstrain seperti itu karena memang dalam contoh ini tidak diperlukan pengecekan radius atau semacamnya. Dalam kasus anda, pengecekan radius dapat dilakukan setelah menghitung Levy dan melakukan perpindahan posisi dari masing-masing serangga. Sehingga anda perlu membuat 1 fungsi baru untuk melakukan pengecekan apakah radius pada semua posisi serangga yang baru sudah tidak tumpang tindih atau setidaknya tumpang tindih dengan sangat minimal.

    • pip Penulis

      Saya masih belum memahami validasi apakah yang anda maksud. Coba dijelaskan secara lebih detail bagian manakah yang anda maksud.

      • laila

        maksud saya validasi apa yang digunakan untuk membuktikan bahwa posisi titik yang dihasilkan dengan metode FPA merupakan hasil yang optimal

        • pip Penulis

          Hal ini merupakan teknik perhitungan yang sudah spesifik (bukan permasalahan secara umum), sehingga dalam referensi jurnal yang anda gunakan biasanya sudah dijelaskan mengenai cara validasi posisi tersebut. Selanjutnya anda hanya tinggal mengimplementasikan teknik validasi apakah yang sudah tertulis pada jurnal tersebut.

  • Dichyah

    mau tanya,,
    untuk yg ini
    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
    apakah kita bebas menentukan atau ada aturannya?
    trs untuk mendapatkan posisi terbaik x,y itu bagaimana caranya?
    fungsinya diturunkan atau bagaimana?
    misalnya ini
    Iterasi: 1, Serangga: 1, Posisi terbaik: 1.2577 1.74,

    • pip Penulis

      Angka2 tersebut hanyalah angka yang saya dapatkan dari referensi skrip yang saya pelajari. Tentu saja jika anda memiliki referensi yang lebih baik dan referensi tersebut menggunakan nilai parameter yang berbeda maka sebaiknya mengikuti nilai2 pada jurnal tersebut.

      Untuk mendapatkan posisi terbaik, maka anda harus mengetahui tujuan yang ingin anda capai. Tujuan tersebut dihitung menggunakan fungsi obyektif, yang dalam kasus diatas dihitung dengan menggunakan fungsi HitungNilaiFungsi
      function z=HitungNilaiFungsi(u)
      z=(u(1)^2 + u(2) - 11) ^ 2 + (u(1) + u(2)^2 - 7) ^ 2;

      • Dichyah

        untuk x itu parameter apa? y parameter apa?
        dan bisa minta tolong utk dijelaskan cara mendapatkan
        Posisi terbaik: x = 1.2577 ; y = 1.74
        utk iterasi 1 seangga 1.

        • pip Penulis

          Dalam kasus yang saya bahas diatas, topik yang saya gunakan adalah mencari posisi dengan nilai fungsi terendah. Variabel x dan y adalah posisi yang menentukan apakah sebuah solusi berada pada nilai fungsi terendah atau tidak, dan fungsi yang saya gunakan adalah fungsi Himmelblau dimana hanya memerlukan 2 buah variabel saja. Tentu saja dalam dunia nyata, kasus yang tersedia tidak hanya menggunakan dua kriteria saja, tetapi dapat menggunakan 3, 4, atau lebih. Cara perhitungan nilai fungsi pun juga bergantung dari banyak kriteria yang dipakai (x, y, z, dan seterusnya).

          Cara untuk mendapatkan nilai solusi serangga sudah dijelaskan pada keseluruhan poin nomor 3. Proses tersebut akan diulang sebanyak jumlah iterasi dan solusi terbaik akan selalu disimpan setiap kali ditemukan dan ditampilkan pada layar. Hasil pencatatan dapat dilihat pada bagian “Hasil Akhir”

  • Ayu Fitriah

    Selamat malam min. Saya tugas akhirnya juga menggunakan algoritma ini. tapi masih agak bingung untuk menentukan populasi (x), distribusi Levy (L) dan g*. Penelitian saya ttg optimasi turbin angin dengan mppt menggunakan metode fpa. Jadi saya ingin mengetahui pengaruh perubahan kecepatan angin terhadap daya maksimum yang dapat dihasilkan. Matur Nuwun

    • pip Penulis

      Populasi sebenarnya dibentuk dari kumpulan solusi2 awal (x) yang didapatkan secara acak. Setelah mendapatkan nilai acak maka akan diolah dan dihitung nilai fungsinya untuk menentukan solusi manakah yang lebih baik daripada lainnya.
      Sedangkan Levy menurut pemahaman saya adalah sebuah fungsi untuk menghitung jarak terbang serangga sehingga hanya cukup mengikuti rumus yang digunakan saja.
      Dalam skrip ini saya tidak menemukan sesuatu yang mirip atau mendekati g*. Mungkin ini adalah parameter khusus yang anda gunakan dalam sistem turbin angin tersebut. Jika ini adalah sebuah input maka sama seperti x, nilai awalnya dapat ditentukan secara acak, tetapi selanjutnya dihitung dengan menggunakan rumus tertentu yang telah tersedia.

      • Dichyah

        maaf tanya lagi,,

        function L=Levy(d)

        u=randn(1,d)*sigma;
        v=randn(1,d);
        step=u./abs(v).^(1/beta);
        L=0.01*step;

        mohon penjelasan fungsi levy.
        u,v itu random apa?
        bedanya apa u dgn v, kok yg v tdk dikali sigma?

        • pip Penulis

          u dan v adalah bilangan acak yang diambil menggunakan sistem distribusi normal

          Mengenai perbedaan antara u dan v, hal tersebut adalah bagian dari rumus yang sudah diriset oleh peneliti sehingga menghasilkan rumus seperti itu. Pertanyaan anda mirip seperti “mengapa 1 + 2 = 3? Mengapa angka 2 tidak dikalikan angka lain agar hasil perhitungan rumus tersebut adalah angka 3?”

        • Dichyah

          Tanya lagi ya min..
          pada langkah 3a apa ada dasar pengambilan acak antara 0 sampai 1? knp ga antara -2 sampai 2?

        • pip Penulis

          Pengambilan bilangan acak yang paling umum adalah diantara 0 sampai dengan 1, dan dalam kasus ini nilai acak tersebut digunakan untuk probabilitas. Berdasarkan pengetahuan umum maka umumnya probabilitas akan memiliki nilai terendah 0% dan tertinggi 100%. Jika pengacakan dilakukan dari -2 sampai dengan 2 itu artinya nilai probabilitas terendah dapat mencapai nilai minus -200% dan yang tertinggi adalah 200% dimana hal tersebut merupakan hal yang tidak lazim.

        • pip Penulis

          Fungsi levy adalah fungsi yang digunakan untuk memindahkan pollen dari sebuah bunga menuju bunga lainnya. Menurut beberapa jurnal tertulis rumus ini adalah rumus yang dipakai untuk melakukan perhitungan tersebut, tetapi menurut saya pribadi sebenarnya bisa diubah dengan menggunakan rumus lainnya. Tidak ada syarat khusus dalam mengganti fungsi tersebut asalkan cara perhitungannya tertulis dengan baik pada jurnal.

  • Rizki kurniawan

    Min mau tanya, setau saya pakek rumus levy flight ketika randp.apakah ada jurnal flower yang mengatakan bahwa levy flight berlaku ketika rand>p?

    • pip Penulis

      Hal tersebut tentu saja dapat disesuaikan dengan jurnal yang anda gunakan. Algoritma ini sudah tersedia sejak beberapa tahun yang lalu dan tentu saja sudah banyak versi pengembangan untuk meningkatkan performa daripada versi orisinilnya. Saya tidak mengetahui versi apakah yang anda gunakan, tetapi terlepas dari itu implementasi algoritma dapat dilakukan secara fleksibel; jika tidak membutuhkan pengecekan rand>p maka bagian ini dapat dihapus sehingga semua serangga akan dihitung dengan menggunakan Levy (bagian else dan seterusnya dihapus)

      • Dichyah

        maaf min, mau tanya lagi, itu yang populasi yg dimaksud fpa itu populasi bunganya atau populasi serangganya? kok klo di jurnal2 itu populasi n flower ya min?

        • pip Penulis

          Menurut pemahaman saya (bukan berdasarkan jurnal tertentu), bunga adalah obyek pada sistem ini, sedangkan serangga adalah subyeknya. Perpindahan serbuk sari tidak dapat dilakukan tanpa bantuan serangga, sehingga saya mempercayai bahwa populasi yang sebenarnya adalah populasi serangga dalam menemukan bunga terbaik.

          Tetapi jika bunga dianggap sebagai populasi maka masih masuk akal. Dengan kata lain perpindahan serbuk sari dilakukan oleh variabel yang tidak diperhitungkan keterlibatannya, misalnya seperti angin.

    • pip Penulis

      Karena algoritma ini adalah salah satu algoritma optimasi maka secara teori dapat digunakan untuk mengatasi permasalahan optimasi apapun, termasuk optimasi membership function dalam fuzzy logic.

      • Anugrah F

        Maaf min, mau bertanya. Saya telah menggunakan FPA dalam penelitian saya terkait pencarian nilai kapasitas optimal dan lokasi optimal untu pembangkit listrik. Disini saya melakukan simulasi berulang kali agar dapat memvalidasi tingkat konsistensi hasil dari solusi yang ditemukan. Pada kasus ini untuk kapasitas nya sudah ditemukan nilai yang hampir sama untuk setiap simulasi yang dilakukan, namun untuk lokasi penempatan nya masih sangat signifikan variasi solusi yang dihasilkan. Kira kira apa yang harus saya lakukan ? atau memang seperti itu karakteristik FPA ? mohon pencerahannya.

        • pip Penulis

          Menurut pemahaman saya (bukan berdasarkan jurnal tertentu), sebenarnya untuk permasalahan optimasi secara umum, solusi yang memiliki variansi signifikan bukanlah sesuatu yang perlu dikhawatirkan selama solusi tersebut masih valid dalam memenuhi batasan-batasan yang tersedia. Adalah sangat mungkin apabila beberapa solusi terbaik ditemukan dalam masing-masing studi kasus.

        • pip Penulis

          Jika semua solusi tersebut menghasilkan nilai fungsi yang sama baiknya, maka solusi manapun yang diambil adalah solusi terbaik. Anda dapat menarik kesimpulan bahwa dalam studi kasus tersebut ditemukan beberapa solusi yang sama baiknya.

    • pip Penulis

      Bagian yang anda sampaikan adalah bagian perpindahan posisi setelah mengetahui nilai Levy. Hasil implementasi dapat ada lihat pada poin 3a2 pada penjabaran diatas.

      • fakhrul

        terimaksih, maaf mau tanya lagi.

        u=randn(1,d)*sigma;
        v=randn(1,d);
        step=u./abs(v).^(1/beta);
        L=0.01*step;

        untuk randn(1,d) itu artinya apa ya?
        dan abs disitu maksudnya apa?

        terimakasih

        • pip Penulis

          randn dan abs adalah fungsi yang disediakan oleh matlab sehingga penjelasan fungsinya dapat anda lihat secara detail pada halaman bantuan pada situs matlab. randn adalah fungsi untuk membangkitkan bilangan acak dalam sebaran distribusi normal sedangkan abs adalah fungsi untuk mendapatkan bilangan positif dari sebuah nilai.