Ant Colony Optimization: Mencari Posisi dengan Nilai Fungsi Maksimal dari Fungsi Banana


Dalam dunia optimasi, mencari nilai maksimal atau minimal dari sebuah fungsi objektif seringkali menjadi tantangan yang kompleks. Salah satu pendekatan yang digunakan adalah Ant Colony Optimization (ACO), yang terinspirasi dari perilaku pencarian makan semut. Dalam artikel ini, kita akan mempelajari penerapan ACO untuk mencari posisi dengan nilai maksimal dari fungsi Banana, yang juga dikenal sebagai Fungsi Rosenbrock.

Ant Colony Optimization

Fungsi Banana (Rosenbrock)

Fungsi Banana, atau yang lebih dikenal dengan Fungsi Rosenbrock, adalah fungsi benchmark yang sering digunakan dalam uji coba algoritma optimasi. Fungsi ini memiliki bentuk matematis sebagai berikut:

f(x, y) = (a – x)^2 + b(y – x^2)^2

Di dalam kode MATLAB yang digunakan, parameter ( a ) seringkali disetel ke 1 dan parameter ( b ) ke 100. Fungsi ini memiliki ciri khas seperti lekukan atau “bananas” yang melengkung, sehingga dinamakan Fungsi Banana.

Ant Colony Optimization (ACO)

ACO adalah algoritma metaheuristik yang terinspirasi oleh perilaku koloni semut dalam mencari makanan. Dalam ACO, semut secara kolektif berkomunikasi melalui jejak feromon dan memilih jalur yang menghasilkan makanan terbaik. Algoritma ini terdiri dari beberapa tahapan, termasuk inisialisasi semut, evaluasi solusi, pembaruan feromon, dan pemilihan solusi berdasarkan feromon.

Implementasi dalam MATLAB

Dalam implementasi ACO untuk mencari posisi dengan nilai maksimal dari fungsi Banana, kita menggunakan pendekatan iteratif. Pada setiap iterasi, semut-semut akan bergerak dalam ruang pencarian dan memilih posisi berdasarkan informasi feromon. Posisi terbaik yang ditemukan akan diperbarui setelah setiap iterasi.

  • Pendefinisian Fungsi Banana: Pertama, kita mendefinisikan fungsi banana(x, y) yang merepresentasikan fungsi Banana (Fungsi Rosenbrock) sesuai dengan persamaan matematis yang telah disebutkan sebelumnya.
% Fungsi Banana (Rosenbrock)
function z = banana(x, y)
    a = 1;
    b = 100;
    z = (a - x).^2 + b * (y - x.^2).^2;
end
  • Penyetelan Parameter ACO: Selanjutnya, kita menentukan parameter-parameter yang dibutuhkan untuk algoritma ACO, seperti jumlah semut, jumlah iterasi, koefisien alpha dan beta, serta tingkat penguapan feromon.
% Parameter ACO
jumlahSemut = 50;
jumlahIterasi = 100;
alpha = 1;
beta = 1;
rho = 0.5; % Pheromone evaporation rate
Q = 100;   % Pheromone constant
  • Inisialisasi dan Evaluasi: Kita melakukan inisialisasi posisi semut secara acak di dalam rentang pencarian yang ditentukan, dan kemudian menghitung nilai fungsi Banana untuk setiap posisi semut.
% Inisialisasi
x_min = -5;
x_max = 5;
y_min = -5;
y_max = 5;
pheromone = ones(jumlahSemut, 1);
semutX = rand(jumlahSemut, 1) * (x_max - x_min) + x_min;
semutY = rand(jumlahSemut, 1) * (y_max - y_min) + y_min;
nilaiFungsiTerbaik = inf;
posisiTerbaik = [];
  • Iterasi ACO: Pada setiap iterasi, semut-semut akan bergerak dalam ruang pencarian berdasarkan informasi feromon dan pemilihan probabilitas. Setelah itu, nilai fungsi dari posisi baru akan dievaluasi dan feromon akan diperbarui.
% Iterasi ACO
for iterasi = 1:jumlahIterasi
    % Evaluasi fungsi objektif
    nilaiFungsi = banana(semutX, semutY);
    
    % Update posisi terbaik
    [nilaiMin, idxMin] = min(nilaiFungsi);
    if nilaiMin < nilaiFungsiTerbaik
        nilaiFungsiTerbaik = nilaiMin;
        posisiTerbaik = [semutX(idxMin), semutY(idxMin)];
    end
    
    % Update pheromone
    pheromone = (1 - rho) * pheromone + Q ./ nilaiFungsi;
    
    % Pilih posisi berdasarkan pheromone
    probabilitas = pheromone ./ sum(pheromone);
    semutX = (1 - beta) * semutX + beta * (probabilitas .* (x_max - x_min) + x_min);
    semutY = (1 - beta) * semutY + beta * (probabilitas .* (y_max - y_min) + y_min);
end
  • Posisi dan Nilai Fungsi Terbaik: Selama iterasi, kita juga memperbarui posisi dan nilai fungsi terbaik yang telah ditemukan.
disp(['Posisi Terbaik = ', num2str(posisiTerbaik)]);
disp(['Nilai Fungsi Terbaik = ', num2str(nilaiFungsiTerbaik)]);
  • Visualisasi Hasil: Setelah semua iterasi selesai, kita memvisualisasikan hasil simulasi menggunakan plot 3D. Hal ini memungkinkan kita untuk melihat dengan jelas bagaimana posisi terbaik terletak dalam ruang pencarian fungsi Banana.
% Plot fungsi Banana (Rosenbrock)
[X, Y] = meshgrid(linspace(x_min, x_max, 100), linspace(y_min, y_max, 100));
Z = banana(X, Y);

figure;
surf(X, Y, Z);
hold on;
scatter3(posisiTerbaik(1), posisiTerbaik(2), nilaiFungsiTerbaik, 100, 'r', 'filled');
xlabel('X');
ylabel('Y');
zlabel('Nilai Fungsi');
title('Fungsi Banana (Rosenbrock) dan Posisi Terbaik');
colorbar;
colormap jet
hold off;

Hasil Simulasi dan Analisis

Setelah menjalankan algoritma ACO, kita memperoleh posisi terbaik yang menghasilkan nilai maksimal dari fungsi Banana. Dengan memvisualisasikan hasil simulasi menggunakan plot 3D, kita dapat melihat dengan jelas bagaimana algoritma ACO berhasil menemukan posisi terbaik dalam ruang pencarian.

posisi terbaik dan nilai fungsi terbaik
Visualisasi 3D hasil optimasi

Dengan menggabungkan pendekatan ACO dan pemodelan matematika dari Fungsi Banana, kita dapat mencari solusi optimal dalam ruang pencarian yang kompleks. Implementasi ini menunjukkan keefektifan ACO dalam menyelesaikan masalah optimasi yang melibatkan fungsi objektif non-linear seperti Fungsi Banana. Dengan demikian, ACO terbukti menjadi algoritma yang mampu mengatasi berbagai tantangan optimasi dalam berbagai domain.

Posted on March 29, 2024, in Data mining and tagged , , , , , , , . Bookmark the permalink. Leave a comment.

Leave a comment