Wednesday, January 14, 2015

Perbedaan Antara Sensor Gambar CCD dan CMOS di Kamera Digital

Ada sebuah pertanyaan yang lumayan sering ditanyakan kepada saya: “Apa sih bedanya sensor CCD dan CMOS pada kamera digital? Kamera mana yang lebih bagus, yang memakai sensor CCD atau sensor CMOS?” Pihak produsen kamera memang kerap tidak menjelaskan secara lengkap perbedaan dari kedua jenis sensor gambar tersebut. Sebelum membahas lebih lanjut, terlebih dahulu saya sampaikan bahwa saat ini, baik sensor CCD maupun CMOS mampu memberikan hasil foto yang sama baiknya. Perbedaan utama keduanya hanyalah masalah teknologi.
Kamera digital sekarang ini sudah menjadi barang umum mengikuti penurunan harga jualnya. Salah satu penggerak di belakang penurunan harga adalah dengan diperkenalkannya sensor CMOS. Sensor CMOS sangat jauh lebih murah untuk dirakit dibandingkan sensor CCD.
Baik sensor CCD (Charge-Coupled Device) maupun CMOS (Complimentary Metal-Oxide Semiconductor) berfungsi sama yaitu mengubah cahaya menjadi elektron. Untuk mengetahui cara sensor bekerja kita harus mengetahui prinsip kerja sel surya. Anggap saja sensor yang digunakan di kamera digital seperti memiliki ribuan bahkan jutaan sel surya yang kecil dalam bentuk matrik dua dimensi. Masing-masing sel akan mentransform cahaya dari sebagian kecil gambar yang ditangkap menjadi elektron. Kedua sensor tersebut melakukan pekerjaan tersebut dengan berbagai macam teknologi yang ada.
Sensor CCD (Charge-Coupled Device)

