Algoritma PSO (Particle Swarm Optimization) 116


Algoritma PSO (Particle Swarm Optimization) adalah salah satu algoritma optimasi yang dapat digunakan untuk pengambilan keputusan. Tetapi bisa juga digunakan untuk pencarian jalur. Contoh yang dibahas kali ini adalah mengenai pencarian posisi dengan pengembalian nilai fungsi minimal. .
Particle Swarm Optimization adalah teknik optimasi dengan cara menghitung secara terus menerus calon solusi dengan menggunakan suatu acuan kualitas. Algoritma ini mengoptimasi permasalahan dengan cara menggerakan partikel / calon solusi di dalam ruang permasalahan menggunakan fungsi tertentu untuk posisi dan kecepatan dari partikel. Pergerakan partikel dipengaruhi oleh solusi terbaik partikel tersebut, dan solusi terbaik secara umum yang didapatkan dari partikel lain. Sekumpulan partikel ini dinamakan swarm, dan pada akhirnya swarm ini akan bergerak menuju kepada solusi terbaik.
Salah satu pengembangan algoritma ini adalah algoritma MSO (Multi Swarm Optimization), dimana digunakan lebih dari 1 swarm untuk menyelesaikan permasalahan.



Diasumsikan ada sebaran titik 3 dimensi, yaitu dimensi x, y, z
Masing-masing dimensi memiliki sebuah konstanta dan batas rentang titik yang dapat digunakan
Contoh data pada masing-masing dimensi adalah sebagai berikut

Dimensikonstantabatas minimalbatas maksimal
x3.21050
y33080
z2.550150

Contoh data awal adalah sebagai berikut:

Dim data(2)() As Double
data(0) = New Double() {3.2, 10, 50}
data(1) = New Double() {3, 30, 80}
data(2) = New Double() {2.5, 50, 150}

Nilai fungsi yang diketahui adalah dengan rumus f(x, y, z) = (kx * x^2) + (ky * y^2) + (kz * z^2)
Tentukan posisi dimana fungsi tersebut mengembalikan nilai minimal
Dengan batasan nilai bahwa x + y + z harus bernilai 210



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan dimensi permasalahan
Diasumsikan dalam kasus ini, dimensi bernilai 3 karena ada 3 dimensi yang akan dicari solusinya

Const dimensi As Integer = 3

* Tentukan jumlah partikel yang digunakan dalam perhitungan
Diasumsikan dalam kasus ini, jumlah partikel yang digunakan adalah 10 partikel

Const jumlahPartikel As Integer = 10

* Tentukan jumlah iterasi yang digunakan oleh setiap partikel untuk melakukan proses
Diasumsikan dalam kasus ini, jumlah iterasi yang digunakan adalah 100 kali

Const jumlahIterasi As Integer = 100

* 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 210

Const totalPosisi As Integer = 210

* Tentukan batas kecepatan untuk perpindahan posisi partikel dalam setiap proses
Diasumsikan dalam kasus ini nilai minimal dan nilai maksimal adalah 10% dari masing-masing batas nilai pada tiap-tiap dimensi
Sebagai contoh kasus, apabila nilai minimal dan maksimal dari sebuah dimensi adalah 10 dan 50,
Maka nilai minimalnya adalah -(50-10)/10 = -4, dan nilai maksimalnya adalah (50-10)/10 = 4

Dim minKecepatan(dimensi - 1) As Double
Dim maksKecepatan(dimensi - 1) As Double

For i As Integer = 0 To dimensi - 1
	minKecepatan(i) = -(data(i)(2) - data(i)(1)) / 10
	maksKecepatan(i) = (data(i)(2) - data(i)(1)) / 10
Next

Langkah-langkah penggunaan algoritma ini adalah

1. Lakukan Inisialisasi data pada masing-masing partikel

1a. Inisialisasi semua posisi partikel awal dengan posisi acak
Setiap dimensi memiliki batas minimal dan maksimal sendiri-sendiri, sesuai pada isian parameter data

jumlahPosisi = 0
For j As Integer = 0 To posisi.Length - 1
	posisi(j) = rnd.Next(data(j)(1), data(j)(2))
	jumlahPosisi += posisi(j)
Next j

1b. Perlu diingat bahwa jumlah posisi diatas belum tentu sesuai dengan parameter totalPosisi
Oleh karena itu, lakukan penyesuaian posisi agar jumlah posisi selalu bernilai sama dengan parameter totalPosisi

Dim selisih As Integer = totalPosisi - jumlahPosisi
Dim idx As Integer = rnd.Next(dimensi)
Dim posisiBaru As Integer = posisi(idx) + selisih
If posisiBaru < data(idx)(1) Then Continue Do
If posisiBaru > data(idx)(2) Then Continue Do
jumlahPosisi = jumlahPosisi - posisi(idx) + posisiBaru
posisi(idx) = posisiBaru

1c. Inisialisasi nilai kecepatan semua partikel awal dengan nilai kecepatan acak

Dim kecepatanAcak(dimensi - 1) As Double
For j As Integer = 0 To kecepatanAcak.Length - 1
	Dim lo As Double = -1.0 * Math.Abs(data(j)(2) - data(j)(1)) / 10
	Dim hi As Double = Math.Abs(data(j)(2) - data(j)(1)) / 10
	kecepatanAcak(j) = (hi - lo) * rnd.NextDouble() + lo
Next j

1d. Hitung nilai fitness dari posisi acak tersebut
Karena tujuan permasalahan adalah mencari nilai minimal, maka semakin rendah nilai fungsi akan semakin baik
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Dim fitness As Double = HitungFitness(posisi, data)

* Gunakan fungsi ini untuk menghitung nilai fitness pada masing-masing partikel
Rumus yang digunakan adalah sesuai dengan rumus yang sudah ditentukan, yaitu
f(x, y, z) = (kx * x^2) + (ky * y^2) + (kz * z^2)

Private Function HitungFitness(ByVal posisi() As Integer, ByVal data()() As Double) As Double
	Dim hasil As Double = 0.0
	For i As Integer = 0 To posisi.Length - 1
		hasil += data(i)(0) * posisi(i) * posisi(i)
	Next i
	Return hasil
