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