Sensor CMOS (Complimentary Metal-Oxide Semiconductor)
Langkah berikut adalah membaca nilai dari setiap sel di dalam gambar. Dalam kamera bersensor CCD, nilai tersebut dikirimkan ke dalam sebuah chip dan sebuah konverter analog ke digital mengubah setiap nilai pixel menjadi nilai digital. Dalam kamera bersensor CMOS, ada beberapa transistor dalam setiap pixel yang memperkuat dan memindahkan elektron dengan menggunakan kabel. Sensor CMOS lebih fleksibel karena membaca setiap pixel secara individual.
Sensor CCD memerlukan proses pembuatan secara khusus untuk menciptakan kemampuan memindahkan elektron ke chip tanpa distorsi. Dalam kata lain, sensor CCD menjadi lebih baik kualitasnya dalam ketajaman dan sensitivitas cahaya. Lain halnya, chip sensor CMOS dibuat dengan cara yang lebih tradisional dengan cara yang sama untuk membuat mikroprosesor. Karena proses pembuatannya berbeda, ada beberapa perbedaan mendasar dari sensor CCD dan CMOS:
• Sensor CCD, seperti yang disebutkan di atas, kualitasnya tinggi, gambarnya low-noise. Sensor CMOS lebih besar kemungkinan untuk noise.
• Sensitivitas CMOS lebih rendah karena setiap pixel terdapat beberapa transistor yang saling berdekatan. Banyak foton mengenai transistor dibandingkan dioda-foto.
• Sensor CMOS menggunakan sumber daya listrik yang lebih kecil.
• Sensor CCD menggunakan listrik yang lebih besar, kurang lebih 100 kali lebih besar dibandingkan sensor CMOS.
• Chip CMOS dapat difabrikasi dengan cara produksi mikroprosesor yang umum sehingga lebih murah dibandingkan sensor CCD.
• Sensor CCD telah diproduksi massal dalam jangka waktu yang lama sehingga lebih matang. Kualitasnya lebih tinggi dan lebih banyak pixelnya.
Berdasarkan perbedaan tersebut, dapat lihat bahwa sensor CCD lebih banyak digunakan di kamera yang fokus pada gambar yang high-quality dengan pixel yang besar dan sensitivitas cahaya yang baik. Sensor CMOS lebih ke kualitas di bawahnya, resolusi dan sensitivitas cahaya yang lebih rendah. Akan tetapi pada saat ini sensor CMOS telah berkembang hampir menyamai kemampuan sensor CCD. Kamera yang menggunakan sensor CMOS biasanya lebih murah dan umur baterainya lebih lama.
Saat ini banyak kamera digital murah yang menggunakan sensor CMOS daripada CCD. Apa kelemahan dan kekurangan CMOS dibanding CCD? CMOS memiliki keunggulan dimana ongkos produksi murah sehingga harga kamera lebih terjangkau. Sedangkan CCD memiliki keunggulan dimana sensor lebih peka cahaya, jadi pada kondisi redup (sore/ malam) tanpa bantuan lampu kilat masih bisa mengkap obyek dengan baik, sedangkan pada CMOS sangat buram.
CCD dibuat dengan lebih sensitif dan dengan responsibility tinggi. itu menyebabkan ISO yang di gunakan paling rendah 200. dengan kontras yang tinggi membuat sangat noise pada ISO tinggi. Sedangkan CMOS, tidak sesensitif CCD, dengan power yang rendah menghasilkan gambar yang lebih soft. Dengan kontras yang tidak begitu tinggi, membuat gambar masih terlihat baik di ISO yang tinggi.
Lebih lanjut mengenai perbedaan keduanya, inilah plus minus sensor CCD dan CMOS saat ini :
Sensor CCD
Plus :
• matang secara teknologi
• desain sensor sederhana (lebih murah)
• sensitivitas tinggi (termasuk dynamic range)
• tiap piksel punya kinerja yang sama (uniform)
Minus :
• desain sistem keseluruhan (CCD plus ADC) jadi lebih rumit dan boros daya
• kecepatan proses keseluruhan lebih lambat dibanding CMOS
• sensitif terhadap smearing atau blooming (kebocoran piksel) saat menangkap cahaya terang
Sensor CMOS
Plus :
• praktis, keping sensor sudah termasuk rangkaian ADC (camera on a chip)
• hemat daya berkat integrasi sistem
• kecepatan proses responsif (berkat parralel readout structure)
• tiap piksel punya transistor sendiri sehingga terhindar dari masalah smearing atau blooming
Minus :
• proses pematangan teknologi (untuk menyamai kualitas CCD perlu biaya besar)
• piksel dengan transistor didalamnya menurunkan sensitivitas piksel (area penerima cahaya menjadi berkurang)
• piksel yang mampu mengeluarkan tegangan sendiri kurang baik dalam hal keseragaman kinerja (uniformity)
Kamera-kamera yang menggunakan sensor CCD: Nikon D60, Fujifilm FinePix S5 Pro, Nikon D80, Nikon D40X, Canon PowerShot G9, Canon PowerShot Pro1, Ricoh GR Digital, dll
Kamera-kamera yang menggunakan sensor CMOS: Nikon D2Xs, Nikon D3, Nikon D300, Canon EOS 450D, Canon EOS-1D Mark III, Canon EOS-1Ds Mark III, Canon EOS 5D, Pentax K20D, Samsung GX-20, Sigma SD14, dll
Prinsip Kerja Sistem Sensor CCD

Prinsip Kerja Sistem Sensor CMOS
Pilih yang mana
Baik sensor CCD maupun CMOS memang berbeda total secara teknologi dan desain. CCD punya keunggulan dalam hal sensitivitas meski berpotensi terganggu saat berhadapan dengan cahaya terang. CMOS unggul dalam hal kecepatan hingga lebih cocok dipakai di kamera dengan fps (burst) tinggi. Namun keduanya sudah didesain untuk sanggup memberikan hasil foto yang berkualitas tinggi. Jadi fokuskan saja pilihan pada hal-hal lain seperti memilih aplikasi yang mau digunakan, memilih lensa yang berkualitas dan melatih teknik memotret yang baik. In the end, it will always be the image, content and the story it tells… whatever camera you use… Happy Shooting!

Kompresi Lossy dan Lossliss


Kompresi adalah mengecilkan / memampatkan ukuran. kompresi data adalah teknik untuk mengecilkan data sehingga dapat diperoleh file dengan ukuran yang lebih kecil daripada ukuran file aslinya. Kompresi dibutuhkan untuk memperkecil penyimpanan data (karena ukuran datanya menjadi lebih kecil dari aslinya), mempercepat pengiriman data, dan memperkecil kebutuhan badwidth.Terdapat dua jenis kompresi data multimedia yaitu kompresi Lossy (Lossy Compression) dan kompresi Lossless (Lossless Compression).