End Function

1e. Lakukan pengecekan nilai fitness,
Jika nilai fitness ini lebih baik dari nilai fitness umum, maka ambil posisi acak ini sebagai posisi terbaik umum

If swarm(i).fitness < fitnessTerbaik Then
	fitnessTerbaik = swarm(i).fitness
	swarm(i).posisi.CopyTo(posisiTerbaik, 0)

	indeksPosisiTerbaik = i
End If

2. Tentukan bobot inertia (w), bobot kognitif (c1), dan bobot sosial (c2)
Nilai acuan untuk masing-masing variabel dapat dilihat di http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=00870279
Diasumsikan dalam kasus ini, nilai bobot tersebut akan mengikuti nilai acuan yang sudah ada

Const w As Double = 0.729
Const c1 As Double = 1.49445
Const c2 As Double = 1.49445

3. Lakukan proses pencarian posisi terbaik sebanyak jumlah perulangan (poin 3a – 3f)

3a. Lakukan perulangan untuk setiap partikel
Cari kecepatan perpindahan posisi yang baru dengan rumus:
v baru = (w * v skrg) + (c1 * r1 * (posisi terbaik – posisi skrg)) + (c2 * r2 * (posisi umum terbaik – posisi skrg))
Jika kecepatan yang baru ternyata diluar batas minKecepatan dan maksKecepatan pada masing-masing dimensi, maka kembalikan nilainya agar masuk dalam batas kecepatan

For j As Integer = 0 To partikelTerpilih.kecepatan.Length - 1
	r1 = rnd.NextDouble()
	r2 = rnd.NextDouble()

	kecepatanBaru(j) = (w * partikelTerpilih.kecepatan(j)) + (c1 * r1 * (partikelTerpilih.posisiTerbaik(j) - partikelTerpilih.posisi(j))) + (c2 * r2 * (posisiTerbaik(j) - partikelTerpilih.posisi(j)))

	If kecepatanBaru(j) < minKecepatan(j) Then
		kecepatanBaru(j) = minKecepatan(j)
	ElseIf kecepatanBaru(j) > maksKecepatan(j) Then
		kecepatanBaru(j) = maksKecepatan(j)
	End If
Next j

kecepatanBaru.CopyTo(partikelTerpilih.kecepatan, 0)

3b. Lakukan update posisi yang baru dengan cara posisi lama + kecepatan baru
Jika posisi yang baru ternyata diluar batas variabel minX dan maksX (0 – 5), maka kembalikan posisinya agar masuk dalam batas

For j As Integer = 0 To partikelTerpilih.posisi.Length - 1
	posisiBaru(j) = partikelTerpilih.posisi(j) + kecepatanBaru(j)
	If posisiBaru(j) < data(j)(1) Then
		posisiBaru(j) = data(j)(1)
	ElseIf posisiBaru(j) > data(j)(2) Then
		posisiBaru(j) = data(j)(2)
	End If
Next j

3c. Sama seperti perhitungan sebelumnya, jumlah posisi yang baru belum tentu sesuai dengan parameter totalPosisi
Oleh karena itu, lakukan penyesuaian posisi agar jumlah posisi selalu bernilai sama dengan parameter totalPosisi

Dim jumlahPosisi As Integer = 0
For k As Integer = 0 To dimensi - 1
	jumlahPosisi += posisiBaru(k)
Next

Do While jumlahPosisi <> totalPosisi
	Dim selisih As Integer = totalPosisi - jumlahPosisi
	Dim selisihPerDimensi(dimensi - 1) As Integer
	Dim idx As Integer = -1
	Do While selisih <> 0
		idx = rnd.Next(dimensi)
		If selisih > 0 Then
			If posisiBaru(idx) + selisihPerDimensi(idx) < data(idx)(2) Then
				selisihPerDimensi(idx) += 1
				selisih -= 1
			End If
		Else
			If posisiBaru(idx) + selisihPerDimensi(idx) > data(idx)(1) Then
				selisihPerDimensi(idx) -= 1
				selisih += 1
			End If
		End If
	Loop
	For k As Integer = 0 To dimensi - 1
		Dim posBaru As Integer = posisiBaru(k) + selisihPerDimensi(k)
		If posBaru < data(k)(1) Then Continue Do
		If posBaru > data(k)(2) Then Continue Do
	Next
	For k As Integer = 0 To dimensi - 1
		Dim posBaru As Integer = posisiBaru(k) + selisihPerDimensi(k)
		jumlahPosisi = jumlahPosisi - posisiBaru(k) + posBaru
		posisiBaru(k) = posBaru
	Next
Loop

posisiBaru.CopyTo(partikelTerpilih.posisi, 0)

3d. Hitung nilai fitness untuk posisi yang baru

posisiBaru.CopyTo(partikelTerpilih.posisi, 0)
fitnessBaru = CariFitness(posisiBaru)
partikelTerpilih.fitness = fitnessBaru

3e. Jika nilai fitness baru lebih baik dari nilai fitness sebelumnya, maka ambil posisi yang baru sebagai posisi terbaik partikel tersebut

If fitnessBaru > partikelTerpilih.fitnessTerbaik Then
	posisiBaru.CopyTo(partikelTerpilih.posisiTerbaik, 0)
	partikelTerpilih.fitnessTerbaik = fitnessBaru
End If

3f. Jika nilai fitness baru ternyata lebih baik dari nilai fitness umum, maka ambil posisi yang baru sebagai posisi terbaik secara umum

If fitnessBaru > fitnessTerbaik Then
	posisiBaru.CopyTo(posisiTerbaik, 0)
	fitnessTerbaik = fitnessBaru

	Dim s As String = swarm(i).ToString()
	If s <> "" Then
		Console.Write("Partikel " & i & " : ")
		Console.WriteLine(s)
	End If
End If

* Agar dapat menjalankan skrip diatas, maka diperlukan sebuah Class Partikel untuk menampung semua data partikel beserta posisi, kecepatan dan nilai fitnessnya. Deklarasi Class Partikel adalah sebagai berikut:

