MATLAB : Menghitung Jumlah Kemunculan Suatu Nilai pada Sebuah Vektor atau Matriks

Halo pembaca Erliashare :)
Ketemu lagi dengan saya, kali ini momennya serius ya. Kita mau belajar menambah pengetahuan mengenai penggunaan Matlab.

Menghitng jumlah kemunculan suatu nilai pada sebuah vektor atau matriks. Maksudnya apa sih?
Saya punya analogi nih, mungkin teman-teman yang biasa bekerja di image processing ada yang tau fungsi imhist(I)? Fungsi ini berguna untuk menghitung kemunculan jumlah piksel [0...255] pada sebuah citra I. Jadi nanti hasil dari imhist() ini adalah berupa piksel dengan nilai 1 muncul sebanyak n kali, piksel dengn nilai 2 muncul sebanyak m kali, dan seterusnya sampai dengan piksel yang ke-255.

Nah, kali ini kita akan belajar fungsi yang semacam  imhist(). Kita akan menggunakan fungsi histc(). Apa bedanya dengan imhist()? Kalau imhist() nilai nya sudah fix 0...255, sedangkan histc() nilai yang mau kita hitung kemunculannya adalah input dari kita (tidak fix dari Matlab). Yuk kita tengok saja ya contohnya. ^_^



Kita punya vektor x seperti Gambar 1.

Gambar 1. Vektor x.

Lalu kita ingin mendapatkan nilai-nilai yang pernah muncul di vektor x, jika nilai tersebut muncul lebih dari satu kali maka hanya diambil satu saja. Oleh karena itu kita pakai fungsi unique() seperti Gambar 2. Jika menggunakan imhist(), kita tidak perlu mencari nilai-nilai yang pernah muncul seperti yang kita lakukan dengan fungsi unique() ini karena nilainya sudah default 0...255 (nilai piksel).

Gambar 2. Penggunaan fungsi unique(x) untuk mendaftar nilai-nilai (angka) yang pernah muncul di vektor x.

Setelah kita mendapatkan nilai-nilai yang pernah muncul di vektor x, kita akan menghitung jumlah kemunculan dari nilai-nilai tersebut di vektor x. Untuk mengitung nilai kemunculan tersebut, kita gunakan fungsi histc(x,nilai) yang sudah saya jelaskan di atas. Contoh penggunaan fungsi histc() dapat dilihat pada Gambar 3.

Gambar 3. Contoh penggunaan fungsi histc()

Kita sudah mendapatkan jumlah kemunculan dari tiap-tiap nilai, sekarang kita tinggal menggandengkannya dengan nilai yang pernah muncul. Jadi, maksud saya menggandengkan adalah membuat kita lebih mudah membacanya. Seperti pada Gambar 4, variabel kemunculan adalah hasil dari "gandengan" nilai dengan jumlah kemunculannya. Pada Gambar 4, variabel kemunculan kolom 1 menunjukkan nilai yang pernah muncul pada vektor x, sedangkan kolom 2 menunjukkan jumlah kemunculan nilai tersebut. Contoh cara membacanya: angka 1 muncul sebanyak 2 kali, angka 2 muncul sebanyak 1 kali, angka 10 muncul sebanyak 4 kali.

Gambar 4. Menggabungkan nilai dengan jumlah kemunculannya agar lebih mudah dibaca.

Gambar 5. Semua baris code yang kita butuhkan.

Mudah kaan? :D Simpel sekali. Tidak perlu menggunakan iterasi/loop, Matlab lemah sekali jika ada loop-nya. Cukup dengan beberapa baris code, langsung jadi (Gambar 5). Oh ya, x dapat berupa vektor maupun matriks ya. Dan ukuran matriks/vektor x pun tidak terlalu mempengaruhi kecepatan fungsi histc() ini. Beda kalau pakai loop ya, makin besar ukuran matriks/vektor, makin lama operasinya.

Sekian tutorial sederhanya. Terima kasih sudah mampir.. ^^ Semoga bermanfaat.

Read More..

MATLAB : Penerapan Particle Swarm Optimization (PSO) untuk Mencari Nilai Minimum Sebuah Fungsi

Beberapa waktu yang lalu saya sudah share penerapan algoritma GA (Genetic Algoritma), sekarang saya ingin share adiknya GA :D yaitu Particle Swarm Optimization atau PSO.
Langsung aja kali yah.. Oh ya, bagi yang butuh informasi lebih mengenai PSO, bisa buka http://en.wikipedia.org/wiki/Particle_swarm_optimization.