Kompresi Lossless merupakan metoda kompresi data yang memungkinkan data asli dapat disusun kembali dari data hasil kompresi maka rasio kompresi pun tidak dapat terlalu besar untuk memastikan semua data dapat dikembalikan ke bentuk semula. Metode Lossless menghasilkan data yang identik dengan data aslinya.Kompresi  lossless  utamanya   digunakan   untuk  pengarsipan,   dan   penyuntingan.   Untuk   keperluan pengarsipan seperti catatan bank, artikel text, dll.

Kompresi Lossy adalah suatu metode untuk mengkompresi data dan men-dekompresi-nya. Data yang dipreoleh mungkin berbeda dari data aslinya, tetapi perbedaan itu cukup dekat. Metode ini paling sering digunakan untuk kompres data multimedia (Audio file dan gambar). Format kompresi Lossy mengalami generation loss yaitu jika mengalami prose kompresi-dekompresi berulang kali maka akan menyebabkan kehilangan kualitas secara progresif.


Perbedaan Kompresi Lossy dan Lossless
  • Lossless data kompresi adalah kelas dari algoritma data kompresi yang memungkinkan data yang asli dapat disusun kembali dari data kompresi, sedangkan Lossy kompresi adalah suatu metode untuk mengkompresi data dan men-dekompresi-nya.
  • Losless compression digunakan untuk mengkompresi data untuk diterima ditujuan dalam kondisi asli. Sedangkan lossy compression menghasilkan file kompresi yang lebih kecil dibandingkan dengan metode lossless yang ada.
  • Lossless compression digunakan jika akurasi data sangat penting, sedangkan lossy compression  biasanya membuang bagian-bagian data yang sebenarnya tidak begitu berguna dan tidak dirasakan oleh kita sehingga masih beranggapan bahwa data tersebut masih bisa digunakan walaupun sudah di kompresi.
  • Lossless compression biasanya data yang telah dikompresi ukurannya sama atau lebih besar, sedangkan lossy compression biasanya data yang telah dikompresi berukuran lebih kecil dari ukuran asli, namun masih tetap memenuhi syarat untuk digunakan.
  • Rasio kompresi pada lossless didapat cenderung rendah sedangkan rasio kompresi pada lossy didapat bisa sangat tinggi.

Contoh Aplikasi
  • Lossy compression : aplikasi pengkompres suara (mp3 compressor), gambar (adobe photoshop, paint), video (xilisoft). Contoh format file lossy compression :  MP3,  JPEG, MPEG 
  • Lossless compression : WINRAR dan WINZIP. Contoh format file lossless compression : *.zip, *.rar, document file (*.doc, *.xls, *.ppt), file executable (*.exe)

sumber :
http://greenvanda.blogspot.com/2012/12/perbedaan-kompresi-lossless-dan-lossy.html
http://bangkitagp.wordpress.com/2013/01/23/teknik-kompresi-lossless-dan-lossy-pada-audio/
http://v081-080010224.blogspot.com/2009/05/metode-kompresi-data.html

Perbedaan Analog dan Digital

Pada kesempatan hari ini saya ingin share komunikasi data tentang data analog dan data digital. Bagaimana sebuah data di kirim dari sumber(source) bisa sampai ke tujuan (destination). berikut adalah dasar-dasar dari bagaimana data di komunikasikan, ada sinyal analog dan sinyal digital.

Data Analog

Sinyal analog disebut juga broadband merupakan gelombang elektronik yang bervariasidan secara kontinyu di transmisikan melalui beragam media tergantung frekuensinyaa. Sinyal analog bisa dirubah ke bentuk digital dengan dimodulasi terlebih dahulu. Dua parameter terpenting yang dimiliki oleh isyarat analog adalah amplitude dan frekuensi. Gelombang pada sinyal analog yang umumnya berbentuk gelombang sinus memiliki tiga variable dasar, yaitu amplitudo, frekuensi dan phase.
· Amplitudo : ukuran tinggi rendahnya tegangan dari sinyal analog.
· Frekuensi : jumlah gelombang sinyal analog dalam satuan detik.
· Phase : besar sudut dari sinyal analog pada saat tertentu.