Public Class Partikel
	Public posisi() As Integer
	Public fitness As Double
	Public kecepatan() As Double

	Public posisiTerbaik() As Integer
	Public fitnessTerbaik As Double

	Public lastString As String = ""

	Public Sub New(ByVal posisi() As Integer, ByVal fitness As Double, ByVal kecepatan() As Double, ByVal posisiTerbaik() As Integer, ByVal fitnessTerbaik As Double)
		Me.posisi = New Integer(posisi.Length - 1) {}
		posisi.CopyTo(Me.posisi, 0)
		Me.fitness = fitness
		Me.kecepatan = New Double(kecepatan.Length - 1) {}
		kecepatan.CopyTo(Me.kecepatan, 0)
		Me.posisiTerbaik = New Integer(posisiTerbaik.Length - 1) {}
		posisiTerbaik.CopyTo(Me.posisiTerbaik, 0)
		Me.fitnessTerbaik = fitnessTerbaik
	End Sub

	Public Overrides Function ToString() As String
		Dim s As String = ""
		s &= "posisi: "
		For i As Integer = 0 To Me.posisi.Length - 1
			s &= Me.posisi(i).ToString("F0") & " "
		Next i
		s &= ", "
		s &= "Fitness = " & Me.fitness.ToString("F2")

		If s <> lastString Then
			lastString = s
			Return s
		Else
			Return ""
		End If
	End Function
End Class

Hasil akhir adalah: (klik untuk perbesar gambar)

cmd25b

Contoh modul / source code dalam bahasa VB (Visual Basic) 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 *

