
Optimalisasi Energi Penerangan Rumah Berdasarkan Perilaku Kolektif Burung saat Mencari Makanan : Mengenal Lebih Lanjut tentang Algoritma PSO
Setelah memahami konsep dasar Particle Swarm Optimization (PSO) dalam konteks penghematan energi pada sistem pencahayaan, kini saatnya menelaah bagaimana algoritma ini bekerja secara teknis. Lebih tepatnya pada artikel sebelumnya telah dibahas bahwa PSO dapat dimanfaatkan untuk menentukan konfigurasi pencahayaan paling efisien dalam suatu ruangan, yakni dengan memenuhi standar pencahayaan namun tetap mempertimbangkan aspek pemborosan energi. Akan tetapi, penjelasan mengenai cara kerja teknis PSO serta alasan mengapa algoritma ini begitu relevan dalam menyelesaikan masalah pemborosan energi belum sepenuhnya diungkap. Melalui artikel ini kita akan mengupas tuntas bagaimana PSO bekerja mulai dari prinsip dasarnya hingga alasan mengapa ia layak disebut sebagai solusi yang ciamik untuk efisiensi energi!
Pada dasarnya PSO dapat mengeksplorasi ruang solusi dengan memanfaatkan sekelompok partikel yang masing-masing merepresentasikan satu kemungkinan solusi [1]. Proses optimasi dimulai dengan menginisialisasi partikel-partikel tersebut secara acak di dalam ruang pencarian [1]. Lalu setiap partikel memiliki posisi yang merepresentasikan solusi potensial (letak) dan kecepatan (perubahan terhadap posisi lama dan baru dengan memperhatikan arah serta laju perpindahannya di iterasi berikutnya). Interaksi antar partikel melalui pembaruan posisi dan kecepatan tersebut memungkinkan algoritma ini secara bertahap menemukan solusi optimal berdasarkan pengalaman individu (personal best) dan informasi kolektif dari seluruh partikel (global best) [1]. Untuk memahami bagaimana posisi dan kecepatan partikel diperbarui dalam setiap iterasi, ditunjukkan persamaan yang digunakan dalam proses pembaruan yaitu;
Setelah memahami persamaan pembaruan kecepatan dan posisi partikel, penting untuk diketahui bahwa proses ini akan dilakukan secara berulang atau iteratif sebanyak x kali (jumlah iterasi yang telah ditentukan sebelumnya). Setiap iterasi memberikan kesempatan bagi partikel untuk memperbaiki posisinya berdasarkan pengalaman pribadi (personal best) dan informasi dari partikel terbaik dalam swarm (global best). Oleh karena itu, semakin banyak iterasi yang dilakukan, semakin besar peluang partikel-partikel dalam swarm untuk mengeksplorasi ruang pencarian secara menyeluruh dan mengeksploitasi informasi yang telah dikumpulkan guna mendekati solusi optimal. Hal ini disebabkan oleh kemampuan algoritma PSO dalam memperbaiki solusi secara bertahap dari iterasi ke iterasi, sehingga akurasi dan kualitas solusi yang dihasilkan cenderung meningkat seiring bertambahnya jumlah iterasi [1].
Lalu, bagaimana alur untuk algoritma PSO dapat bekerja?
Untuk memahami bagaimana algoritma Particle Swarm Optimization (PSO) bekerja, penting untuk mengetahui tahapan-tahapan utama yang membentuk proses optimasinya. Pada artikel ini, algoritma PSO akan diaplikasikan lebih lanjut menggunakan bahasa pemrograman Python sehingga memberikan gambaran yang lebih jelas dan mudah dipahami. Dengan pendekatan ini, setiap langkah dalam algoritma yang terdiri dari inisialisasi partikel, evaluasi fitness, hingga pembaruan posisi dan kecepatan partikel dapat diamati secara langsung melalui implementasi kode.
1. Inisialisasi Partikel
Pada awal proses, sejumlah partikel diinisialisasi secara acak dalam ruang pencarian yang digenerate secara acak menggunakan numpy.random.uniform
. Setiap partikel memiliki dua komponen utama yaitu;
- Posisi: Mewakili solusi potensial.
- Kecepatan: Mewakili laju perubahan posisi.
selain itu, setiap partikel menyimpan nilai personal best (pbest) yang pada awalnya sama dengan posisi awalnya dan global best (gbest) ditentukan berdasarkan nilai fitness terbaik yang ditemukan oleh seluruh partikel.
positions = np.random.uniform(-10, 10, n_particles)
velocities = np.random.uniform(-1, 1, n_particles)
pbest_position = positions.copy()
pbest_value = fitness_function(pbest_position)
gbest_index = np.argmin(pbest_value)
gbest_position = pbest_position[gbest_index]
gbest_value = pbest_value[gbest_index]
2. Evaluasi Fitness
Fungsi objektif atau fitness function digunakan untuk mengevaluasi seberapa baik posisi setiap partikel dalam mencapai tujuan optimasi. Fungsi ini memberikan nilai yang menunjukkan nilai kualitas solusi pada posisi tertentu.
Contoh fungsi objektif untuk mengoptimalkan f(x) = x^2:
def fitness_function(x):
return x ** 2
3. Update Kecepatan Partikel
Kecepatan partikel dalam algoritma PSO diperbarui berdasarkan persamaan yang sudah disebutkan pada awal artikel. Persamaan ini dirancang untuk menggabungkan tiga komponen utama yang mempengaruhi pergerakan partikel yaitu momentum, eksplorasi personal (personal best), dan eksplorasi sosial (global best). Komponen momentum berfungsi untuk menjaga agar partikel tetap mempertahankan arah geraknya sebelumnya yang bertujuan untuk menstabilkan hasil solusi. Sementara itu, eksplorasi personal memungkinkan partikel untuk belajar dari pengalaman terbaik yang pernah dicapainya sendiri (personal best), sehingga mendorong partikel untuk kembali ke posisi yang pernah menghasilkan nilai fitness terbaik. Di sisi lain, eksplorasi sosial memungkinkan partikel untuk memanfaatkan informasi dari partikel lain dalam kawanan, khususnya dari partikel yang memiliki posisi terbaik secara global (global best). Dengan menggabungkan ketiga aspek ini, proses pembaruan kecepatan menjadi dinamis dan adaptif, sehingga partikel tidak hanya mengejar solusi lokal, tetapi juga terus didorong untuk menjelajah ruang pencarian terutama *global best solution *untuk menemukan solusi yang lebih optimal.
velocities = (
w * velocities # Momentum
+ c1 * r1 * (pbest_position - positions) # Eksplorasi personal
+ c2 * r2 * (gbest_position - positions) # Eksplorasi sosial
)
4. Update Posisi Partikel
Setelah kecepatan diperbarui, posisi setiap partikel diperbarui sesuai dengan persamaan pada awal artikel ini. Lalu posisi baru ini kemudian dievaluasi lagi menggunakan fungsi fitness.
positions = positions + velocities
5. Update Personal Best (pbest) dan Global Best (gbest)
Setelah mengevaluasi posisi baru maka dilakukan pembaruan pada pbest dan gbest. Lebih tepatnya jika posisi partikel lebih baik dari nilai fitness sebelumnya (pbest), maka pbest akan diperbarui. Jika posisi tersebut lebih baik dari gbest (nilai fitness terbaik di seluruh kawanan), maka gbest akan diperbarui.
better_mask = fitness < pbest_value
pbest_position[better_mask] = positions[better_mask]
pbest_value[better_mask] = fitness[better_mask]
if np.min(fitness) < gbest_value:
gbest_index = np.argmin(fitness)
gbest_position = positions[gbest_index]
gbest_value = fitness[gbest_index]
6. Iterasi dan Pengulangan
Proses di atas diulang sejumlah iterasi yang telah ditentukan. Selama iterasi ini, partikel terus mengeksplorasi ruang solusi untuk menemukan posisi terbaik. Setelah mencapai jumlah iterasi yang diinginkan atau mencapai kriteria maka algoritma akan berhenti.
Contoh Implementasi PSO
Berikut adalah implementasi penuh PSO untuk mengoptimalkan fungsi f(x) = x^2, dimana tujuannya adalah menemukan nilai x yang menghasilkan output minimum.
import numpy as np
def fitness_function(x):
return x ** 2
n_particles = 10
w = 0.5
c1 = 1.5
c2 = 1.5
max_iter = 100
positions = np.random.uniform(-10, 10, n_particles)
velocities = np.random.uniform(-1, 1, n_particles)
pbest_position = positions.copy()
pbest_value = fitness_function(pbest_position)
gbest_index = np.argmin(pbest_value)
gbest_position = pbest_position[gbest_index]
gbest_value = pbest_value[gbest_index]
for t in range(max_iter):
r1 = np.random.rand(n_particles)
r2 = np.random.rand(n_particles)
velocities = (
w * velocities
+ c1 * r1 * (pbest_position - positions)
+ c2 * r2 * (gbest_position - positions)
)
positions = positions + velocities
fitness = fitness_function(positions)
better_mask = fitness < pbest_value
pbest_position[better_mask] = positions[better_mask]
pbest_value[better_mask] = fitness[better_mask]
if np.min(fitness) < gbest_value:
gbest_index = np.argmin(fitness)
gbest_position = positions[gbest_index]
gbest_value = fitness[gbest_index]
print("Best position:", gbest_position)
print("Best value:", gbest_value)
Kesimpulan
Dari penjelasan di atas, dapat dilihat bahwa algoritma Particle Swarm Optimization (PSO) mempunyai cara kerja yang cukup sederhana namun tetap efektif. Dengan memanfaatkan kerja sama antar partikel yang saling berbagi baik dari pengalaman sendiri maupun dari partikel global seperti sifat kolektif burung saat mencari makan, algoritma PSO bisa secara bertahap menemukan solusi yang makin mendekati optimal. Proses iteratif atau pengulangan yang terdiri dari update posisi, kecepatan, dan evaluasi fitness ini yang menyebabkan algoritma ini dapat belajar atau self learning dan berkembang di setiap pengulangan/iterasinya. Nah, setelah tahu cara kerja PSO secara teknis, pada artikel selanjutnya kita akan membahas lebih jauh tentang bagaimana algoritma ini bisa dapat diterapkan untuk mengoptimalkan konsumsi energi, khususnya dalam sistem pencahayaan yang hemat dan efisien.
Literatur Pendukung
[1] D. Wang, D. Tan, and L. Liu, “Particle swarm optimization algorithm: an overview,” Soft Computing, vol. 22, no. 2, pp. 387–408, Jan. 2017, doi: 10.1007/s00500-016-2474-6.