Data Analog disebarluaskan melalui gelombang elekromagnetik (gelombang radio) secara terus menerus, yang banyak dipengaruhi oleh faktor pengganggu atau penghalang. Analog merupakan bentuk komunikasi elektromagnetik yang merupakan proses pengiriman sinyal pada gelombang elektromagnetik dan bersifat variable yang berurutan. Jadi sistem analog merupakan suatu bentuk sistem komunikasi elektromagnetik yang menggantungkan proses pengiriman sinyalnya pada gelombang elektromagnetik.

Kecepatan gelombang ini disebut dengan Hertz (Hz) yang diukur dalam satuan detik. Misal dalam satu detik gelombang dikirim sebanyak 1000, maka disebut dengan 1000 Hertz.
Kekurangan sistem analog ini adalah pengiriman sinyal agak lambat dan sering terjadi error. 
Signal analog dapat digunakan dalam media tertutup seperti kabel coaxial, TV kabel dan kabel tembaga . Signal analog dapat pula digunakan melalui medium terbuka seperti gelombang mikro, telepon rumah tanpa kabel dan telepon seluler.

kelemahan sinyal analog :
  • semakin jauh jarak semakin lemah sinyal. (bisa diatasi dengan penguat sinyal atau amplifier)
  • rentan terhadap intrefensi listrik atau noise” dari dalam jalur. Kabel listrik, petir dan mesin-mesin listrik semua menginjeksikan noise dalam bentuk elektrik pada signal analog

Data Digital


Sinyal Digital disebut juga baseband .Sebagai ganti gelombang maka signal pada sistem digital ditransmisikan dalam bentuk bit bit biner. Sistem biner adalah sistem on – off (atau sistem 1 – 0 ), jadi bila ada tegangan atau on maka di angkakan 1, sedang bila tidak ada tegangan  atau off maka diangkakan 0.  Meski memiliki kelemahan terhadap nosie inteferensi listrik apabila jarak semakin jauh, namun signal digital masih dapat diperbaiki atau “direparasi” artinya dengan cara membangkitkan ulang bit-bit tersebut dengan tidak meregenerasi noise.


Analog dan Digital

Analog adalah sinyal data dalam bentuk gelombang yang yang kontinyu, yang membawa informasi dengan mengubah karakteristik gelombang. Dua parameter/ karakteristik terpenting yang dimiliki oleh isyarat analog adalah amplitude dan frekuensi. Gelombang pada sinyal analog yang umumnya berbentuk gelombang sinus memiliki tiga variable dasar, yaitu amplitudo, frekuensi dan phase. Amplitudo merupakan ukuran tinggi rendahnya tegangan dari sinyal analog. Frekuensi adalah jumlah gelombang sinyal analog dalam satuan detik. Phase adalah besar sudut dari sinyal analog pada saat tertentu. Analog disebarluaskan melalui gelombang elekromagnetik (gelombang radio) secara terus menerus, yang banyak dipengaruhi oleh faktor ”pengganggu”. Analog merupakan bentuk komunikasi elektromagnetik yang merupakan proses pengiriman sinyal pada gelombang elektromagnetik dan bersifat variable yang berurutan. Jadi sistem analog merupakan suatu bentuk sistem komunikasi elektromagnetik yang menggantungkan proses pengiriman sinyalnya pada gelombang elektromagnetik. 

Sedangkan 

Digital adalah sinyal data dalam bentuk pulsa yang dapat mengalami perubahan yang tiba-tiba dan mempunyai besaran 0 dan 1. Sinyal digital hanya memiliki dua keadaan, yaitu 0 dan 1, sehingga tidak mudah terpengaruh oleh derau, tetapi transmisi dengan sinyal digital hanya mencapai jarak jangkau pengiriman data yang relatif dekat. Biasanya sinyal ini juga dikenal dengan sinyal diskret. Sinyal yang mempunyai dua keadaan ini biasa disebut dengan bit. Bit merupakan istilah khas pada sinyal digital. Sebuah bit dapat berupa nol (0) atau satu (1). Kemungkinan nilai untuk sebuah bit adalah 2 buah (21). Kemungkinan nilai untuk 2 bit adalah sebanyak 4 (22), berupa 00, 01, 10, dan 11. Secara umum, jumlah kemungkinan nilai yang terbentuk oleh kombinasi n bit adalah sebesar 2n buah. Teknologi digital memiliki beberapa keistimewaan unik yang tidak dapat ditemukan pada teknologi analog, yaitu : 
1. Mampu mengirimkan informasi dengan kecepatan cahaya yang mengakibatkan informasi dapat dikirim dengan kecepatan tinggi. 

