Algoritma DA (Dragonfly Algorithm)


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 yang menentukan seekor capung akan berpisah dari kelompoknya

  • Faktor Penggabungan
  • Faktor yang menentukan seekor capung bergabung dengan kelompok baru

  • Faktor Penyesuaian
  • Faktor yang menentukan seekor capung menyesuaikan arah terbang pada kelompok yang baru

  • Faktor Sumber Makanan
  • Faktor yang menentukan capung dalam kelompok secara bersama-sama menuju sumber makanan

  • Faktor Predator
  • 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.
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 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 ada

maksDelta=(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 capung

DeltaPosisi(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 tersebut

if DeltaPosisi(i,j)>maksDelta(j)
	DeltaPosisi(i,j)=maksDelta(j);
end
if DeltaPosisi(i,j)<-maksDelta(j)
	DeltaPosisi(i,j)=-maksDelta(j);
end

3f9a1c. 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 sebelumnya

DeltaPosisi(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 tersebut

if DeltaPosisi(i,j)>maksDelta(j)
	DeltaPosisi(i,j)=maksDelta(j);
end
if DeltaPosisi(i,j)<-maksDelta(j)
	DeltaPosisi(i,j)=-maksDelta(j);
end

3f10a3. 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 tersebut

tmpPosisi=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.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 *