Fungsi/Permsalahan:
 

Definisi:
Dalam contoh kali ini, ada beberapa term yang harus diketahui, yaitu:
  1.   Partikel, partikel adalah representasi dari kandidat solusi pada PSO. Pada contoh kali ini, kita menggunakan 100 partikel.
  2.  Lokasi Partikel, jumlah decision variable ada dua, yaitu x dan y. Kita merepresentasikan dua variabel ini sebagai lokasi partikel. Sehingga lokasi partikel terdiri dari dua buah komponen, yaitu x dan y. Untuk nilai awal (inisialisai) nilai x dan y adalah random. Sedangkan range untuk variabel ini bergantung pada konstrain dari fungsi atau permasalahan. Range untuk variabel x adalah 1-(-1) = 2 dan range untuk variabel y adalah 3-0 = 3.
  3. Particle Best (pBest)pBest adalah solusi terbaik pada setiap partikel (lokal optima). Kita mengevaluasi/update nilai dari pBest pada setiap generasi/iterasi. Kita mengupdate nilai dari pBest jika nilai fitness nya lebih baik (untuk kasus ini lebih kecil, karena fungsi minimisasi) dari fitness pBest iterasi sebelumnya.
  4. Global Best (gBest)gBest adalah solusi terbaik di antara semua pBest (global optima). Kita mengevaluasi atau mengupdate nilai gBest pada setiap generasi/iterasi. Kita mengupdate nilai dari gBest jika nilai fitness nya lebih baik (untuk kasus ini lebih kecil, karena fungsi minimisasi) dari fitness gBest iterasi sebelumnya.


Tuning Parameter
Untuk mendapatkan hasil yang lebih bagus, kita perlu melakukan tuning parameter. banyak cara untuk tune parameter, kali ini kita pilih yang Constriction factor untuk mengupdate nilai kecepatan (v).




Constraint handling
Untuk constraint handling, kita menggunakan adhere strategi. Adhere strategi ini maksudnya adalah jika ada partikle yang nilainya melebihi konstraint, maka kita ubah nilai partikel tersebut ke nilai batas dari konstraint. Adhere strategi dapat diilustrasikann dengan gambar berikut:


Source Code Program
 
 

Bagi yang berminat dengan file .m source code programnya, dapat download melalui link berikut:
http://downloads.ziddu.com/download/24319367/PSO.zip.html
Read More..

MATLAB : Penerapan Genetic Algorithm (GA) untuk Mencari Nilai Minimum Sebuah Fungsi

Genetic Algortihm atau yang lebih dikenal dengan GA adalah sebuah algoritma mata-heuristic. GA merupakan algortima yang diadaptasi dari perilaku genetik makhluk hidup. Dalam GA terdapat beberapa fase. Fase-fase tersebut dapat dilihat pada Gambar 1.

Gambar 1. Flowchart fase-fase dalam GA.

Permasalahan apa saja kah yang dapat dipecahkan dengan GA?
  • Mencari nilai minimum suatu fungsi
  • Mencari nilai maksimum suatu fungsi
Kapan kita disarankan menggunakan GA?
  • Ketika fungsi yang ingin kita cari nilai optimal (min/max) nya terlalu kompleks
  • Ketika tidak memungkinkan mencari nilai optimumnya dengan menggunakan fungsi diferensial/derivatif
Untuk lebih menambah informasi tentang GA, teman-teman bisa membaca referensi dari wikipedia berikut:

Berikut saya akan memberikan contoh penerapan algoritma GA untuk mencari nilai minimum suatu fungsi.


Fungsi/Permsalahan:

 
Definisi Kromosom:



Karena kromosom merepresentasikan solusi dalam digit biner, kita perlu mengubah/konversi dari biner ke bilangan desimal.


Mekanisme Cross over dan Mutasi:
 Tuning Parameter:

  • Cross over Rate : 0.9
  • Mutation Rate : 0.1
Implementasi algoritma GA untuk permasalahan di atas dapat dilihat pada gambar berikut:

 




Jika ingin mendapatkan file .m implementasi algoritma GA ini, silahkan download melalui link berikut:

http://downloads.ziddu.com/download/24319366/GA.zip.html

Read More..