2. Penggunaan yang berulang-ulang terhadap informasi tidak mempengaruhi kualitas dan kuantitas informasi itu sendiri. 
4. Informasi dapat dengan mudah diproses dan dimodifikasi ke dalam berbagai bentuk. 
5. Dapat memproses informasi dalam jumlah yang sangat besar dan mengirimkannya secara interaktif. 
__Pada saat ini semakin banyak penggunaan teknik analog dan digital dalam suatu system untuk memanfaatkan keunggulan masing- masing. Tahapan terpenting adalah menentukan bagian mana yang menggunakan teknik analog danbagian mana yanhg menggunakan teknik digital. Dan dapat diramalkan di masa depan bahwa teknik digital akan menjadi lebih murah dan berkualitas. Contoh Sistem Digital
1. Jam digital 
2. Kamera digital 
3. Penunjuk suhu digital
4. Kalkulator digital
5. Computer 
6. HP 
7. Radio digital 

Contoh Sistem Analog:
1. Remote TV
2. Spedometer pada motor
3. Pengukur tekanan
4. Telepon
5. Radio analog

Monday, January 12, 2015

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

Algoritma Particle Swarm Optimization (PSO) dengan JAVA

Algoritma Particle Swarm Optimization (PSO) dengan JAVA


I. Pendahuluan

Hidup ini tidak ada yang ideal begitulah pepatah hidup yang selama ini sering kita dengar. Di dalam hidup, kita hanya bisa melakukan yang terbaik untuk hari ini dengan segala keterbatasan yang kita miliki. Dengan kata lain, sebagai manusia kita hanya bisa melakukan optimasi dengan harapan hari ini akan lebih baik dari hari kemarin dan hari esok akan lebih baik dari hari ini. Sama halnya dengan Particle Swarm Optimization yang nanti akan kita bahas.

Particle Swarm Optimization adalah salah satu metode optimasi yang terinspirasi dari perilaku gerakan kawanan hewan seperti ikan (school of fish), hewan herbivor (herd), dan burung (flock) yang kemudian tiap objek hewan disederhanakan menjadi sebuah partikel. Suatu partikel dalam ruang memiliki posisi yang dikodekan sebagai vektor koordinat. Vektor posisi ini dianggap sebagai keadaan yang sedang ditempati oleh suatu partikel di ruang pencarian. Setiap posisi dalam ruang pencarian merupakan alternatif solusi yang dapat dievaluasi menggunakan fungsi objektif. Setiap partikel bergerak dengan kecepatan v.

Particle Swarm Optimization atau yang kita kenal dengan PSO menerapkan sifat masing-masing individu dalam satu kelompok besar. Kemudian menggabungkan sifat-sifat tersebut untuk menyelesaikan permasalahan. Particle Swarm Optimization pertama kali dimunculkan pada tahun 1995, sejak saat itulah para peneliti banyak menurunkan dan mengembangkan metode PSO.
Ciri khas dari PSO adalah pengaturan kecepatan partikel secara heuristik dan probabilistik. Jika suatu partikel memiliki kecepatan yang konstan maka jika jejak posisi suatu partikel divisualisasikan akan membentuk garis lurus. Dengan adanya faktor eksternal yang membelokkan garis tersebut yang kemudian menggerakkan partikel dalam ruang pencarian maka diharapkan partikel dapat mengarah, mendekati, dan pada akhirnya mencapai titik optimal. Faktor eksternal yang dimaksud antara lain posisi terbaik yang pernah dikunjungi suatu partikel, posisi terbaik seluruh partikel (diasumsikan setiap partikel mengetahui posisi terbaik setiap partikel lainnya), serta faktor kreativitas untuk melakukan eksplorasi.