116 pemikiran di “Algoritma PSO (Particle Swarm Optimization)

    • pip Penulis

      Rumus menentukan fitness nya bebas tergantung kebutuhan, sehingga tidak ada sumber tertentu untuk menentukan rumus yang sedang dipakai.

      Pada contoh ini saya menggunakan rumus f(x, y, z) = (kx * x^2) + (ky * y^2) + (kz * z^2), rumus ini juga buatan saya sendiri, bukan rumus yang sudah ada penelitiannya. Sehingga dapat anda ganti menyesuaikan dengan contoh kasus yang sedang anda miliki.

    • pip Penulis

      Menurut saya, Algoritma PSO (Particle Swarm Optimization) ini sudah cukup sulit, dan Algoritma FIS (Fuzzy Inference System) juga cukup sulit, sehingga sebaiknya digunakan secara terpisah untuk meminimalkan tingkat kesulitan yang ada.

      Tetapi kedua algoritma tersebut tetap bisa digabung. PSO digunakan untuk mencari bobot pada masing-masing kriteria. Nilai bobot terbaik kemudian diterapkan pada masing-masing data awal untuk menjadi input data dalam menggunakan Fuzzy. Setelah semua data dinormalisasi menggunakan bobot, maka fungsi keanggotaan dapat diterapkan dengan menggunakan rentang data normalisasi tersebut.

      Algoritma FIS (Fuzzy Inference System) yang sudah saya bahas pada website ini ada 3 macam, yaitu tipe Mamdani, tipe Sugeno, dan tipe Tsukamoto. Saya menyarankan agar menggunakan tipe Tsukamoto saja karena tipe ini yang paling mudah penerapannya dibandingkan tipe lainnya.

    • pip Penulis

      Contoh kasus yang diterapkan pada pos ini terinspirasi dari contoh kasus efisiensi pembangkit tenaga listrik. Ada 3 pembangkit tenaga listrik, dan masing-masing memiliki koefisien beban, batas minimal dan batas maksimal beban yang diperbolehkan. Tujuan utama adalah bagaimana cara agar ketiga pembangkit listrik ini dapat memenuhi kuota permintaan listrik dengan tepat (tidak kurang dan tidak lebih dari kuota), dan tidak melebihi batas beban dari masing-masing pembangkit listrik, tetapi dengan biaya yang paling murah. Rumus untuk menentukan biaya pada pos ini dihitung dengan f(x, y, z) = (kx * x^2) + (ky * y^2) + (kz * z^2), karena rumus yang sebenarnya tidak semudah itu, jadi rumus tersebut digunakan untuk mempermudah perhitungan saja.

      • Darma Arif

        maaf mau tanya , untuk optimasi pembangkit dengan 3 unit pembangkitan , apakah fungsi yang di masukkan ke fun = @(x)(x-[4,2]).^2 adalah fungsi gabungan dari ketiga fungsi unit?

        • pip Penulis

          Jika maksud anda adalah 3 variabel maka contoh jawabannya adalah sesuai fungsi yang saya jelaskan diatas
          f(x, y, z) = (kx * x^2) + (ky * y^2) + (kz * z^2)

          Jika bukan ini maksud anda, maka silahkan anda jelaskan terlebih dahulu maksud dari

          optimasi pembangkit dengan 3 unit pembangkitan

    • pip Penulis

      Mengenai Algoritma SVR sudah saya bahas pada algoritma tersendiri, dan dapat anda lihat pada disini. Dalam pembahasan tersebut, fungsi kernel yang digunakan adalah fungsi kernel Spline, tetapi dapat anda ubah menyesuaikan kasus yang anda hadapi. Dan saya rasa fungsi kernel ditentukan diluar dari konteks algoritma optimasi yang digunakan, sehingga tidak berhubungan secara langsung dengan algoritma PSO.

      • Feri Dwi Saputro

        fungsi kernel yang ingin sy pakai untuk penelitian adalah gaussian RBF, PSO dikatakan untuk optimasi dalam pemilihan parameter (C,epsilon) dalam model svr pada beberapa jurnal…..tp sy msh bingung gmn cr nerapinnya,

        • pip Penulis

          Jika demikian, maka langkah selanjutnya adalah tinggal mengganti fungsi kernel yang sudah ada dengan fungsi kernel Gaussian yang anda inginkan.

          Tapi setahu saya, sesuai pembahasan pada halaman ini), parameter c, r1, dan r2 nilainya sudah fix mengikuti acuan, dan epsilon adalah nilai minimal untuk terminasi perulangan, sehingga kedua paramter tersebut bukan merupakan tujuan utama dari optimasi. Optimasi dilakukan pada data-data tertentu yang dapat dihitung menggunakan fungsi tertentu (dalam kasus anda berarti fungsi kernel gaussian).

        • pip Penulis

          Dalam jurnal yang terdapat pada link tersebut, dijelaskan bahwa PSO digunakan untuk mencari nilai C, Epsilon, dan Lambda terbaik, dan ketiga parameter ini kemudian digunakan sebagai input parameter dalam melakukan prediksi data menggunakan SVR dengan fungsi kernel Gaussian.

          Langkah pertama adalah melakukan PSO sesuai dengan pembahasan pada halaman ini dengan menggunakan 3 nilai input (C, Epsilon, dan Lambda), dan perhitungan tersebut akan menghasilkan 3 macam nilai (mirip seperti pembahasan ini yang juga menghasilkan 3 macam nilai). Kemudian 3 nilai ini akan dijadikan sebagai parameter (C, Epsilon, dan Lambda) untuk melakukan pelatihan data dengan menggunakan SVR, dan pembahasan algoritma tersebut dapat anda lihat disini. Hasil pelatihan SVR kemudian digunakan untuk memprediksi data baru.

        • Feri Dwi Saputro

          fungsi SVR nya kl dalam code gmn yah ? atau bisakah anda mengajarkan perhitungan manual dengan fungsi SVR ?

        • pip Penulis

          Jika melihat kasus anda sebelumnya, maka anda sepertinya memerlukan implementasi fungsi kernel Gaussian. Pada pembahasan Algoritma SVR, anda dapat mengganti fungsi kernel Spline yang terdapat pada skrip tersebut dengan fungsi kernel Gaussian, yaitu:
          fungsiKernel = @(x,y) exp(-lambda*norm(x.feature-y.feature,2)^2);
          dengan nilai lambda adalah menggunakan hasil perhitungan pada algoritma PSO.

          Selanjutnya adalah melakukan langkah-langkah yang sudah saya jelaskan pada komentar sebelumnya.

          Untuk menjawab pertanyaan anda, fungsi SVR sudah ada pada contoh skrip pada pembahasan Algoritma SVR tersebut, Silahkan unduh contoh skrip yang tersedia untuk melakukan uji coba.

  • Tika

    Bagaimana membuat gui matlab dengan algoritma Particle Swarm Optimization? dalam hal ini apakah gui tersebut bisa berjalan kalau program matlab untuk algoritma PSO nya paralel?

    • pip Penulis

      Sebagai jawaban singkat: tentu saja proses algoritma pada program bisa dilakukan secara paralel.

      Yang ingin saya tanyakan, mengapa anda membutuhkan program yang prosesnya dilakukan secara paralel? Proses paralel membutuhkan teknik perhitungan yang lebih rumit dan ada kemungkinan terjadi kesalahan pada saat proses perhitungan dilakukan secara paralel. Teknik ini sangat tidak saya anjurkan agar tidak mempersulit pengerjaan atas kasus yang anda hadapi.

      • Tika

        saya membuatnya paralel karena input untuk m.filenya berupa argument yang berebntuk fungsi seperti x(1)+x(2)+4x(3)<=15 yang membentuk fungsi objektif dan kendalanya seperti yg saya lihat pada contoh sbb https://www.researchgate.net/publication/297245624_Particle_Swarm_Optimization_Algorithm_and_its_Codes_in_MATLAB tapi begitu dibuat GUI nya dengan matlab timbul error karena input arguments nya tidak bisa diproses. Apakah ada solusinya? kira kira bagaimana baiknya?

        • pip Penulis

          Saya sudah melihat dokumen pada tautan yang dimaksud, dan setelah melihat figure 2 dan potongan skrip, maka menurut saya tidak ada proses yang dilakukan secara paralel. Sepertinya pemahaman anda tentang “paralel” berbeda dengan pemahaman saya. Jika anda melihat pada potongan skrip, maka poin 4.2 “main program file” tidak membutuhkan argumen fungsi, karena semua parameter sudah dideklarasikan dalam file tersebut. Anda hanya perlu menyesuaikan isi variabel UB dan LB sebagai batasan dari masing-masing dimensi yang diperlukan sesuai dengan kasus yang anda hadapi.

    • pip Penulis

      Tentu saja kedua algoritma tersebut bisa digunakan, tetapi saya harus mempelajari dulu sistem yang anda miliki. Silahkan coba diceritakan lebih detail untuk memudahkan saya menganalisa.

        • Jaime

          udah saya kirim via email pak. saya saat ini sedang melakukan penelitian optimasi untuk meningkatkan keandalan pada penyulang menggunakan metode kombinasi fuzzy dengan PSO. dan masih binggung soal alur analisisnya pak bisa tolong bantu? makasih sebelumnya

  • Awaluddin Dongoran

    Maaf gan, saya mau tanya tentang optimasi PSO terhadap LVQ (Learning vector Quatization). kira-kira fungsi tujuannya apa ya.?
    Klo menurut saya bobot awal LVQ yang akan dioptimalisasi sehingga pada saat dilatih dan diuji akurasi nya tinggi dalam pengenalan pola klasifikasi. Tetapi saya bingung bikin fungsi objektifnya.
    Mohon pencerahannya. TerimaKasih.

    • pip Penulis

      Jika anda ingin menggabungkan algoritma ini dengan algoritma lain, tentunya anda sudah memiliki referensi jurnal sebagai panduan. Dalam jurnal tersebut seharusnya sudah dibahas mengenai semua kondisi yang digunakan dalam penggabungan algoritma tersebut, termasuk salah satunya adalah mengenai fungsi obyektif. Selanjutnya anda hanya perlu mengimplementasikan fungsi obyektif sesuai panduan jurnal tersebut.

        • pip Penulis

          Mohon maaf, pembahasan skrip yang saya lakukan pada halaman ini adalah berdasarkan pemahaman saya dalam mempelajari algoritma berdasarkan referensi skrip, sehingga saya tidak memiliki referensi jurnal sebagai panduan. Jika anda tidak memiliki referensi jurnal yang bagus, dan memang sebenarnya tidak ditemukan, maka sebaiknya anda tidak meneruskan topik tersebut karena keterbatasan referensi jurnal.

        • pip Penulis

          Untuk mengoptimasi parameter dari sebuah algoritma, maka anda dapat menggunakan input nilai parameter SVC sebagai data yang digunakan oleh algoritma PSO, dan kemudian mengganti cara perhitungan nilai fungsi dengan melakukan pelatihan algoritma SVC menggunakan nilai parameter yang ditentukan dari PSO. Output dari proses pelatihan SVC adalah nilai akurasi yang kemudian dapat digunakan sebagai nilai fitness PSO untuk dapat dibandingkan satu sama lain.

    • pip Penulis

      Jika partikel 1 berada pada posisi x=1, y=2, z=3, maka nilai fitnessnya adalah (3.2 * 1 ^ 2) + (3 * 2 ^ 2) + (2.5 * 3 ^ 2) = 37.7
      Jika partikel 2 berada pada posisi x=3, y=2, z=1, maka nilai fitnessnya adalah (3.2 * 3 ^ 2) + (3 * 2 ^ 2) + (2.5 * 1 ^ 2) = 43.3
      Demikian seterusnya anda hanya tinggal mengganti nilai x, y, z sesuai posisi partikel tersebut.

  • Boby

    Jika saya ingin menerapkan optimisasi parameter svm dengan pso. Bagaimana cara menentukan batas atas dan batas bawah parameter svm (C dan y) ?? Terima kasih

    • pip Penulis

      Bahasa pemrograman yang saya gunakan disini adalah Visual Basic .NET. Saya paham dengan bahasa Matlab tetapi saat ini tidak menggunakan Simulink. Mungkin anda dapat mencari bantuan pada situs resmi Mathworks.

        • pip Penulis

          Sangat sulit untuk mengetahui cara penyelesaian kasus tersebut karena hanya tersedia sebatas judul saja. Tetapi pada intinya, jika alur sistem pengendali tersebut dan fungsi obyektifnya cukup jelas, maka seharusnya penyelesaian terhadap kasus tersebut dapat dilakukan

        • pip Penulis

          Tentu saja anda harus mengetahui variabel-variabel yang digunakan dan kemudian cara untuk melakukan perhitungan fitness atau fungsi obyektif. Selain itu anda juga harus mengetahui batasan-batasan nilai agar solusi yang dihasilkan selalu valid. Jumlah batasan sangat bergantung dari masing-masing kasus. Ada kasus yang tidak memerlukan batasan, tetapi ada kasus yang memiliki banyak sekali batasan

    • pip Penulis

      Jika dilihat secara general, seharusnya semua algoritma optimasi dapat diimplementasikan untuk berbagai macam kasus. Tetapi apabila dilihat secara spesifik dan belum ada keterangan perhitungan yang cukup detail, maka sepertinya akan sulit dalam langkah pengimplementasian algoritma.

    • pip Penulis

      Rumus fitness untuk kasus penjadwalan bisa ditentukan dengan beberapa cara, misalnya dengan menghitung jumlah data / sks / menit / slot dalam jadwal tersebut.

    • pip Penulis

      Selama topiknya masih berkaitan dengan “optimasi”, maka seharusnya kasus tersebut dapat diselesaikan dengan kasus ini.

      Semua cara komunikasi masih aktif. Jika anda kesulitan berkomunikasi melalui jalur yang sebelumnya, maka silahkan gunakan jalur yang belakangan anda sebutkan.

    • pip Penulis

      Tidak ada nilai tetap yang dapat digunakan untuk menentukan fungsi obyektif karena fungsi tersebut sangat bergantung dengan kasus yang anda miliki.
      Saya gunakan contoh sederhana:
      Apabila anda memeiliki tujuan untuk mencari jarak terendah antara 2 buah titik, maka fungsi obyektifnya adalah
      f(x) = |x1 - x2|
      Dengan demikian, apabila kedua buah titik x1 dan x2 berada pada posisi yang sama, maka nilai f(x) nya adalah |x1 – x2| = 0, dan anda sudah menemukan jawaban bahwa titik x1 dan x2 adalah 2 buah titik dengan jarak terendah

      • Wahyu dianto

        Dalam arti tidak ada nilai tetap untuk objective functionnya adalah kita yang menentukan fungsi tersebut, semisal contoh saya melakukan optimasi untuk sebuah pengontrol dari konverter ?
        Dan untuk batas teratasnya objective function jg berbeda dengan contoh diatas ?

        • pip Penulis

          Ya betul. Fungsi obyektif adalah tergantung dari kasus tersebut. Jika anda memiliki panduan referensi dalam bentuk jurnal, maka biasanya sudah dijelaskan fungsi obyektif yang digunakan oleh kasus pada jurnal tersebut. Selanjutnya anda hanya perlu melakukan implementasi fungsi tersebut pada kasus anda.

      • Wahyu dianto

        Saya punya dua jurnal referensi tetapi sudah dalam bentuk file offline apakah bisa mas nya menjelaskan yang menjadi parameter tuningnya di jurnal tersebut ?
        Untuk jurnal offline nya, bisa saya kirim di email yang tertera di menu “hubungi kami” ?

  • Fikri

    Permisi, saya ingin bertanya. Apakah model jaringan back propagation bisa dikombinasikan dengan PSO sebagai pelatihannya?
    Dan apakah tepat digunakan untuk memprediksi/meramal?

    • pip Penulis

      Backpropagation sebenarnya sudah memiliki teknik perhitungan sendiri sehingga tidak dapat digabungkan dengan algoritma lain. Jika anda ingin menggunakan PSO sebagai teknik perhitungan, maka anda hanya dapat mengambil struktur jaringan sarafnya saja, sehingga menghasilkan alur seperti ini

  • Jon

    Kalau pada kasus penjadwalan, posisi itu adalah slot waktu matakuliahnya, terus kalau posisi baru di luar batas slot yang ada, apakah posisi baru = posisi lama atau bagaimana?

    • pip Penulis

      Setelah mendapatkan posisi baru, maka lakukan pengecekan agar posisi tersebut masih berada dalam posisi yang valid. Jika posisinya tidak valid, nilai posisi yang baru bisa tetap menggunakan posisi yang lama atau dibangkitkan kembali secara acak.

        • pip Penulis

          Untuk kecepatan seharusnya tidak terdapat batasannya, tetapi bisa dimodifikasi seperti itu apabila diperlukan. Batas minimal dan maksimal hanya terdapat pada saat pengecekan posisi agar tidak melebihi ruang yang valid.

    • pip Penulis

      Sepertinya saya tidak menemukan sumber aktif yang lain. Pada saat saya mempelajari algoritma ini, sumber diatas adalah sumber yang sah dan dapat dipertanggungjawabkan isinya. Tetapi mohon maaf apabila sumbernya sudah tidak aktif.

  • Tika

    Apakah PSO cukup efektif untuk TSP (Travelling Salesman Problem)? Adakah algoritma yang lebih baik dari PSO untuk TSP? Saya butuh rekomendasi algoritma yang paling akurat dan optimal. Terima kasih

    • pip Penulis

      PSO tentunya dapat digunakan untuk menyelesaikan kasus TSP. Secara teori, semua modifikasi dari PSO yang pernah saya baca akan selalu menjelaskan bahwa algoritma modifikasi tersebut lebih baik dari algoritma pendahulunya (PSO). Akan tetapi saya tidak dapat memastikan hal tersebut sampai saya melakukan implementasi sendiri, sehingga saya tidak dapat memberikan jawaban pasti algoritma manakah yang lebih baik dari algoritma yang lain.

        • pip Penulis

          Saya belum dapat memberikan penjelasan apabila informasi yang tersedia saat ini hanyalah “sentimen analisis”. Silahkan coba dijabarkan secara detail mengenai sistem tersebut.

    • pip Penulis

      Penggabungan sebuah algoritma dengan algoritma lainnya biasanya memerlukan analisa apakah hal tersebut dapat dilakukan setelah melihat contoh kasus yang tersedia. Saya gunakan contoh dengan asumsi terdapat 3 buah algoritma A, B dan C, dan 2 buah kasus D dan E. Penggabungan A+B mungkin tidak cocok digunakan dalam menyelesaikan kasus D tetapi cocok pada kasus E, sedangkan penggabungan A+C mungkin tidak cocok digunakan dalam menyelesaikan kasus E tetapi cocok pada kasus D. Tanpa mengetahui secara detail topik tersebut maka saya tidak dapat memberikan jawaban pasti.

  • Ananda

    maaf mau bertanya sebelumnya, saya sedang menyusun tugas akhir economic dispatch pembangkit. apakah ada alur yg lebih muda untuk memahami metode PSO ini? karna saya menggunakan metode ini juga. mohon bantuannya. terima kasih

    • pip Penulis

      Untuk dapat memberikan saran maka saya harus mengetahui secara detail kasus yang anda miliki. Silahkan anda jelaskan terlebih dahulu secara detail.

      Diskusi juga dapat dilakukan secara langsung dengan menghubungi kami secara langsung melalui nomor kontak yang tersedia pada halaman hubungi kami https://piptools.net/hubungi-kami/

  • Mohammad faris wahyudi

    Mau tanya, apakah bisa mengoptimasi 3 daya dari sumber generator 1+2+3, fitnessnya berdasarkan nilai heat rate yg terkecil.
    Cth 3 Generator tsb memiliki data daya min 30 MW dan maksimal 105 MW dan Masing2 memiliki data flow gas masing2 …nanti pola optimasi PSO nya seperti apa ?

    • pip Penulis

      Berdasarkan deskripsi singkat yang anda berikan, maka seharusnya algoritma ini dapat digunakan untuk menyelesaikan kasus tersebut. Pada intinya partikel akan dibangkitkan dalam ruang pencarian 30 – 105 MW tersebut (poin 1) dan kemudian akan berpindah posisi (poin 3b) yang dihitung dengan menghitung kecepatan partikel berdasarkan rumus pada poin 3a. Proses ini akan diulang sebanyak jumlah iterasi sambil dihitung nilai fitnessnya (nilai heat rate) dan disimpan nilai terendah nya yang merupakan solusi terbaik.

  • Rifqi Nawawi

    mas saya mau bertanya , apakah metode pso ini cocok untuk clustering dan apakah bisa dibuat program nya menggunakan pemograman web ? atau hanya cocok menggunakan pemograman matlab?

    • pip Penulis

      Algoritma dengan tujuan permasalahan optimasi pada umumnya dapat digunakan untuk penyelesaian kasus clustering, tetapi untuk mengetahui lebih lanjut silahkan anda jelaskan secara lebih spesifik mengenai sistem tersebut.

  • Adhi Pratama

    Maaf mas saya mau tanya, apakah PSO ini bisa menentukan atau mengoptimasi bobot pada metode Weighted Moving Average? dan juga dalam mengoptimasi bobot apakah PSO sendiri bisa mengeluarkan nilai Gbest sebanyak 5 nilai gbest? contoh misalkan dalam peramalan menggunakan Metode Weighted Moving Average menggunakan 5 data history yang mana setiap 5 data history tersebut di berikan masing masing bobot optimasi dari PSO tersebut itu kira kira bagaimana ya mas mohon penjelasannya.

    • pip Penulis

      Pada umumnya nilai terbaik atau Gbest hanya berupa satu nilai saja. Nilai terbaik tersebut (dalam kasus anda berarti nilai bobot) kemudian diterapkan pada sejumlah dataset (dalam kasus anda berarti 5 dataset) sehingga menghasilkan 5 buah nilai output yang berbeda.

  • des

    mau bertanya, saya ingin menggunakan algoritma pso ini untuk optimisasi portofolio. tapi saya bingung yang bertindak sebagai partikel ini sahamnya atau apanya ya? selain itu nilai fitness nya menggunakan rumus sharpe ratio yang disitu ada nilai bobotnya juga. saya masih agak bingung nanti cara bekerja portofolio di pso ini gimana? bisakah dijelaskan

    • pip Penulis

      Saya masih belum memberikan penjelasan lebih lanjut karena masih belum memahami mengenai sistem “portofolio” yang ingin anda optimasi. Silahkan diceritakan terlebih dahulu bagaimanakah alur sistem tersebut dan beberapa contoh data yang digunakan.

  • nunung nurhasanah

    Selamat malam, saya sedang mengembangkan model multi objective inventory dengan PSO. Untuk PSO kurang lebih saya sudah memahami melalui tutorial online class di youtube. Tapi masih belum bisa memahami bagaimana mengintegrasikan model yang sudah dibuat ke dalam PSO. Terimakasih. Salam

    • pip Penulis

      Mohon maaf deskripsi yang anda berikan masih terlalu minim sehingga saya belum dapat memahami sistem tersebut. Silahkan anda deskripsikan kembali secara lebih detail mengenai model tersebut.

  • ulfi rizqi amaliah

    Selamat malam , sekarang saya sedang melakukan penelitian tugas akhir optimasi fuzzy c means menggunakan particle swarm optimation , saya mencoba menghitung untuk bab 3 secara manual dan alurnya stuck di penentuan centroid pada iterasi kedua dan referensi juga minim , bagaiamana ya ? soalnya saya dilema mau ganti judul sudah cukup mau selesai , mungkin ada kontak untuk tanya tanya 🙂

  • Dedi Hartono

    Selamat siang kak , maaf mau tanya, saya melakukan optimasi kmeans menggunakan pso dan di hitung secara manual menggunakan excel, namun setelah perhitungan kecepatan dan update posisi pada iterasi 1 dan melanjutkan pada iterasi 2 ternyata datanya malah jadi satu cluster bukan terbagi menjadi beberapa cluster, apakah cara kerja pso memang seperti itu atau ada kesalahan dalam perhitungan? lalu untuk dataset yang dihitung dengan pso apakah harus data dengan banyak atribut (misal 13) atau bagaimana ya kak? mohon pencerahannya , terimakasih

    • pip Penulis

      Bolehkah saya mengetahui bagian kmeans manakah yang anda optimasi menggunakan PSO? Untuk model kasus seperti ini, anda dapat melakukan implementasi kmeans murni terlebih dahulu untuk memastikan perhitungan yang benar, dan kemudian menambahkan algoritma kedua sebagai optimasi untuk algoritma pertama. Jika penambahan algoritma kedua menyebabkan algoritma pertama tidak berjalan dengan benar maka tentunya kesalahan terdapat pada algoritma kedua.

      Jumlah data maupun atribut seharusnya tidak menyebabkan perhitungan algoritma menjadi keliru. Jika terdapat kekeliruan maka anda dapat uji coba terlebih dahulu menggunakan data dengan atribut yang lebih sedikit untuk memastikan implementasi algoritma sudah berjalan dengan baik atau belum.

      • Dedi Hartono

        Untuk yg dioptimasi ialah pusat clusternya kak, lalu untuk update pusat cluster pada pso tersebut, pada iterasi 2 saya menggunakan rumus update kecepatan dan update posisi, tapi hasilnya malah menjadi 1 cluster kak padahal saya ngitungnya makek 3 cluster. Apakah rumus yg saya gunakan untuk mengupdate pusat cluster salah kak? Mohon pencerahannya

        • pip Penulis

          Tentu saja jika proses update posisi menyebabkan cluster menjadi hanya 1 saja maka terdapat kesalahan pada saat implementasi update posisi tersebut. Tetapi hal ini tidak mutlak karena juga bergantung dari faktor data yang anda gunakan; jika data tersebut cenderung untuk berkumpul pada suatu tempat tanpa adanya / minim variasi, maka proses optimasi tentunya akan menganggap data tersebut sebagai 1 cluster. Dengan demikian tidak ada yang salah dengan implementasi melainkan kesalahan terjadi pada data yang tersedia.

  • Fitri wiranti

    Permisi min, sekarangkan lagi menyusun untuk proposal dikampus, dengan melanjutkan literatur penelitian orang, apa yang harus pertama saya lakukan untuk melakukan PSO? Bisakah saya mengirim literatur saya ke email ini?

  • husnul ramdani

    Dari sumber yang lain, metode PSO ini memiliki stopping criteria sebagai berikut:

    1. Suatu iterasi akan berhenti jika sudah mencapai nilai maksimum.
    2. Suatu iterasi akan berhenti jika telah menemukan solusi sesuai dengan kriteria yang ada.
    3. Suatu iterasi akan berhenti jika tidak ada konvergen.
    4. Suatu iterasi akan berhenti jika nilai radius populasi yang sudah dinormalisasikan mendekati nilai 0.
    5. Suatu iterasi akan berhenti jika grafik fungsi obyektif mendekati nilai 0 bersamaan dengan bertambahnya iterasi.

    boleh bantu jelaskan maksud dari masing – masing kriteria tersebut?

    terima kasih.

    • pip Penulis

      Jadi yang perlu anda pahami pertama kali adalah implementasi algoritma tidak akan memiliki batasan yang sama persis untuk setiap kasus, karena setiap kasus akan memiliki kondisi spesifik yang berbeda-beda. Dengan demikian, pada kasus A mungkin hanya poin 1 saja yang diperlukan, pada kasus B mungkin hanya 2 dan 3 saja yang diperlukan, pada kasus C hanya 4 dan 5 saja yang diperlukan, dan seterusnya. Dengan demikian penjelasan untuk setiap nomor tidak akan ditujukan menggunakan contoh kasus yang sama.

      1. Kondisi ini berlaku untuk kasus optimasi dengan tujuan mencari nilai tertinggi. Jika terdapat batasan sebuah nilai tertinggi yang dapat diperoleh dari sebuah solusi, maka iterasi akan dihentikan karena sistem tidak akan mungkin mendapatkan solusi yang lebih baik. Sebagai contoh jika dalam 10 iterasi ternyata pada iterasi ke 5 sistem sudah mendapatkan nilai tertinggi yaitu misalnya 100, maka perhitungan tidak perlu dilanjutkan untuk kelima iterasi berikutnya.
      2. Kondisi ini berlaku untuk pencarian solusi kompleks dengan tingkat validitas cukup rendah. Sebagai contoh dalam kasus penjadwalan terkadang terdapat batasan bentrok yang cukup banyak sehingga menyulitkan sistem dalam mendapatkan solusi yang valid. Pada saat sistem sudah mendapatkan solusi valid maka perhitungan akan langsung dihentikan untuk mempersingkat waktu perhitungan, yang apabila tetap dilanjutkan maka akan butuh sekian lama lagi untuk mendapatkan solusi yang lain.
      3. Kondisi ini biasanya adalah kondisi pembatas iterasi dalam perhitungan. Implementasinya cukup mudah yaitu dengan memberi batasan nilai iterasi yang diperbolehkan, sehingga perhitungan akan dihentikan, apapun hasilnya (solusi ditemukan atau tidak ditemukan), apabila sudah mencapai iterasi tertentu.
      4. Kondisi ini menurut saya cukup spesifik, tetapi logika nya cukup sederhana. Jika populasi mendekati nol, maka nilai fungsi atau fitness yang dihitung juga akan mendekati nol karena sangat rendahnya nilai2 yang digunakan. Biasanya diimplementasikan terhadap kasus dengan tujuan mencari nilai terendah seperti nilai error, waktu produksi, biaya, dll.
      5. Kondisi ini menurut saya akan terpenuhi jika tujuan yang ingin dicapai adalah sesuai dengan kondisi nomor 4. Jika tujuan implementasi kasus adalah mencari nilai terendah maka dalam setiap iterasi akan berkemungkinan untuk menghasilkan nilai yang lebih rendah dibandingkan sebelumnya, sehingga apabila ditampilkan dalam grafik maka garis yang terbentuk akan semakin turun sampai mendekati nilai terendah yang diperbolehkan dalam kasus tersebut.

      • husnul ramdani

        Terima kasih atas jawabannya.
        Menurut anda, jika algoritma PSO ini diimplementasikan pada kasus pengenalan wajah manusia, kriteria stopping mana yg umumnya dapat terjadi/terpenuhi?

        • pip Penulis

          Dalam model pengenalan wajah pada umumnya sistem akan membandingkan fitur wajah dan mencari citra dengan selisih paling rendah. Jika demikian tentunya nomor 1 dan 2 tidak berlaku. Untuk nomor 3 – 5 dapat berlaku tetapi masih bergantung dari model kasus secara spesifik. Bisa jadi hanya satu atau beberapa poin yang berlaku.

  • Zakaria

    Selamat Pagi min. Mohon bantuannya, saya masih kurang paham dalam penentuan nilai bobot inertia (w), bobot kognitif (c1), dan bobot sosial (c2). Apakah ada rumus/acuannya? Soalnya link acuan yang di lampirkan sudah rusak. Terimakasih.

    • pip Penulis

      Nilai parameter2 yang saya gunakan memang mengacu pada referensi jurnal yang saya dapatkan sebelumnya. Tentunya nilai ini nantinya dapat disesuaikan dengan referensi lain yang anda dapatkan, sehingga nilai2 parameter tersebut dapat dipertanggungjawabkan.

  • Devy

    Mau nanya nih gimana cara pengerjaan posisi partikel pada iterasi pertama? Ini rumusnya
    X 1/1= 1 + rand ( 6 – 1 ) – misal hasil random 0,2
    X 1/1 = 1 + 0,2 = 1,2

    • pip Penulis

      Sebelum memasuki iterasi pertama, posisi atau koordinat dari semua partikel dibangkitkan secara acak. Inilah inti dari poin nomor 1. Hal yang sama juga berlaku untuk nilai kecepatan partikel.

      Setelah memasuki tahap iterasi, ada 2 proses utama yang dilakukan, yaitu mengupdate kecepatan partikel dan melakukan perpindahan partikel berdasarkan kecepatan tersebut
      kecepatan dihitung dengan rumus
      v baru = (w * v skrg) + (c1 * r1 * (posisi terbaik – posisi skrg)) + (c2 * r2 * (posisi umum terbaik – posisi skrg))
      kemudian perpindahan posisi dihitung dengan rumus yang cukup sederhana
      p baru = p lama + v baru

      Jika saya mengkaitkan rumus ini dengan pertanyaan yang anda sampaikan, sepertinya anda menggunakan rumus kedua (perpindahan posisi) tanpa melakukan perhitungan rumus pertama (kecepatan) terlebih dahulu. Tentunya kecepatan tidak dihasilkan dengan angka acak (seperti yang anda sampaikan bernilai 0.2) tetapi menggunakan rumus pertama. Parameter yang digunakan pada rumus tersebut cukup banyak, tetapi semua nilainya dapat ditelusuri dari hasil proses inisialisasi pada poin nomor 1.

      • Devy

        Gimana cara mengerjakan rumus metode Algoritma PSO dengan rumus persamaan
        X i/α= xmin + rand(xmax – xmin)
        X i/α= xmin + rand(xmax – xmin)
        Berikan penjelasan beserta contoh perhitungannya kak. Terimakasih🙏

        • pip Penulis

          Rumus yang anda berikan mirip dengan rumus yang digunakan untuk melakukan normalisasi data. Jika memang tujuan tersebut yang anda inginkan maka rumus ini sebenarnya bukan bagian inti dari rumus algoritma PSO, melainkan hanya rumus pelengkap saja untuk mengolah data input sebelum dapat digunakan oleh algoritma PSO. Proses normalisasi data yang paling umum dan mudah adalah menggunakan teknik minmax, dimana rumusnya adalah:
          X normal = (X – Xmin) / (Xmaks – Xmin)

          Sedangkan rumus yang anda sampaikan adalah:
          X i/α= xmin + rand(xmax – xmin)

          Jika anda tetap mengkaitkan rumus tersebut dengan algoritma PSO, maka saya hanya dapat menyampaikan bahwa rumus tersebut bukan termasuk bagian dari algoritma PSO, Proses perhitungan utama PSO adalah menggunakan kedua rumus yang sudah saya sampaikan pada komentar sebelumnya. Saya juga belum memahami apa yang anda letakkan pada bagian sebelah kiri dari persamaan tersebut (X i/α)