Algoritma Particle Swarm Optimization PSO
Proses untuk mencari nilai minimum menggunakan algoritma PSO yaitu sebagai berikut :
1. Inisialisasi sekumpulan partikel secara acak atau random setiap partikel merepresentasikan solusi yang mungkin untuk masalah optimasi.
2. Inisialisasi posisi dari setiap partikel � dan kecepatan dari setiap
partikel � .
3. Hitung nilai kesesuaian dari setiap partikel berdasarkan formula dan
model yang telah ditentukan sesuai dengan masalah optimasinya. 4. Untuk setiap partikel, bandingkan nilai kesesuaian
dengan nilai terbaiknya yang telah dicapai
�
�
particle best, jika �
�
, maka �
�
diganti dengan .
5. Untuk setiap partikel, bandingkan nilai kesesuaian dengan nilai
terbaik yang dicapai dalam populasi �
�
global best, jika �
�
, maka �
�
diganti dengan .
6. Berdasarkan bagian 4 dan 5, kecepatan � dan posisi dari partikel �
diubah. Rumus pembaruan kecepatan
� : �
= � −
+ . . �
�
− � −
+ . . �
�
− � −
Adapun rumus pembaruan posisi � adalah �
= � −
+ � .
7. Jika telah mencapai kondisi akhir mencapai nilai iterasi optimum atau perulangan telah mencapai nilai yang konvergen ke nilai fungsi
minimum maka perulangan berhenti dan nilai optimumnya didapatkan namun jika belum maka diulangi pada nomor 3.
Berikut Pseudo code dari algoritma PSO :
For setiap partikel
Inisialisasi partikel
End Repeat
For setiap partikel
Hitung nilai kesesuaian
If nilai kesesuaian baru lebih baik daripada nilai kesesuian lama
Perbarui nilai kesesuian dari partikel tersebut
End End
Pilih partikel dengan nilai kesesuaian terbaik diantara semua partikel tetangganya dan simpan nilai kesesuaian terbaik tersebut
For setiap partikel
Hitung kecepatan partikel menggunakan rumus pertama di atas Perbarui posisi pertikel menggunakan rumus kedua di atas
End Until
kriteria berhenti = True
Berikut ini adalah diagram alir dari algoritma PSO:
Tidak
Ya
Mulai
Bangkitkan parameter dari PSO
Inisialisasi posisi, kecepatan, dan ruang setiap partikel
Evaluasi nilai kesesuian terbaik dari tiap partikel, dan pilih Pbest dan Gbest
Hitung kembali nilai kesesuaian tiap partikel dan perbarui Pbest dan Gbest
Apakah kriteria terpenuhi?
Cetak nilai optimal dari variabel Bangkitkan iterasi dari t = 1
Perbarui posisi dan kecepatan setiap partikel
Cara Kerja Algoritma Particle Swarm Optimization
Misalkan kita mempunyai fungsi berikut: min fx
dimana Prosedur PSO dapat dijabarkan dengan langkah-langkah sebagai berikut:
1. Asumsikan bahwa ukuran kelompok atau kawanan jumlah partikel adalah N. Untuk mengurangi jumlah evaluasi fungsi yang diperlukan
untuk menemukan solusi, sebaiknya ukuran N tidak terlalu besar, tetapi juga tidak terlalu kecil, agar ada banyak kemungkinan posisi menuju
solusi terbaik atau optimal. Jika terlalu kecil, sedikit kemungkinan menemukan posisi partikel yang baik. Terlalu besar juga akan membuat
perhitungan jadi panjang. Biasanya digunakan ukuran kawanan adalah 20 sampai 30 partikel.
2. Bangkitkan populasi awal dengan rentang dan
secara random sehingga didapat
, , . . . ,
�
. Setelah itu, untuk mudahnya, posisi partikel j dan kecepatannya pada iterasi i dinotasikan sebagai
dan . Sehingga partikel-partikel awal ini dinotasikan
, , ...,
�
dan kecepatan-kecepatan awal ini dinotasikan ,
, ...,
�
. Vektor ,
= , , … , disebut vektor koordinat dari partikel dan vektor , = , , … , disebut vektor koordinat dari kecepatan. Evaluasi nilai
fungsi tujuan untuk setiap partikel dan nyatakan dengan f[ ], f[
], ..., f[
�
].
3. Hitung kecepatan dari semua partikel. Semua partikel bergerak menuju titik optimal dengan suatu kecepatan. Awalnya semua kecepatan dari
partikel diasumsikan sama dengan nol. Set iterasi = .
4. Pada iterasi ke-i, temukan 2 parameter penting untuk setiap partikel j, yaitu:
a. Nilai terbaik sejauh ini dari koordinat partikel j pada iterasi i
dan untuk memudahkan penulisan, nyatakan saja sebagai P
best,j
, dengan nilai fungsi obyektif paling rendah kasus minimasi, f[ ],
yang ditemui sebuah partikel j pada semua iterasi sebelumnya. Nilai terbaik untuk semua partikel
yang ditemukan sampai iterasi ke-i, kita tuliskan saja sebagai G
best
, dengan nilai fungsi tujuan paling kecil atau minimum diantara semua partikel untuk semua iterasi
sebelumnya, f[ ].
b. Hitung kecepatan partikel j pada iterasi ke-i dengan rumus sebagai berikut:
=
−
+ . . P
best,j
–
−
+ . . G
best
–
−
,dengan = , , … ,
dimana dan
masing-masing adalah learning rates untuk kemampuan individu cognitive dan pengaruh sosial group, dan
dan bilangan acak random yang berdistribusi seragam
uniform dalam interval 0 dan 1. Jadi parameter dan
menunjukkan bobot dari memori position sebuah partikel terhadap memori position dari kelompok swarm. Nilai dari
dan
adalah 2 sehingga partikel-partikel akan mendekati target sekitar setengah selisihnya.
c. Hitung posisi atau koordinat partikel j pada iterasi ke-i dengan cara =
−
+ ;
j = 1, 2, ..., N Evaluasi nilai fungsi tujuan untuk setiap partikel dan nyatakan
sebagai f[ ], f[
], ..., f[
�
]. 5. Cek apakah solusi yang sekarang sudah konvergen. Jika posisi semua
partikel menuju ke satu nilai yang sama, maka ini disebut konvergen. Jika belum konvergen maka langkah 4 diulang dengan memperbarui
iterasi = + , dengan cara menghitung nilai baru dari P
best,j
dan G
best
. Proses iterasi ini dilanjutkan sampai semua partikel menuju ke satu titik solusi yang sama. Biasanya akan ditentukan dengan kriteria
penghentian stopping criteria, misalnya jumlah selisih solusi sekarang dengan solusi sebelumnya sudah sangat kecil.
Contoh 2.3
Kerjakan soal berikut: min
= –
dengan 60
≤ x ≤ 120 Sebelum masuk ke dalam langkah-langkah pembahasan algoritma, ada
beberapa konstanta atau parameter yang harus diketahui, yaitu: Tentukan dimensi permasalahan. Diasumsikan dalam kasus ini, dimensi bernilai 1 karena ada 1
variabel yang akan dicari nilainya. Kemudian tentukan jumlah partikel yang digunakan dalam perhitungan. Diasumsikan dalam kasus ini, jumlah partikel yang
digunakan adalah 4 partikel. Tentukan jumlah iterasi yang digunakan oleh setiap partikel untuk melakukan proses. Diasumsikan dalam kasus ini, jumlah iterasi yang
digunakan adalah 3 kali. Tentukan total posisi yang harus dicapai. Semua solusi yang ditemukan oleh masing-masing individu harus berjumlah sebanyak variabel
ini. Diasumsikan dalam kasus ini, total nilai yang harus dicapai adalah sesuai fungsi obyektif atau fungsi tujuan dan memenuhi batasan nilai yang diberikan yaitu
bernilai antara 60 dan 120. Tentukan kecepatan awal untuk perpindahan posisi partikel dalam setiap proses. Diasumsikan dalam kasus ini nilai kecepatan awal
adalah 0. Kemudian bobot sosial dalam contoh soal ini diasumsikan =
= .
Langkah-langkah penggunaan algoritma ini adalah
1. Inisialisasi data, dengan jumlah partikel = seperti yang sudah
ditentukan sebelumnya, didapat populasi awal secara acak random misalkan:
= ,
= ,
= ,
= .
2. Hitung nilai fungsi untuk setiap partikel untuk = , , , dan
nyatakan dengan: =
= ,
= =
, =
= ,
= =
. 3. Seperti yang sudah dipaparkan di atas, ditentukan kecepatan awal
= =
= = dan tetapkan iterasi pertama yaitu = .
4. Selanjutnya ditemukan nilai terbaik lokal sejauh ini yang merupakan posisi partikel terbaik dari partikel tersebut alias
�
� ,
serta nilai terbaik global yang merupakan posisi partikel terbaik dari seluruh kawanan
�
. �
� ,
= ,
�
� ,
= ,
�
� ,
= ,
�
� ,
= ,
�
= .
5. Hitung dengan
= = dan misalkan nilai bilangan acak random
yang didapat = . dan = . dengan rumus:
=
−
+ . . P
best,j
–
−
+ . . G
best
–
−
diperoleh: =
+ . . P
best,1
– + . . G
best
– = + .
− +
. −
= =
+ . . P
best,2
– + . . G
best
– = + .
− +
. −
=
= + . . P
best,3
– + . . G
best
– = + .
− + .
− = −
= + . . P
best,4
– + . . G
best
– = + .
− +
. −
= . Sehingga nilai
sebagai posisi partikel yang baru adalah: =
+ = ,
= + =
, =
− =
, =
+ . = .
6. Hitung nilai fungsi sekarang pada partikel untuk = , , ,
= =
, =
= ,
= = ,
= . =
. Sedangkan pada iterasi sebelumnya kita dapatkan
= =
, =
= ,
= =
, =
= 7. Nilai
dari iterasi sebelumnya tidak ada yang lebih baik sehingga �
� ,
baru untuk masing-masing partikel sama dengan nilai nya.
�
� ,
= ,
�
� ,
= ,
�
� ,
= ,
�
� ,
= . ,
�
= .
Apakah solusi sudah konvergen, dimana nilai dari masing-masing
nya sudah dekat? Belum. Maka, lanjutkan ke iterasi berikutnya yaitu
= . 8. Hitung kecepatan baru dan misalkan nilai bilangan acak random
selanjutnya yang didapat adalah = . dan = . maka diperoleh:
= + . . P
best,1
– + . . G
best
– = + .
− +
. −
= =
+ . . P
best,2
– + . . G
best
– = + .
− +
. −
= =
+ . . P
best,3
– + . . G
best
– = − + .
− + .
− = −
= + . . P
best,4
– + . . G
best
– = . + .
. − . + .
− . = Sehingga nilai
sebagai posisi partikel yang baru adalah: =
+ =
, =
+ = ,
= −
= ,
= . +
= .
9. Hitung nilai fungsi sekarang pada partikel untuk = , , ,
= = ,
= =
, =
= ,
= . = .
10. Jika dibandingkan dengan nilai dari iterasi sebelumnya, ada nilai
yang lebih baik dari nilai sekarang yaitu
= , sehingga �
� ,
= , dan
�
akan dicari dari { , , , . } = yang
dicapai pada =
. Sehingga untuk iterasi berikutnya, �
�
= { , ,
, . } dan
�
= .
Cek kembali, apakah solusi sudah konvergen? Jika belum konvergen, set = , masuk ke iterasi berikutnya.lanjutkan ke langkah berikutnya dengan
menghitung kecepatan baru dimana
= ; = , , , dan ulangi langkah-langkah selanjutnya sampai mencapai suatu nilai yang konvergen.
Hasil dari langkah-langkah di atas dapat disajikan dalam bentuk tabel: �
� , �
= =
= =
= =
= =
= =
= =
= =
= =
�
� ,
= �
� ,
= �
� ,
=
�
� ,
= 90
1 =
= =
= =
= =
= �
� ,
= �
� ,
=
= =
. = −
= . =
= =
. = .
�
� ,
=
�
� ,
= .
100
2 =
= =
= .
= =
= − =
= =
= =
= =
= . = .
�
� ,
= �
� ,
= �
� ,
=
�
� ,
= .
100
Tabel 2.1 : Tabel hasil perhitungan PSO secara manual untuk contoh 2.3
Dan berikut adalah hasil perhitungan yang diproses dengan menggunakan MATLAB:
run = 1
Iteration Best particle Objective fun 1
4 12.4323 2
4 12.4323 3
4 12.4323 4
1 6.3561 -----------------------------------------------------
run = 2
Iteration Best particle Objective fun 1
4 0.0000 2
4 0.0000 3
4 0.0000 4
4 0.0000 -----------------------------------------------------
Final Results-------------------------------------------- bestfun =
bestrun = 2
best_variables = 100
Elapsed time is 0.155848 seconds.
Berikut adalah grafik konvergensi yang ditampilkan dari best run:
Gambar 2.3 : Gambar grafik konvergensi PSO pada run ke 2
Dalam implementasinya, ditemukan bahwa kecepatan partikel dalam PSO standar diperbarui update terlalu cepat dan nilai minimum fungsi tujuan yang
dicari sering terlewati. Oleh karena itu, kemudian dilakukan modifikasi atau perbaikan terhadap algoritma PSO standar. Perbaikan itu berupa penambahan suatu
bobot inersia untuk mengurangi kecepatan pada formula pembaruan update kecepatan seperti yang telah disinggung sebelumnya.
Bobot inersia ini diusulkan oleh Yuhui Shi dan Erberhart pada tahun 1998 untuk meredam kecepatan selama iterasi, yang memungkinkan kawanan burung
konvergen dalam artian menuju titik target secara lebih akuratdan efisien dibanding
algoritma aslinya yaitu algoritma PSO standar. Biasanya nilai bobot inersia dibuat sedemikian hingga semakin besar iterasi yang dilalui, semakin mengecil
kecepatan partikelnya. Nilai ini bervariasi secara linear dalam rentang 0.4 hingga 0.9. Secara matematis perbaikan PSO ini dapat dituliskan sebagai berikut:
= .
−
+ . . P
best,j
–
−
+ . . G
best
–
−
,dengan = , , … , Formula tersebut adalah modifikasi terhadap formula sebelumnya, yaitu:
=
−
+ . . P
best,j
–
−
+ . . G
best
–
−
,dengan = , , … , Perlu diketahui bahwa nilai bobot inersia yang tinggi menambah posisi
pencarian global global exploration, sedangkan nilai bobot inersia yang rendah menambah posisi pencarian lokal local search. Oleh karena itu, supaya
tidak terlalu menitikberatkan pada salah satu bagian dan tetap mencari area pencarian yang baru dalam ruang berdimensi tertentu, maka perlu dicari nilai bobot
inersia yang secara imbang menjaga pencarian global dan lokal. Untuk mencapai itu dan mempercepat konvergensi, suatu bobot inersia yang mengecil
nilainya dengan bertambahnya iterasi dapat dirumuskan: =
− −
2.10
dimana dan
masing-masing adalah nilai awal dan nilai akhir bobot inersia,
adalah jumlah iterasi maksimum yang digunakan dan adalah iterasi saat ini sekarang. Biasanya digunakan nilai
= . dan = . . Gambar
pergerakan nilai fungsi tujuan =
– , untuk 50 iterasi ditunjukkan
dalam gambar 2.2 sedangkan gambar pergerakan nilai fungsi tujuan =
– setelah dilakukan modifikasi terhadap PSO dengan menyertakan bobot
inersia untuk 50 iterasi ditunjukkan dalam gambar 2.3. Terlihat bahwa dengan adanya modifikasi, pergerakan akan lebih cepat konvergen.
Berikut ini diberikan hasil implementasi grafik konvergensi dua jenis PSO:
Gambar 2.4 : Pergerakan nilai fungsi tujuan untuk PSO tanpa modifikasi
Gambar 2.5 : Pergerakan nilai fungsi tujuan untuk PSO dengan modifikasi
Dari kedua gambar di atas, dapat dibandingkan bagaimana pergerakan vektor solusi menuju solusi optimal atau melihat pergerakan nilai fungsi tujuannya
dari PSO asli PSO standar maupun PSO yang sudah dimodifikasi disertai bobot inersia.
Contoh 2.4
Contoh berikutnya yaitu bagaimana meminimalkan fungsi tujuan berdimensi lebih dari satu dan memiliki kendala constraint.
Fungsi obyektif : min
= −
+ −
dengan kendala +
=
Langsung saja kita proses dengan bantuan MATLAB dan didapatkan hasilnya sebagai berikut:
Final Results-------------------------------------------- bestfun =
1.8000
bestrun = 2
best_variables = 0.7993 2.4014
Elapsed time is 1.182401 seconds.
Gambar 2.6 : Gambar grafik konvergensi PSO pada run ke 2
Untuk mendapatkan hasil tersebut, diperlukan dua script program MATLAB yang telah dimodifikasi dari script program asli yang telah dituliskan
oleh Nabab Alam. File pertama mendefinisikan fungsi obyektif atau fungsi tujuan, dan file kedua dibangun program utama yang akan memecahkan masalah dengan
menggunakan algoritma PSO. Script kode program terlampir. Untuk file pertama
diberi nama ofun2.m. Kemudian file ke2 merupakan file program utama.
Setelah script program tersebut dijalankan, diketahui nilai fungsi obyektif fungsi tujuan terbaik yang dihasilkan setelah 10 kali independent run adalah
1.8000 dan menghasilkan nilai variabel-variabel terbaik antara lain: x1 = 0.7993 dan x2 = 2.4014. Dari 10 run yang dilakukan, diketahui run yang memberikan
hasil terbaik adalah run ke-2. Simulasi ini memerlukan waktu 1.182401 detik. Kita juga dapat melakukan perhitungan tanpa kendala dengan mengganti fungsi objektif
pada file pertama. Sebagai contoh, kita akan kerjakan lagi contoh yang tadi tetapi
tanpa kendala dan mengubah nama script ofun2.m menjadi ofun.m Kita juga harus mengubah kata ofun2 menjadi ofun pada baris 32 dan baris 73 pada file kedua
program PSO utama. Script utuh dapat diperiksa pada lampiran. Hasilnya adalah sebagai berikut:
Final Results-------------------------------------------- bestfun =
bestrun = 2
best_variables = 2 3
Elapsed time is 0.501870 seconds.
Tampilan grafik konvergensi pada best run adalah:
Gambar 2.7 : Gambar grafik konvergensi PSO pada run ke 2
Jadi, PSO dapat digunakan untuk menyelesaikan masalah program linear maupun non linear, dengan atau tanpa kendala.
54