Particle Swarm Optimization memiliki kesamaan sifat dengan teknik komputasi seperti Algoritma Genetika (Genetic Algorithm). Sistem PSO diinisialisasi oleh sebuah populasi solusi secara acak dan selanjutnya mencari titik optimum dengan cara meng-update tiap hasil pembangkitan. Metode optimasi yang didasarkan pada swarm intelligence ini disebut algoritma behaviorally inspired sebagai alternatif dari algoritma genetika, yang sering disebut evolution-based procedures. Dalam konteks optimasi multivariabel, kawanan diasumsikan mempunyai ukuran tertentu atau tetap dengan setiap partikel posisi awalnya terletak di suatu lokasi yang acak dalam ruang multidimensi. Setiap partikel diasumsikan memiliki dua karakteristik: posisi dan kecepatan. Setiap partikel bergerak dalam ruang/space tertentu dan mengingat posisi terbaik yang pernah dilalui atau ditemukan terhadap sumber makanan atau nilai fungsi objektif. Setiap partikel menyampaikan informasi atau posisi bagusnya kepada partikel yang lain dan menyesuaikan posisi dan kecepatan masing-masing berdasarkan informasi yang diterima mengenai posisi yang bagus tersebut.

Sebagai contoh, misalnya perilaku burung-burung dalam dalam kawanan burung. Meskipun setiap burung mempunyai keterbatasan dalam hal kecerdasan, biasanya ia akan mengikuti kebiasaan (rule) seperti berikut :
1. Seekor burung tidak berada terlalu dekat dengan burung yang lain
2. Burung tersebut akan mengarahkan terbangnya ke arah rata-rata keseluruhan burung
3. Akan memposisikan diri dengan rata-rata posisi burung yang lain dengan menjaga sehingga jarak antar burung dalam kawanan itu tidak terlalu jauh

Dengan demikian perilaku kawanan burung akan didasarkan pada kombinasi dari 3 faktor simpel berikut:
1. Kohesi - terbang bersama
2. Separasi - jangan terlalu dekat
3. Penyesuaian(alignment) - mengikuti arah bersama

Jadi PSO dikembangkan dengan berdasarkan pada model berikut:
1. Ketika seekor burung mendekati target atau makanan (atau bisa mnimum atau maximum suatu fungsi tujuan) secara cepat mengirim informasi kepada burung-burung yang lain dalam kawanan tertentu
2. Burung yang lain akan mengikuti arah menuju ke makanan tetapi tidak secara langsung
3. Ada komponen yang tergantung pada pikiran setiap burung, yaitu memorinya tentang apa yang sudah dilewati pada waktu sebelumnya.

Model ini akan disimulasikan dalam ruang dengan dimensi tertentu dengan sejumlah iterasi sehingga di setiap iterasi, posisi partikel akan semakin mengarah ke target yang dituju (minimasi atau maksimasi fungsi). Ini dilakukan hingga maksimum iterasi dicapai atau bisa juga digunakan kriteria penghentian yang lain.

II. Implementasi

Berikut ini adalah contoh implementasi algoritma PSO dalam JAVA :

Misal fungsi yang harus diminimalkan adalah sebagai berikut:

$ latex f (x, y) = (2,8125-x + xy ^ 4) ^ 2 + (2,25-x + xy ^ 2) ^ 2 + (1,5-x + xy) ^ 2 $
Dengan kendala berikut:  $ latex 1 <= x <= 4; -1 <= y <= 1 $

Untuk mengatasi masalah tersebut dengan menggunakan PSO, kita akan membutuhkan kelas-kelas:
Posisi                     : untuk mewakili bagian Posisi partikel
Kecepatan          : untuk mewakili bagian Kecepatan partikel
Partikel                 : partikel itu sendiri
SimplePSO          : kontrol utama dari program ini
PSOConstants   : sebuah antarmuka untuk menentukan parameter yang digunakan dalam PSO

Kita harus menyediakan dua-dimensi posisi dan kecepatan.

>> Untuk Posisi (Position):

public class Position {
private double x;
private double y;

public Position(double x, double y) {
this.x = x;
this.y = y;
}

public double getX() {
return x;
}

public void setX(double x) {
this.x = x;
}

public double getY() {
return y;
}

public void setY(double y) {
this.y = y;
}
}

>> Untuk Kecepatan (Velocity)

public class Velocity {
private double x;
private double y;

public Velocity(double x, double y) {
this.x = x;
this.y = y;
}

public double getX() {
return x;
}

public void setX(double x) {
this.x = x;
}

public double getY() {
return y;
}

public void setY(double y) {
this.y = y;
}
}
>> Untuk Partikel

