Algoritma DA (Dragonfly 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 hewan capung dalam mencari sumber makanan. Sama seperti algoritma optimasi lain yang sudah dibahas sebelumnya, algoritma ini memiliki 2 fase, yaitu Fase Eksplorasi dan Fase Eksploitasi. Dalam fase eksplorasi capung akan terbang secara berkelompok, dan masing-masing kelompok akan terbang menuju arah yang berbeda. Setelah menemukan calon sumber makanan yang cukup baik, maka setiap kelompok capung akan terbang searah menuju sumber makanan tersebut.
Perlu diketahui bahwa terdapat 5 faktor yang digunakan dalam algoritma ini, yaitu:
- Faktor Pemisahan
- Faktor Penggabungan
- Faktor Penyesuaian
- Faktor Sumber Makanan
- Faktor Predator
Faktor yang menentukan seekor capung akan berpisah dari kelompoknya
Faktor yang menentukan seekor capung bergabung dengan kelompok baru
Faktor yang menentukan seekor capung menyesuaikan arah terbang pada kelompok yang baru
Faktor yang menentukan capung dalam kelompok secara bersama-sama menuju sumber makanan
Faktor yang menentukan capung dalam kelompok secara bersama-sama berpencar untuk menghindari predator
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 capung / dragonfly yang digunakan
Nilai yang direkomendasikan adalah 10 sampai dengan 40
Diasumsikan dalam kasus ini, bat yang digunakan adalah 15 ekor
jumlahDragonfly = 15;
* 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 DA (Dragonfly Algorithm)
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 1 – 3)
[posisiDragonflyTerbaik,nilaiFungsiTerbaik] = DA( ... jumlahDragonfly, jumlahIterasi, jumlahDimensi, minPosisi, maksPosisi, Lb, Ub);
Memasuki perhitungan pada fungsi DA
1. Lakukan inisialisasi capung pada posisi acak,
Kemudian beri nilai awal fitness nya dengan angka 0
for i=1:jumlahDragonfly, PosisiDragonfly(i,:) = Lb + (Ub-Lb) .* rand(1,jumlahDimensi); end FitnessDragonfly=zeros(jumlahDragonfly,1);
2. Lakukan inisialisasi delta posisi pada posisi acak,
Delta posisi akan digunakan untuk menentukan posisi capung yang baru pada setiap perulangan
for i=1:jumlahDragonfly, DeltaPosisi(i,:) = Lb + (Ub-Lb) .* rand(1,jumlahDimensi); end
3. Lakukan perhitungan pada masing-masing data baru (poin 3a – 3g)
for iterasi=1:jumlahIterasi . . .
3a. Tentukan radius dari masing-masing capung
Nilai radius akan semakin naik seiring dengan banyaknya iterasi yang sudah dilakukan
radius=(Ub-Lb)/4+((Ub-Lb)*(iterasi/jumlahIterasi)*2);
3b. Tentukan bobot yang akan digunakan dalam perhitungan delta posisi
Berbeda dengan nilai radius, nilai bobot ini akan semakin turun seiring dengan banyaknya iterasi yang sudah dilakukan
bobotDelta=0.9-iterasi*((0.9-0.4)/jumlahIterasi);
3c. Tentukan nilai bobot iterasi yang akan digunakan pada perhitungan dibawah ini
Nilai bobot ini juga akan semakin turun seiring dengan banyaknya iterasi yang sudah dilakukan
dengan nilai yang paling rendah adalah 0
bobotIterasi=0.1-iterasi*((0.1-0)/(jumlahIterasi/2)); if bobotIterasi<0 bobotIterasi=0; end
3d. Tentukan nilai acak untuk bobot pemisahan, penyesuaian, penggabungan, makanan, dan Predator
Kelima bobot ini digunakan untuk menghitung nilai sebenarnya untuk nilai pemisahan, penyesuaian, penggabungan, makanan, dan Predator
dan kemudian nilai ini nantinya digunakan untuk menghitung nilai delta posisi yang baru
bobotPemisahan=2*rand*bobotIterasi; %seekor capung berpisah dari kelompoknya bobotPenggabungan=2*rand*bobotIterasi; %seekor capung bergabung dengan kelompok baru bobotPenyesuaian=2*rand*bobotIterasi; %seekor capung menyesuaikan arah terbang pada kelompok yang baru bobotMakanan=2*rand; %capung dalam kelompok secara bersama-sama menuju sumber makanan bobotPredator=bobotIterasi; %capung dalam kelompok secara bersama-sama berpencar untuk menghindari predator
* Lakukan perhitungan untuk mendapatkan fitness sumber makanan terbaik dan predator terburuk (poin 3e)
3e. Lakukan perhitungan sebanyak jumlah capung yang ada (poin 3e1 -3e3)
for i=1:jumlahDragonfly . . .
3e1. Hitung nilai fitness pada posisi capung yang ada
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini
FitnessDragonfly(i,1) = HitungFitness(PosisiDragonfly(i,:));
* Gunakan fungsi ini untuk menghitung fitness dengan rumus:
f(x, y) = (x ^ 2 + y - 11) ^ 2 + (x + y ^ 2 - 7) ^ 2
function z = HitungFitness(u) z = (u(1)^2 + u(2) - 11) ^ 2 + (u(1) + u(2)^2 - 7) ^ 2;
3e2. Jika nilai fitness lebih baik dari nilai fitness sumber makanan
maka ambil posisi capung tersebut sebagai posisi sumber makanan terbaik
if FitnessDragonfly(i,1) > FitnessMakanan FitnessMakanan = FitnessDragonfly(i,1); PosisiMakanan = PosisiDragonfly(i,:); end
3e3. Jika nilai fitness lebih buruk dari nilai fitness predator
maka ambil posisi capung tersebut sebagai posisi predator terburuk
if FitnessDragonfly(i,1) < FitnessPredator if all(PosisiDragonfly(i,:) < maksPosisi) && all(PosisiDragonfly(i,:) > minPosisi) FitnessPredator=FitnessDragonfly(i,1); PosisiPredator=PosisiDragonfly(i,:); end end
* Lakukan perhitungan untuk mendapatkan posisi capung yang baru (poin 3f)
3f. Lakukan perhitungan sebanyak jumlah capung yang ada (poin 3f1 - 3f11)
for i=1:jumlahDragonfly . . .
* Lakukan perhitungan berikut untuk mendapatkan solusi tetangga dari capung terpilih (poin 3f1)
3f1. Lakukan perhitungan pada masing-masing capung selain capung yang sedang dihitung
for j=1:jumlahDragonfly . . .
3f1a. Hitung jarak antara kedua capung tersebut
Metode yang digunakan adalah metode Euclidean
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini
jarakAntarDragonfly = HitungJarak(PosisiDragonfly(i,:), PosisiDragonfly(j,:));
* Gunakan fungsi ini untuk menghitung jarak Euclidean antara 2 data
function j = HitungJarak(a,b) for i=1:size(a,1) j(1,i)=sqrt((a(i)-b(i))^2); end
3f1b. Jika capung kedua masih berada di dalam radius capung pertama,
maka tambahkan capung kedua sebagai solusi tetangga dari capung pertama
if (all(jarakAntarDragonfly <= radius) && all(jarakAntarDragonfly ~= 0)) idxDragonflyLain = idxDragonflyLain+1; jumlahDragonflyLain = jumlahDragonflyLain+1; DeltaDragonflyLain(idxDragonflyLain, :) = DeltaPosisi(j,:); PosisiDragonflyLain(idxDragonflyLain, :) = PosisiDragonfly(j,:); end
* Lakukan perhitungan berikut untuk mendapatkan nilai pemisahan capung tersebut (poin 3f2)
3f2. Lakukan perhitungan berikut apabila terdapat solusi tetangga sebanyak lebih dari 1
if jumlahDragonflyLain>1 . . .
3f2a. Lakukan perhitungan pada masing-masing solusi tetangga yang ada
Hitung selisih dari masing-masing posisi solusi tetanggan dan posisi capung yang ada
Kemudian kalikan dengan angka -1 sebagai jawaban akhir
for k=1:jumlahDragonflyLain daftarPemisahan=daftarPemisahan+(PosisiDragonflyLain(k,:)-PosisiDragonfly(i,:)); end daftarPemisahan=-daftarPemisahan;
3f2b. Jika solusi tetangga tidak lebih dari 1, maka nilai pemisahan adalah 0
daftarPemisahan=zeros(1, jumlahDimensi);
* Lakukan perhitungan berikut untuk mendapatkan nilai penggabungan capung tersebut (poin 3f3a - 3f3b)
3f3a. Jika terdapat solusi tetangga sebanyak lebih dari 1,
maka nilai sementara adalah semua jumlah posisi solusi tetangga dibagi dengan banyaknya solusi tetangga yang ada
Jika tidak terdapat solusi tetangga lebih dari 1,
maka nilai sementara adalah menggunakan nilai posisi capung yang sedang terpilih
if jumlahDragonflyLain>1 tmpPenggabungan=(sum(PosisiDragonflyLain))/jumlahDragonflyLain; else tmpPenggabungan=PosisiDragonfly(i,:); end
3f3b. Nilai penggabungan akhir adalah nilai sementara dikurangi dengan posisi capung yang sedang terpilih
daftarPenggabungan=tmpPenggabungan-PosisiDragonfly(i,:);
* Lakukan perhitungan berikut untuk mendapatkan nilai penyesuaian capung tersebut (poin 3f4)
3f4. Jika terdapat solusi tetangga sebanyak lebih dari 1,
maka nilai penyesuaian adalah semua jumlah delta solusi tetangga dibagi dengan banyaknya solusi tetangga yang ada
Jika tidak terdapat solusi tetangga lebih dari 1,
maka nilai penyesuaian adalah menggunakan nilai delta posisi pada perulangan sebelumnya
if jumlahDragonflyLain>1 daftarPenyesuaian=(sum(DeltaDragonflyLain))/jumlahDragonflyLain; else daftarPenyesuaian=DeltaPosisi(i,:); end
* Lakukan perhitungan berikut untuk mendapatkan nilai sumber makanan (poin 3f5a - 3f5b)
3f5a. Hitung jarak menuju sumber makanan
Penjelasan tentang fungsi ini sudah dijelaskan pada perhitungan sebelumnya
jarakKeMakanan=HitungJarak(PosisiDragonfly(i,:),PosisiMakanan(1, :));
3f5b. Jika posisi sumber makanan tersebut masih berada dalam radius capung,
maka nilai sumber makanan adalah posisi sumber makanan tersebut dikurangi dengan posisi capung yang sedang terpilih
Selain itu maka nilai sumber makanan adalah 0
if all(jarakKeMakanan<=radius) daftarMakanan=PosisiMakanan-PosisiDragonfly(i,:); else daftarMakanan=0; end
* Lakukan perhitungan berikut untuk mendapatkan nilai predator (poin 3f6a - 3f6b)
3f6a. Hitung jarak menuju predator yang ada
Penjelasan tentang fungsi ini sudah dijelaskan pada perhitungan sebelumnya
jarakKePredator=HitungJarak(PosisiDragonfly(i,:),PosisiPredator(1, :));
3f6b. Jika posisi predator tersebut masih berada dalam radius capung,
maka nilai predator adalah posisi predator tersebut ditambah dengan posisi capung yang sedang terpilih
Selain itu maka nilai predator adalah 0
if all(jarakKePredator<=radius) daftarPredator=PosisiPredator+PosisiDragonfly(i,:); else daftarPredator=zeros(1,jumlahDimensi); end
3f7. Lakukan perhitungan sebanyak jumlah dimensi yang ada
jika posisi capung berada diluar batas yang diperbolehkan,
maka kembalikan posisinya agar masuk dalam batas tersebut
dan nilai delta posisi diisi dengan angka acak antara 0 sampai dengan 1
for d=1:jumlahDimensi if PosisiDragonfly(i,d)>Ub(d) PosisiDragonfly(i,d)=Lb(d); DeltaPosisi(i,d)=rand; end if PosisiDragonfly(i,d)
3f8. Tentukan nilai maksimal delta untuk digunakan dalam perhitungan delta posisi
Diasumsikan dalam kasus ini, nilai maksimal delta adalah 10 persen dari selisih batas atas dan batas bawah rentang nilai yang adamaksDelta=(Ub-Lb)/10;* Lakukan perhitungan berikut untuk memperoleh nilai posisi capung yang baru (poin 3f9 - 3f10)
3f9. Lakukan perhitungan dibawah ini jika jarak menuju sumber makanan berada diluar radius capung yang sedang terpilih (poin 3f9a - 3f9b)
if any(jarakKeMakanan>radius) . . .3f9a. Lakukan perhitungan berikut apabila terdapat solusi tetangga sebanyak lebih dari 1 (poin 3f9a1)
if jumlahDragonflyLain>1 . . .3f9a1. Lakukan perhitungan pada masing-masing dimensi posisi yang ada (poin 3f9a1a - 3f9a1c)
for j=1:jumlahDimensi . . .3f9a1a. Hitung nilai delta posisi yang baru
Perhitungan nilai delta tidak menggunakan nilai sumber makanan dan nilai predator
karena jarak menuju sumber makanan berada di luar radius capungDeltaPosisi(i,j) = bobotDelta * DeltaPosisi(i,j) ... + rand * daftarPemisahan(1,j) ... + rand * daftarPenggabungan(1,j) ... + rand * daftarPenyesuaian(1,j);3f9a1b. Jika nilai delta posisi ternyata diluar batas yang diperbolehkan,
maka kembalikan posisinya agar masuk dalam batas tersebutif DeltaPosisi(i,j)>maksDelta(j) DeltaPosisi(i,j)=maksDelta(j); end if DeltaPosisi(i,j)<-maksDelta(j) DeltaPosisi(i,j)=-maksDelta(j); end3f9a1c. Posisi capung yang baru adalah posisi yang lama ditambah dengan nilai delta posisi yang sudah ditemukan sebelumnya
PosisiDragonfly(i,j)=PosisiDragonfly(i,j)+DeltaPosisi(i,j);3f9b. Jika solusi tetangga tidak lebih dari 1,
maka nilai posisi capung yang baru dihitung dengan menggunakan menggunakan fungsi Levy
dan nilai delta posisi akan dikembalikan menjadi 0
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini. . . else PosisiDragonfly(i,:)=PosisiDragonfly(i,:)+Levy(jumlahDimensi).*PosisiDragonfly(i,:); DeltaPosisi(i,:)=0; end* 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;3f10. Lakukan perhitungan dibawah ini jika jarak menuju sumber makanan masih berada di radius capung yang sedang terpilih (poin 3f10a)
. . . else . . .3f10a. Lakukan perhitungan pada masing-masing dimensi posisi yang ada (poin 3f10a1 - 3f10a3)
for j=1:jumlahDimensi . . .3f10a1. Hitung nilai delta posisi yang baru
Perhitungan nilai delta menggunakan semua nilai yang sudah dihitung sebelumnyaDeltaPosisi(i,j) = (bobotPemisahan * daftarPemisahan(1,j) ... + bobotPenggabungan * daftarPenggabungan(1,j) ... + bobotPenyesuaian * daftarPenyesuaian(1,j) ... + bobotMakanan * daftarMakanan(1,j) ... + bobotPredator * daftarPredator(1,j)) ... + bobotDelta * DeltaPosisi(i,j);3f10a2. Jika nilai delta posisi ternyata diluar batas yang diperbolehkan,
maka kembalikan posisinya agar masuk dalam batas tersebutif DeltaPosisi(i,j)>maksDelta(j) DeltaPosisi(i,j)=maksDelta(j); end if DeltaPosisi(i,j)<-maksDelta(j) DeltaPosisi(i,j)=-maksDelta(j); end3f10a3. Posisi capung yang baru adalah posisi yang lama ditambah dengan nilai delta posisi yang sudah ditemukan sebelumnya
PosisiDragonfly(i,j)=PosisiDragonfly(i,j)+DeltaPosisi(i,j);3f11. Lakukan pengecekan apakah posisi capung yang baru masih berada dalam batas yang diperbolehkan
Jika posisi yang baru ternyata diluar batas yang diperbolehkan,
maka kembalikan posisinya agar masuk dalam batas tersebuttmpPosisi=PosisiDragonfly(i,:); I=tmpPosisiUb; tmpPosisi(J)=Ub(J); PosisiDragonfly(i,:)=tmpPosisi;
3g. Ambil posisi dan nilai fitness sumber makanan sebagai posisi dan nilai fitness terbaik
FitnessTerbaik=FitnessMakanan; posisiDragonflyTerbaik=PosisiMakanan;Hasil akhir adalah:
Algoritma DA (Dragonfly Algorithm) 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 Capung = 15 Jumlah maksimal iterasi = 500 Jumlah dimensi = 2 Batas minimal posisi capung = -2 Batas maksimal posisi capung = 2 Iterasi: 1, Capung: 1, Posisi terbaik: -0.98836 1.5358, Fitness terbaik: 103.726 Iterasi: 1, Capung: 2, Posisi terbaik: -1.2149 -1.5146, Fitness terbaik: 156.9085 Iterasi: 1, Capung: 3, Posisi terbaik: 0.17478 -0.74152, Fitness terbaik: 176.5271 Iterasi: 1, Capung: 9, Posisi terbaik: -0.61476 -0.54239, Fitness terbaik: 178.236 Iterasi: 1, Capung: 11, Posisi terbaik: -0.029332 -0.58151, Fitness terbaik: 178.8833 Iterasi: 3, Capung: 3, Posisi terbaik: -0.061786 -0.58169, Fitness terbaik: 179.2515 Iterasi: 4, Capung: 3, Posisi terbaik: -0.25451 -0.98169, Fitness terbaik: 181.587 Iterasi: 4, Capung: 9, Posisi terbaik: -0.2432 -0.94239, Fitness terbaik: 181.5988 Iterasi: 14, Capung: 15, Posisi terbaik: -0.26295 -0.96004, Fitness terbaik: 181.6052 Iterasi: 26, Capung: 15, Posisi terbaik: -0.28194 -0.89126, Fitness terbaik: 181.6068 Iterasi: 144, Capung: 5, Posisi terbaik: -0.26209 -0.90481, Fitness terbaik: 181.6112 Iterasi: 167, Capung: 6, Posisi terbaik: -0.27619 -0.9432, Fitness terbaik: 181.612 Iterasi: 174, Capung: 13, Posisi terbaik: -0.26137 -0.93581, Fitness terbaik: 181.6137 Iterasi: 181, Capung: 5, Posisi terbaik: -0.26151 -0.91873, Fitness terbaik: 181.6142 Iterasi: 181, Capung: 10, Posisi terbaik: -0.26748 -0.91039, Fitness terbaik: 181.6147 Iterasi: 190, Capung: 11, Posisi terbaik: -0.26858 -0.91062, Fitness terbaik: 181.615 Iterasi: 190, Capung: 12, Posisi terbaik: -0.2675 -0.92168, Fitness terbaik: 181.6162 Iterasi: 190, Capung: 15, Posisi terbaik: -0.26883 -0.9206, Fitness terbaik: 181.6164 Iterasi: 203, Capung: 2, Posisi terbaik: -0.2707 -0.92459, Fitness terbaik: 181.6165 Iterasi: 229, Capung: 3, Posisi terbaik: -0.2706 -0.92258, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 2, Posisi terbaik: -0.27067 -0.92259, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 3, Posisi terbaik: -0.27068 -0.92262, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 4, Posisi terbaik: -0.2708 -0.92263, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 5, Posisi terbaik: -0.27078 -0.9227, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 6, Posisi terbaik: -0.27087 -0.92272, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 8, Posisi terbaik: -0.27089 -0.92275, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 9, Posisi terbaik: -0.2709 -0.92276, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 10, Posisi terbaik: -0.27086 -0.9228, Fitness terbaik: 181.6165 Iterasi: 269, Capung: 12, Posisi terbaik: -0.27078 -0.92286, Fitness terbaik: 181.6165 Iterasi: 271, Capung: 1, Posisi terbaik: -0.27087 -0.92307, Fitness terbaik: 181.6165 Iterasi: 271, Capung: 2, Posisi terbaik: -0.27087 -0.92303, Fitness terbaik: 181.6165 Iterasi: 271, Capung: 3, Posisi terbaik: -0.27086 -0.92302, Fitness terbaik: 181.6165 Iterasi: 284, Capung: 1, Posisi terbaik: -0.27083 -0.92306, Fitness terbaik: 181.6165 Iterasi: 293, Capung: 1, Posisi terbaik: -0.27085 -0.92303, Fitness terbaik: 181.6165 Iterasi: 295, Capung: 1, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 302, Capung: 1, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 309, Capung: 1, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 312, Capung: 1, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 2, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 3, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 4, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 5, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 6, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 8, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 9, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 317, Capung: 10, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 328, Capung: 2, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 328, Capung: 3, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 329, Capung: 1, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 332, Capung: 2, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 332, Capung: 3, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Iterasi: 340, Capung: 7, Posisi terbaik: -0.27084 -0.92304, Fitness terbaik: 181.6165 Posisi Terbaik: -0.27084 -0.92304 Nilai Fungsi Terbaik =181.6165Contoh 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.