public class Particle {
private Position location;
private Velocity velocity;
private double fitness;

public double getFitness() {
calculateFitness();
return fitness;
}

public void calculateFitness() {
double x = this.location.getX();
double y = this.location.getY();

fitness = Math.pow((2.8125 - x + x * Math.pow(y, 4)), 2) +
Math.pow((2.25 - x + x * Math.pow(y, 2)), 2) +
Math.pow((1.5 - x + x * y), 2);
}

public Position getLocation() {
return location;
}

public void setLocation(Position location) {
this.location = location;
}

public Velocity getVelocity() {
return velocity;
}

public void setVelocity(Velocity velocity) {
this.velocity = velocity;
}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////

Perhatikan metode calculateFitness (), itu adalah tempat untuk menaruh evaluasi fungsi. Di kelas ini, kita akan membutuhkan beberapa metode:

  • initializeSwarm () = untuk menginisialisasi kawanan digunakan dalam metode
  • mengeksekusi () = bagian utama dari proses

>> Untuk Parsial

private void initializeSwarm() {
Particle p;
Random generator = new Random();

for (int i = 0; i < SWARM_SIZE; i++) {
p = new Particle();
double posX = generator.nextDouble() * 3.0 + 1.0;
double posY = generator.nextDouble() * 2.0 - 1.0;
p.setLocation(new Position(posX, posY));

double velX = generator.nextDouble() * 2.0 - 1.0;
double velY = generator.nextDouble() * 2.0 - 1.0;
p.setVelocity(new Velocity(velX, velY));

swarm.add(p);
}
}

public void execute() {
Random generator = new Random();
initializeSwarm();

evolutionaryStateEstimation();

int t = 0;
double w;

while (t < MAX_ITERATION) {
// calculate corresponding f(i,t) corresponding to location x(i,t)
calculateAllFitness();

// update pBest
if (t == 0) {
for (int i = 0; i < SWARM_SIZE; i++) {
pBest[i] = fitnessList[i];
pBestLoc.add(swarm.get(i).getLocation());
}
} else {
for (int i = 0; i < SWARM_SIZE; i++) {
if (fitnessList[i] < pBest[i]) {
pBest[i] = fitnessList[i];
pBestLoc.set(i, swarm.get(i).getLocation());
}
}
}

int bestIndex = getBestParticle();
// update gBest
if (t == 0 || fitnessList[bestIndex] < gBest) {
gBest = fitnessList[bestIndex];
gBestLoc = swarm.get(bestIndex).getLocation();
}

w = W_UP - (((double) t) / MAX_ITERATION) * (W_UP - W_LO);

for (int i = 0; i < SWARM_SIZE; i++) {
// update particle Velocity
double r1 = generator.nextDouble();
double r2 = generator.nextDouble();
double lx = swarm.get(i).getLocation().getX();
double ly = swarm.get(i).getLocation().getY();
double vx = swarm.get(i).getVelocity().getX();
double vy = swarm.get(i).getVelocity().getY();
double pBestX = pBestLoc.get(i).getX();
double pBestY = pBestLoc.get(i).getY();
double gBestX = gBestLoc.getX();
double gBestY = gBestLoc.getY();

double newVelX = (w * vx) + (r1 * C1) * (pBestX - lx) + (r2 * C2) * (gBestX - lx);
double newVelY = (w * vy) + (r1 * C1) * (pBestY - ly) + (r2 * C2) * (gBestY - ly);
swarm.get(i).setVelocity(new Velocity(newVelX, newVelY));

// update particle Location
double newPosX = lx + newVelX;
double newPosY = ly + newVelY;
swarm.get(i).setLocation(new Position(newPosX, newPosY));
}

t++;
}
}
}

>> Antarmuka untuk menyimpan konstanta

public interface PSOConstans {
int SWARM_SIZE = 30;
int DIMENSION = 2;
int MAX_ITERATION = 300;
double C1 = 2.0;
double C2 = 2.0;
double W_UP = 1.0;
double W_LO = 0.0;
}











>> Hasil setelah program dijalankan
Seperti yang bisa kita lihat dari hasilnya, program menemukan solusi dari masalah untuk (x = 3.0 dan y = 0,5) pada iterasi ke 244.