09e0067

87
PENGENALAN POLA ANGKA DENGAN MENGGUNAKAN ALGORITMA HOPFIELD SKRIPSI ZULKARNAIN HARUN NIM : 041421008 DEPARTEMEN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA MEDAN 2008 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Upload: ferry-hartono

Post on 30-Apr-2017

216 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 09E0067

PENGENALAN POLA ANGKA DENGAN MENGGUNAKAN

ALGORITMA HOPFIELD

SKRIPSI

ZULKARNAIN HARUN

NIM : 041421008

DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SUMATERA UTARA

MEDAN

2008

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 2: 09E0067

PENGENALAN POLA ANGKA DENGAN MENGGUNAKAN ALGORITMA

HOPFIELD

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Sains

ZULKARNAIN HARUN

041421008

DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SUMATERA UTARA

MEDAN

2008

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 3: 09E0067

i

ABSTRAK

Kajian tentang pengenalan pola telah banyak digunakan dalam pencarian kata-kata

maupun angka dalam dokumen dengan jumlah volume yang besar, kemudian

penyortiran secara otomatis surat-surat pos, serta kemudahan dalam pengeditan

dokumen-dokumen yang telah dicetak. Pada skripsi ini dibahas pengenalan pola angka

dengan menggunakan algoritma Hopfield, mengenai algoritma serta implementasinya

ke dalam program komputer. Hasil pengenalan ditampilkan dalam bentuk java applet.

Dari proses pengenalan diperoleh bahwa algoritma Hopfield dapat mengenali pola

angka dari 0 sampai 9, namun setelah diuji dengan pola yang memiliki bentuk hampir

sama, diperoleh hasil pengenalan yang belum konsisten.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 4: 09E0067

ii

NUMERIC PATTERN RECOGNITION USING HOPFIELD ALGORITHM

ABSTRACT

Studies of pattern recognition have been used abilities such as searching for words or

numbers in large volumes of documents, then automatic posting of postal mail, and

convenient editing of previously printed documents. This paper discusses numeric

pattern recognition using Hopfield algorithm, about the algorithm and its

implementation in computer program. Results of recognition are shown with java

applet. Result of recognition shows that Hopfield algorithm can recognize numeric

pattern from 0 to 9, but after testing patterns with almost identical shape, there were

inconsistency in recognitions.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 5: 09E0067

iii

DAFTAR ISI

Hal

ABSTRAK i

DAFTAR ISI iii

DAFTAR GAMBAR v

DAFTAR TABEL vii

BAB I Pendahuluan

1.1 Latar Belakang 1

1.2 Rumusan Masalah 3

1.3 Batasan Masalah 3

1.4 Tujuan Penelitian 3

1.5 Kontribusi Penelitian 3

1.6 Metode Penelitian 4

1.7 Tinjauan Pustaka 4

BAB II Landasan Teori

2.1 Pengertian Umum Jaringan Syaraf Tiruan 5

2.1.1 Sejarah Jaringan Syaraf Tiruan 6

2.1.2 Konsep Dasar Jaringan Syaraf Tiruan 6

2.1.3 Definisi Jaringan Syaraf Tiruan 8

2.1.4 Karakteristik Jaringan Syaraf Tiruan 10

2.1.5 Kelebihan Jaringan Syaraf Tiruan 10

2.2 Model Neuron 12

2.2.1 Single-Layer Neural Network 13

2.2.2 Multilayer Perceptron Neural Network 14

2.2.3 Recurrent Neural Network 15

2.3 Proses Pembelajaran pada Jaringan Syaraf Tiruan 15

2.3.1 Supervised Learning 16

2.3.2 Unsupervised Learning 16

2.4 Model Jaringan Hopfield 16

2.5.1 Input (Masukan) 17

2.5.2 Proses Pembelajaran 19

2.5.3 Proses Perhitungan Saat Pembelajaran 20

2.5.4 Output (Keluaran) 20

2.6 Algoritma Hopfield 20

2.7 Flowchart Algoritma Hopfield 26

BAB III Analisis dan Perancangan Aplikasi

3.1 Analisis Kebutuhan 27

3.2 Aplikasi Algoritma Hopfield 28

3.3 Kondisi Konvergen 31

3.4 Rancangan Tampilan 31

3.5 Rancangan Masukan dan Keluaran 32

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 6: 09E0067

iv

3.5.1 Rancangan Masukan 32

3.5.2 Rancangan Keluaran 33

3.6 Analisis Kebutuhan Perangkat Keras 33

BAB IV Pembahasan

4.1 Perangkat Lunak 34

4.2 Struktur Data 35

4.3 Pengenalan Pola dengan Matlab 36

4.4 Aplikasi Algoritma ke dalam Program Java 38

BAB V Kesimpulan dan Saran

4.1 Kesimpulan 50

4.2 Saran 50

DAFTAR PUSTAKA 51

LAMPIRAN

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 7: 09E0067

v

DAFTAR GAMBAR

Hal

Gambar 1. Bentuk dasar neuron jaringan syaraf 5

Gambar 2. Arsitektur dasar Jaringan Syaraf Tiruan 13

Gambar 3. Single Layer Neural Network 13

Gambar 4. Multilayer Perceptron Neural Network 14

Gambar 5. Recurrent Neural Network 15

Gambar 6. Sekumpulan titik membentuk pola x pada bidang gambar 18

Gambar 7. Flowchart Algoritma Hopfield 26

Gambar 8. Struktur Jaringan Hopfield 26

Gambar 9. Rancangan Tampilan Program Applet Pada Browser 32

Gambar 10. Pola aplikasi algoritma Hopfield untuk mengenali pola pada Matlab 36

Gambar 11. Pola angka 3 yang diacak 36

Gambar 12. Pola angka pada iterasi ke-10 37

Gambar 13. Pola angka pada iterasi ke-30 37

Gambar 14. Pola angka pada iterasi ke-45 38

Gambar 15. Contoh pola angka satu pada bidang gambar yang akan dipelajari

komputer 38

Gambar 16. Pola angka 1 yang akan dikenali komputer 39

Gambar 17. Pola angka 0 43

Gambar 18. Pola angka 1 43

Gambar 19. Pola angka 2 43

Gambar 20. Pola angka 3 44

Gambar 21. Pola angka 4 44

Gambar 22. Pola angka 5 44

Gambar 23. Pola angka 6 45

Gambar 24. Pola angka 7 45

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 8: 09E0067

vi

Gambar 25. Pola angka 8 45

Gambar 26. Pola angka 9 46

Gambar 27. Pola angka yang telah diacak 46

Gambar 28. Pola yang telah dikenali oleh program 47

Gambar 29. Pola angka 0 yang diacak mendekati bentuk angka 8 47

Gambar 30. Pola yang dikenali sebagai angka 8 48

Gambar 31. Pola angka 1 yang telah diacak 48

Gambar 32. Pola angka acak yang dikenali sebagai angka 1 49

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 9: 09E0067

vii

DAFTAR TABEL

TABEL JUDUL HAL

1 Koneksi pada jaringan syaraf Hopfield 23

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 10: 09E0067

1

BAB 1

PENDAHULUAN

1.1 Latar Belakang

Artificial Intelligence (Kecerdasan Buatan) adalah salah satu bidang dalam ilmu

komputer yang membuat agar mesin (komputer) dapat mengerjakan hal-hal menuntut

kecerdasan. Penelitian mengenai Kecerdasan Buatan adalah suatu usaha untuk

menemukan dan menjabarkan aspek-aspek dari kecerdasan manusia yang dapat

disimulasikan oleh mesin. Sebagai contoh, pada saat ini terdapat mesin-mesin yang

dapat melakukan hal-hal sebagai berikut:

1. Memainkan permainan yang membutuhkan strategi (seperti permainan catur,

kartu) dan belajar untuk bermain lebih baik dari lawannya (dalam hal ini

manusia).

2. Belajar untuk mengenali pola-pola visual atau suara.

3. Menemukan bukti-bukti untuk teorema matematika.

4. Menyelesaikan beragam bentuk permasalahan yang diformulasikan

sedemikian rupa.

5. Memroses informasi-informasi yang diekspresikan dalam bahasa manusia.

Kemampuan mesin dalam melakukan hal-hal independen semacam ini seperti

manusia masih terbatas; mesin-mesin menunjukkan perilaku hanya dengan tingkat

kecerdasan mendasar. Namun demikian, ada kemungkinan-kemungkinan bahwa

mesin dapat dikembangkan untuk menunjukkan kecerdasan yang sebanding dengan

manusia, atau bahkan melebihi manusia (Jackson, Philip C., 1949).

Dengan kata lain, penelitian Kecerdasan Buatan dapat dilihat sebagai suatu

usaha mengembangkan teori matematis untuk menjabarkan kemampuan-kemampuan

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 11: 09E0067

2

dan tindakan-tindakan (baik yang natural atau buatan manusia) yang menunjukkan

suatu kecerdasan.

Salah satu pengembangan lebih lanjut dari Kecerdasan Buatan adalah Artificial

Neural Network (Jaringan Syaraf Tiruan disingkat JST). Jaringan Syaraf Tiruan

adalah salah satu representasi buatan dari otak manusia yang selalu mencoba untuk

mensimulasikan proses pembelajaran pada otak manusia tersebut. Istilah buatan

digunakan karena jaringan syaraf ini diimplementasikan dengan menggunakan

program komputer yang mampu menyelesaikan sejumlah proses perhitungan selama

proses pembelajaran.

Ada beberapa tipe jaringan syaraf, namun hampir semuanya memiliki

komponen-komponen yang sama. Seperti otak manusia, jaringan syaraf juga terdiri

dari beberapa neuron yang saling terhubung. Neuron-neuron tersebut akan

mentransformasikan informasi yang diterima melalui sambungan keluarnya menuju

neuron-neuron yang lain. Pada jaringan syaraf hubungan ini dikenal dengan nama

bobot. Informasi yang diterima, disimpan pada suatu nilai tertentu pada bobot tersebut

(Kusumadewi, 2003).

Model Jaringan Neural ditunjukkan dengan kemampuannya dalam emulasi,

analisa, prediksi, dan asosiasi. Berdasarkan kemampuan yang dimiliki, Artificial

Neural Network dapat digunakan untuk belajar dan menghasilkan aturan, atau operasi

dari beberapa contoh, untuk menghasilkan output yang diinginkan dari contoh input

yang dimasukkan, dan membuat prediksi tentang kemungkinan output yang akan

muncul atau menyimpan karakteristik dari input yang disimpan.

Komputerisasi Artificial Neural Network dapat dilakukan dengan

menggunakan berbagai algoritma yang akan diterjemahkan ke kode program

kemudian di compile menggunakan compiler dan selanjutnya diterjemahkan ke bahasa

instruksi mesin. Penggunaan algoritma untuk menyelesaikan proses komputerisasi

suatu permasalahan akan sangat membantu.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 12: 09E0067

3

1.2 Rumusan Masalah

Permasalahan dalam tulisan ini adalah bagaimana komputer dapat mengenali serta

membandingkan pola angka dalam bentuk grafis yang telah diinput, dengan

menggunakan algoritma Hopfield.

1.3 Batasan Masalah

Dalam penelitian ini penulis membuat batasan lingkup tentang bagaimana algoritma

tersebut diimplementasikan untuk mengenali pola angka.

Batasan implementasi algoritma Hopfield sebagai berikut:

1. Penggambaran pola angka menggunakan tetikus.

2. Output yang diperoleh ditampilkan dengan Matlab dan Java Applet.

3. Program dibuat dengan bahasa Java.

1.4 Tujuan Penelitian

Tujuan dari penulisan tugas akhir ini adalah bagaimana algoritma Hopfield dapat

mengenali pola angka dan bagaimana komputer dapat belajar mengenal dan

membandingkan pola angka.

1.5 Kontribusi Penelitian

Dengan mengimplementasikan algoritma Hopfield dalam Artificial Neural Network

untuk pengenalan pola angka dapat bermanfaat dalam pengembangan Artificial

Neural Network lebih lanjut dengan penerapan komputerisasi dalam bidang simulasi

pengenalan lainnya.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 13: 09E0067

4

1.6 Metode Penelitian

Adapun metode penelitian yang penulis gunakan adalah sebagai berikut:

1. Studi pustaka tentang algoritma Hopfield.

2. Menganalisa Algoritma Hopfield dalam pengenalan pola angka.

3. Mengimplementasikan algoritma Hopfield dalam program komputer.

4. Mengambil kesimpulan dari hasil yang diperoleh.

1.7 Tinjauan Pustaka

Sri Kusumadewi dalam bukunya Artificial Intelligence (Teknik dan Aplikasinya),

menjelaskan tentang berbagai macam tipe jaringan syaraf tiruan serta aplikasinya yang

diantaranya adalah pengenalan pola.

Dan Morris dalam artikelnya pada http://techhouse.brown.edu/dmorris/JOHN/

StinterNet.html membahas tentang pengenalan pola dengan menggabungkan beberapa

algoritma jaringan syaraf tiruan serta menampilkannya ke dalam java applet. Dan

Morris juga membahas beberapa kekurangan pada algoritma jaringan syaraf tiruan

yang ada sekarang ini.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 14: 09E0067

5

BAB 2

LANDASAN TEORI

2.1. Pengertian Umum Jaringan Syaraf Tiruan

Jaringan Syaraf Tiruan (JST) adalah suatu jaringan dari sekelompok unit pemroses

yang melakukan pendistribusian secara besar-besaran dan dimodelkan berdasarkan

jaringan syaraf manusia, yang memiliki kecenderungan alami untuk menyimpan suatu

pengenalan yang pernah dialaminya. Dengan kata lain JST memiliki kemampuan

untuk dapat melakukan pembelajaran dan pendeteksian terhadap sesuatu pola.

Secara mendasar, sistem pembelajaran merupakan proses penambahan

pengetahuan pada JST yang sifatnya kontinu sehingga pada saat digunakan

pengetahuan tersebut akan dieksploitasi secara maksimal dalam mengenali suatu pola.

Neuron adalah bagian dasar dari pemrosesan suatu jaringan syaraf. Di bawah ini

merupakan bentuk dasar dari suatu neuron[1].

Gambar 1. Bentuk dasar neuron jaringan syaraf

Output

Input

dari

neuron-

neuron

yang

lain

Output

dari

neuron-

neuron

yang

lain

Weight Weight

Fungsi aktivasi

Processing Unit

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 15: 09E0067

6

1. Input merupakan masukan yang digunakan baik saat pembelajaran maupun

dalam mengenali suatu pola.

2. Weight, beban yang selalu berubah setiap kali diberikan input sebagai proses

pembelajaran.

3. Processing Unit merupakan tempat berlangsungnya proses pengenalan suatu

pola berdasarkan pembebanan yang diberikan.

4. Output, keluaran dari hasil pengenalan suatu pola.

2.1.1 Sejarah Jaringan Syaraf Tiruan

Saat ini bidang kecerdasan buatan dalam usahanya menirukan intelegensi manusia,

belum mengadakan pendekatan dalam bentuk fisiknya melainkan dari sisi yang lain.

Pertama-tama diadakan studi mengenai teori dasar mekanisme proses terjadinya

intelegensi. Bidang ini disebut „Cognitive Science‟. Dari teori dasar ini dibuatlah suatu

model untuk disimulasikan pada komputer, dan dalam perkembangannya yang lebih

lanjut dikenal berbagai sistem kecerdasan buatan yang salah satunya adalah jaringan

syaraf tiruan. Dibandingkan dengan bidang ilmu yang lain, jaringan syaraf tiruan

relatif masih baru. Sejumlah literatur menganggap bahwa konsep jaringan syaraf

tiruan bermula pada makalah Waffen McCulloch dan Walter Pitts pada tahun 1943.

Dalam makalah tersebut mereka mencoba untuk memformulasikan model matematis

sel-sel otak. Metode yang dikembangkan berdasarkan sistem syaraf biologi ini,

merupakan suatu langkah maju dalam industri komputer.[ Hermawan, Arief, 2006]

2.1.2 Konsep Dasar Jaringan Syaraf Tiruan

Tidak ada otak manusia yang sama antara satu dengan lainnya. Ada perbedaan dalam

ketajaman, ukuran dan pengorganisasiannya. Salah satu cara untuk memahami cara

otak bekerja adalah dengan mengumpulkan informasi dari sebanyak mungkin scan

otak manusia dan memetakannya. Hal tersebut merupakan upaya untuk menemukan

cara kerja rata-rata otak manusia itu. Peta otak manusia diharapkan dapat menjelaskan

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 16: 09E0067

7

misteri mengenai cara otak mengendalikan setiap tindak-tanduk manusia, mulai dari

penggunaan bahasa hingga gerakan.

Walaupun demikian kepastian cara kerja otak manusia masih merupakan suatu

misteri. Meski beberapa aspek dari prosesor yang menakjubkan ini telah diketahui

tetapi itu tidaklah banyak. Beberapa aspek-aspek tersebut, yaitu:

a. Tiap bagian pada otak manusia memiliki alamat, dalam bentuk formula kimia, dan

sistem syaraf manusia berusaha untuk mendapatkan alamat yang cocok untuk setiap

akson (syaraf penghubung) yang dibentuk.

b. Melalui pembelajaran, pengalaman dan interaksi antara sistem struktur dari otak itu

sendiri akan mengatur fungsi-fungsi dari setiap bagiannya.

c. Akson-akson pada daerah yang berdekatan akan berkembang dan mempunyai

bentuk fisik mirip, sehingga terkelompok dengan arsitektur tertentu pada otak.

d. Akson berdasarkan arsitekturnya bertumbuh dalam urutan waktu, dan terhubung

pada struktur otak yang berkembang dengan urutan waktu yang sama.

Berdasarkan ke empat aspek tersebut di atas dapat ditarik suatu kesimpulan

bahwa otak tidak seluruhnya terbentuk oleh proses genetis. Terdapat proses lain yang

ikut membentuk fungsi dari bagian-bagian otak, yang pada akhirnya menentukan

suatu informasi diproses oleh otak.

Elemen yang paling mendasar dari jaringan syaraf adalah sel syaraf. Sel-sel

syaraf inilah membentuk bagian kesadaran manusia yang meliputi beberapa

kemampuan umum. Pada dasarnya sel syaraf biologi menerima masukan dari sumber

yang lain dan mengkombinasikannya dengan beberapa cara, melaksanakan suatu

operasi yang non-linear untuk mendapatkan hasil dan kemudian mengeluarkan hasil

akhir tersebut.

Dalam tubuh manusia terdapat banyak variasi tipe dasar sel syaraf, sehingga

proses berpikir manusia menjadi sulit untuk direplikasi secara elektrik. Sekalipun

demikian, semua sel syaraf alami mempunyai empat komponen dasar yang sama.

Keempat komponen dasar ini diketahui berdasarkan nama biologinya yaitu, dendrit,

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 17: 09E0067

8

soma, akson, dan sinapsis. Dendrit merupakan suatu perluasan dari soma yang

menyerupai rambut dan bertindak sebagai saluran masukan. Saluran masukan ini

menerima masukan dari sel syaraf lainnya melalui sinapsis. Soma dalam hal ini

kemudian memproses nilai masukan menjadi sebuah output yang kemudian dikirim ke

sel syaraf lainnya melalui akson dan sinapsis.

Penelitian terbaru memberikan bukti lebih lanjut bahwa sel syaraf biologi mempunyai

struktur yang lebih kompleks dan lebih canggih daripada sel syaraf buatan yang

kemudian dibentuk menjadi jaringan syaraf buatan yang ada sekarang ini. Ilmu biologi

menyediakan suatu pemahaman yang lebih baik tentang sel syaraf sehingga

memberikan keuntungan kepada para perancang jaringan untuk dapat terus

meningkatkan sistem jaringan syaraf buatan yang ada berdasarkan pada pemahaman

terhadap otak biologi.

Sel syaraf-sel syaraf ini terhubung satu dengan yang lainnya melalui sinapsis. Sel

syaraf dapat menerima rangsangan berupa sinyal elektrokimiawi dari sel syaraf-sel

syaraf yang lain. Berdasarkan rangsangan tersebut, sel syaraf akan mengirimkan

sinyal atau tidak berdasarkan kondisi tertentu. Konsep dasar semacam inilah yang

ingin dicoba para ahli dalam menciptakan sel tiruan.[ Kristanto, Andri, 2004]

2.1.3 Defenisi Jaringan Syaraf Tiruan

Suatu jaringan syaraf tiruan memproses sejumlah besar informasi secara paralel dan

terdistribusi, hal ini terinspirasi oleh model kerja otak biologis. Beberapa definisi

tentang jaringan syaraf tiruan adalah sebagai berikut di bawah ini.

Hecht-Nielsend (1988) mendefinisikan sistem syaraf buatan sebagai berikut:

"Suatu neural network (NN), adalah suatu struktur pemroses informasi yang

terdistribusi dan bekerja secara paralel, yang terdiri atas elemen pemroses (yang

memiliki memori lokal dan beroperasi dengan informasi lokal) yang diinterkoneksi

bersama dengan alur sinyal searah yang disebut koneksi. Setiap elemen pemroses

memiliki koneksi keluaran tunggal yang bercabang (fan out) ke sejumlah koneksi

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 18: 09E0067

9

kolateral yang diinginkan (setiap koneksi membawa sinyal yang sama dari keluaran

elemen pemroses tersebut). Keluaran dari elemen pemroses tersebut dapat merupakan

sebarang jenis persamaan matematis yang diinginkan. Seluruh proses yang

berlangsung pada setiap elemen pemroses harus benar-benar dilakukan secara lokal,

yaitu keluaran hanya bergantung pada nilai masukan pada saat itu yang diperoleh

melalui koneksi dan nilai yang tersimpan dalam memori lokal".

Menurut Haykin, S. (1994), Neural Networks: A Comprehensive Foundation, NY,

Macmillan, mendefinisikan jaringan syaraf sebagai berikut:

“Sebuah jaringan syaraf adalah sebuah prosesor yang terdistribusi paralel dan

mempuyai kecenderungan untuk menyimpan pengetahuan yang didapatkannya dari

pengalaman dan membuatnya tetap tersedia untuk digunakan. Hal ini menyerupai

kerja otak dalam 2 (dua) hal yaitu: 1. Pengetahuan diperoleh oleh jaringan melalui

suatu proses belajar. 2. Kekuatan hubungan antar sel syaraf yang dikenal dengan

bobot sinapsis digunakan untuk menyimpan pengetahuan.

Menurut Zurada, J.M. (1992), Introduction To Artificial Neural Systems, Boston:

PWS Publishing Company, mendefinisikan sebagai berikut:

“Sistem syaraf tiruan atau jaringan syaraf tiruan adalah sistem selular fisik yang dapat

memperoleh, menyimpan dan menggunakan pengetahuan yang didapatkan dari

pengalaman”.

DARPA Neural Network Study (1988, AFCEA International Press, p. 60)

mendefinisikan jaringan syaraf buatan sebagai berikut:

Sebuah jaringan syaraf adalah sebuah sistem yang dibentuk dari sejumlah elemen

pemroses sederhana yang bekerja secara paralel di mana fungsinya ditentukan oleh

struktur jaringan, kekuatan hubungan, dan pengolahan dilakukan pada komputasi

elemen atau node.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 19: 09E0067

10

2.1.4 Karakteristik Jaringan Syaraf Tiruan

Jaringan syaraf tiruan di defenisikan sebagai sistem pemrosesan informasi yang

mempunyai karakteristik menyerupai jaringan syaraf manusia. Jaringan syaraf tiruan

tercipta sebagai suatu generalisasi model matematis dari pemahaman manusia (human

cognition) yang didasarkan atas asumsi sebagai berikut:

1. Pemrosesan informasi terjadi pada elemen sederhana yang disebut neuron.

2. Isyarat mengalir di antara sel syaraf (neuron) melalui suatu sambungan

penghubung.

3. Setiap sambungan penghubung memiliki bobot yang bersesuaian. Bobot

ini akan digunakan untuk menggandakan/mengalikan isyarat yang dikirim

melaluinya.

4. Setiap sel syaraf akan menerapkan fungsi aktivasi terhadap isyarat hasil

penjumlahan berbobot yang masuk kepadanya untuk menentukan isyarat

keluarannya.

Karakteristik jaringan syaraf tiruan ditentukan oleh:

1. Pola hubungan antar neuron (disebut dengan arsitektur jaringan)

2. Metode penentuan bobot-bobot sambungan (disebut dengan pelatihan atau

proses belajar jaringan)

3. Fungsi aktivasi.[ Hermawan, Arief, 2006]

2.1.5 Kelebihan Jaringan Syaraf Tiruan

Sistem jaringan syaraf tiruan disebut juga brain metaphor, computational

neuroscience atau parallel distributed processing serta connection. Jaringan syaraf

tiruan tersusun dari sejumlah besar elemen yang melakukan kegiatan analog dengan

fungsi-fungsi biologis neuron yang paling elementer. Elemen–elemen ini terorganisasi

sebagaimana layaknya anatomi otak, walaupun tidak persis. Jaringan syaraf tiruan

dapat belajar dari pengalaman, melakukan generalisasi atas contoh–contoh yang

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 20: 09E0067

11

diperoleh dan mengabstraksi karakteristik essensial input bahkan untuk data yang

tidak relevan.

Jaringan syaraf tiruan memiliki sejumlah besar kelebihan dibandingkan dengan

metode perhitungan lainnya, yaitu:

1. Kemampuan mengakusisi pengetahuan walaupun dalam kondisi ada

gangguan dan ketidakpastian. Hal ini karena jaringan syaraf tiruan mampu

melakukan generalisasi, abstraksi, dan ekstraksi terhadap property statistic

dari data.

2. Kemampuan merepresentasikan pengetahuan secara fleksibel. Jaringan

syaraf tiruan dapat menciptakan sendiri representasi melalui pengaturan

diri sendiri atau kemampuan belajar (Self Organizing).

3. Kemampuan untuk memberikan toleransi atas suatu distorsi (error/fault),

dimana gangguan kecil pada data dapat dianggap hanya sebagai noise

(guncangan) belaka.

4. Kemampuan memproses pengetahuan secara efisien karena memakai

ssstem parallel, sehingga waktu yang diperlukan untuk mengoperasikan

menjadi lebih singkat.

Sedangkan keuntungan penggunaan Jaringan Syaraf Tiruan dalam hal

pengenalan pola:

1. Perangkat yang mampu untuk mengenali suatu pola secara non-linier.

2. Mempermudah pemetaan input menjadi suatu hasil tanpa mengetahui proses

sebenarnya.

3. Mampu melakukan pengadaptasian terhadap pengenalan suatu pola

4. Perangkat yang memiliki toleransi terhadap suatu kesalahan dalam pengenalan

suatu pola.

5. Neural Network mampu diimplementasikan pada suatu Hardware atau

perangkat keras.

6. Perangkat yang mampu diimplementasikan secara parallel.

Dengan tingkat kemampuan yang sangat baik, beberapa aplikasi jaringan

syaraf tiruan sangat cocok untuk diterapkan pada:

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 21: 09E0067

12

1. Klasifkasi, memilih suatu input data kedalam satu kategori tertentu yang

diterapkan.

2. Asosiasi, menggambarkan suatu objek secara keseluruhan hanya dengan

sebuah bagian dari objek lain.

3. Self Organizing, kemampuan untuk mengelola data input tanpa harus

memiliki data sebagai target.

4. Optimasi, menemukan suatu jawaban atau solusi yang paling baik sehingga

seringkali dengan meminimalisasikan suatu fungsi biaya (optimizer).

(Hermawan, Arief, 2006)

2.2 Model Neuron

Neuron adalah unit pemroses informasi yang menjadi dasar dalam pengoperasian

jaringan syaraf tiruan. Neuron terdiri dari 3 (tiga) elemen pembentuk:

1. Himpunan unit-unit yang dihubungkan dengan jalur koneksi. Jalur-jalur

tersebut memiliki bobot/kekuatan yang berbeda-beda. Bobot yang bernilai

positif akan memperkuat sinyal dan yang bernilai negatif akan

memperlemah sinyal yang dibawanya. Jumlah, struktur dan pola hubungan

antar unit-unit tersebut akan menentukan arsitektur jaringan (dan juga

model jaringan yang dibentuk).

2. Suatu unit penjumlah yang akan menjumlahkan input-input sinyal yang

sudah dikalikan dengan bobotnya.

Misalkan x1,x2, .. , xm adalah unit-unit input dan wj1, wj2, ... , wjm adalah bobot

penghubung dari unit-unit tersebut ke unit keluaran Yj, dengan demikian unit

penjumlah akan memberikan keluaran sebesar uj = xjwj1 + x2wj2 + ... + xmwjm

3. Fungsi aktivasi yang akan menentukan apakah sinyal dari input neuron

akan diteruskan ke neuron lain atau tidak.(Siang, Jong Jek, 2005)

Bentuk dasar arsitektur suatu neural network adalah sebagai berikut:

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 22: 09E0067

13

Gambar 2. Arsitektur dasar Jaringan Syaraf Tiruan

Secara umum, terdapat 3 (tiga) jenis jaringan syaraf yang sering digunakan

berdasarkan jenis jaringannya (network), yaitu:

1. Single-Layer Neural Network

2. Multilayer Perceptron Neural Network

3. Recurrent Neural Networks

2.2.1 Single-Layer Neural Network

Neural network jenis ini memiliki koneksi pada inputnya secara langsung ke jaringan

output.

Gambar 3. Single Layer Neural Network

Jenis neural network ini sangatlah terbatas, hanya digunakan pada kasus-kasus yang

sederhana.

Input Output

p(1)

p(2)

p(R)

a(1)

a(S)

b(1)

w(S,R)

Input Output

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 23: 09E0067

14

2.2.2 Multilayer Perceptron Neural Network

Jenis neural network ini memiliki layer (lapisan) yang dinamakan “hidden”, ditengah

layer input dan output. Hidden ini bersifat berubah-ubah, dapat digunakan lebih dari

satu hidden layer.

Gambar 4. Multilayer Perceptron Neural Network

Input Output Hidden

p(1)

p(2)

p(R)

a2(1)

a2(S2)

a1(1)

a1(S1)

b1(1) b2(1)

w(S1,R) w(S2,S1)

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 24: 09E0067

15

2.2.3 Recurrent Neural Network

Neural network jenis ini memiliki ciri, yaitu adanya koneksi umpan balik dari output

ke input.

Gambar 5. Recurrent Neural Network

Salah satu yang termasuk dalam jenis network ini adalah Hopfield Network.

2.3. Proses Pembelajaran pada Jaringan Syaraf Tiruan

Proses pembelajaran merupakan suatu metoda untuk proses pengenalan suatu pola

yang sifatnya kontinu yang selalu direspon secara berbeda dari setiap proses

pembelajaran tersebut. Tujuan dari pembelajaran ini sebenarnya untuk memperkecil

tingkat suatu error (kesalahan) dalam pengenalan suatu pola. Secara mendasar,

jaringan syaraf tiruan memiliki sistem pembelajaran yang terdiri atas beberapa jenis

berikut:

1. Supervised Learning

2. Unsupervised Learning

Input Output

p(1)

p(2)

p(R) w(S,R)

b(1)

a(1)

a(S)

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 25: 09E0067

16

2.3.1. Supervised Learning

Sistem pembelajaran pada metoda Supervised Learning adalah sistem pembelajaran

yang mana, setiap pengetahuan yang akan diberikan kepada sistem, pada awalnya

diberikan suatu acuan untuk memetakan suatu masukan menjadi suatu keluaran yang

diinginkan. Proses pembelajaran ini akan terus dilakukan selama kondisi kesalahan

atau kondisi yang diinginkan belum tercapai. Adapun setiap perolehan kesalahan akan

dikalkulasikan untuk setiap pemrosesan hingga data atau nilai yang diinginkan telah

tercapai.

2.3.2. Unsupervised Learning

Sistem pembelajaran pada jaringan syaraf tiruan, yang mana sistem ini memberikan

sepenuhnya pada hasil komputasi dari setiap pemrosesan, sehingga pada sistem ini

tidak membutuhkan adanya acuan awal agar perolehan nilai dapat dicapai. Meskipun

secara mendasar, proses ini tetap mengkalkulasikan setiap langkah pada setiap

kesalahannya dengan mengkalkulasikan setiap nilai bobot yang didapat.

2.4. Model Jaringan Hopfield

Algoritma Artificial Neural Network Hopfield diperkenalkan pada tahun 1982 di

California Institute of Technology. Dalam jaringan Hopfield semua neuron saling

berhubungan penuh. Neuron yang satu mengeluarkan output dan kemudian menjadi

input bagi semua neuron lain. Proses ini terus berulang sampai output yang diinginkan

tercapai.

Model Diskrit jaringan Hopfield dalam bobot sinaptiknya menggunakan vektor

biner dimensi n atau dapat dituliskan a{0,1}n. Model ini berisi n neural dan jaringan

terdiri dari n(n-1) interkoneksi dua jalur.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 26: 09E0067

17

Model Jaringan Hopfield secara matematis dapat disajikan dalam matriks

simetris NxN dengan diagonal utamanya bernilai 0. Pemberian nilai 0 pada diagonal

utama dimaksudkan agar setiap neuron tidak memberi input pada dirinya sendiri.

Dengan demikian jaringan Hopfield merupakan suatu jaringan dengan bobot simetrik,

bahwa:

wij = wji

dan

wii = 0.

Perubahan data pada jaringan terjadi secara asinkron (unit berubah satu persatu,

tergantung pada sinyal yang diterima). Perubahan yang terjadi memiliki sebuah fungsi

yang berguna untuk melihat apakah sebuah jaringan sudah dalam kondisi stabil.

Dalam hal ini Hopfield menggunakan fungsi Lyapunov. Jaringan dikatakan sudah

stabil jika terjadi konvergen pada aktivasi yang ada.

2.5.1. Input (Masukan)

Proses ini merupakan bagian dari sistem kerja secara keseluruhan, karena proses

masukan digunakan untuk menunjang pada proses pembelajaran serta proses

pengujian. Pada proses ini, masukan berupa grafis berupa piksel yang di

representasikan sebagai nilai logic atau bilangan biner (1 dan 0, atau dalam bentuk

bipolar menjadi 1 dan -1). Pola grafis kemudian diubah ke dalam bentuk matriks.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 27: 09E0067

18

Contoh bidang yang sudah diisi dengan pola x

Gambar 6. Sekumpulan titik membentuk pola x pada bidang gambar

Dari bidang tersebut diperoleh bentuk matriks yang bersesuaian:

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 1 0 0 0 0 1 0 0

0 0 0 1 0 0 1 0 0 0

0 0 0 0 1 1 0 0 0 0

0 0 0 0 1 1 0 0 0 0

0 0 0 1 0 0 1 0 0 0

0 0 1 0 0 0 0 1 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 28: 09E0067

19

Dari matriks di atas kemudian diubah ke dalam bentuk bipolar sehingga diperoleh:

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

-1 -1 1 -1 -1 -1 -1 1 -1 -1

-1 -1 -1 1 -1 -1 1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 1 -1 -1 1 -1 -1 -1

-1 -1 1 -1 -1 -1 -1 1 -1 -1

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

Matriks di atas kemudian diolah menjadi matriks bobot yang akan digunakan sebagai

media penyimpan pola, sekaligus menandakan dimulainya proses pembelajaran.

2.5.2. Proses Pembelajaran

Pada bagian ini merupakan sisi kelebihan dari metoda Jaringan Syaraf Tiruan, dimana

setiap permasalahan yang akan dihadapi dapat dipecahkan dengan melalui tahapan

pembelajaran, seperti halnya otak manusia yang secara sifat biologis, memiliki

kemampuan untuk mempelajari hal-hal yang baru. Memang pada dasarnya, jaringan

syaraf tiruan ini dibuat untuk dapat mempelajari sesuatu hal yang baru sehingga

mampu melakukan penganalisaan tanpa menggunakan suatu rumusan yang baku.

Proses pembelajaran ini sangat mempengaruhi sensitifitas kemampuan dalam

melakukan penganalisaan. Jika semakin banyak bahan atau masukan sebagai

pembelajaran, maka akan semakin mudah dan sensitif dalam melakukan analisa.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 29: 09E0067

20

2.5.3. Proses Perhitungan Saat Pembelajaran

Proses ini melibatkan 2 (dua) faktor penting, yaitu masukan dan keluaran yang

ditentukan. Keluaran tersebut merupakan bagian dari sistem atau metoda

pembelajaran yang dinamakan “Supervised Learning”, dengan demikian setiap

masukan memiliki keluaran yang nantinya akan dijadikan sebagai acuan pembelajaran.

Hal inilah yang membuat Neural Network melakukan penganalisaan, selain

banyaknya masukan yang diberikan, proses pembelajaran yang dilakukan secara

berulang pun akan menunjang kemampuan Neural Network saat menganalisa.

2.5.4. Output (Keluaran)

Bagian ini merupakan proses yang digunakan untuk mengetahui seberapa besar

pengaruh pembelajaran terhadap keluaran yang diinginkan. Jika hasil yang diinginkan

kurang sesuai, maka kemungkinan yang terjadi adalah:

Variabel masukan (informasi yang diberikan) kurang menunjang

Kurangnya layer pada rancangan keseluruhan

Jumlah neuron yang terlalu sedikit

Namun tidak menutup kemungkinan karena ketidaksesuaian penerapan saat proses

pembelajaran dilakukan juga dapat mempengaruhi proses pembelajaran.

2.6. Algoritma Hopfield

Terdapat beberapa versi algoritma dari jaringan Hopfield. Pada penjelasan pertama

Hopfield (1982) menggunakan input vektor biner. Untuk menyimpan suatu pola biner

S(p), p = 1,…, p, dimana

S(p) = (S1(p),…, Si(p), …, Sn(p)),

untuk matriks bobotnya W = {wij} diperoleh dengan

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 30: 09E0067

21

untuk i ≠ j

dan

Pada penjelasan lainnya Hopfield (1984) menggunakan input bipolar. Untuk

menyimpan pola bipolar, matriks bobot yang digunakan W = {wij}, diperoleh dengan

dan

Proses pembelajaran terjadi pada saat neuron yang saling terhubung aktif pada

saat yang bersamaan. Jika ini terjadi, maka nilai bobot harus berubah. Dalam proses

perubahan bobot Hopfield menggunakan aturan Hebb, yang mana:

Aplikasi dari algoritma jaringan Hopfield dapat dilihat:

Langkah 1. Inisialisasi bobot untuk menyimpan pola dengan menggunakan aturan

Hebb.

Jika aktivasi jaringan belum mencapai konvergen ulangi langkah 2 sampai 8.

Langkah 2. Untuk setiap input vektor x, lakukan langkah 3 sampai 7.

Langkah 3. Tentukan aktivasi awal jaringan sama dengan input eksternal

vektor x.

Langkah 4. Lakukan langkah 5 sampai 7 untuk setiap Yi, perubahan

unit adalah acak.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 31: 09E0067

22

Langkah 5. Hitung jaringan input:

Langkah 6. Tentukan aktivasi (sinyal output)

Untuk ambang, , biasanya bernilai nol.

Langkah 7. Masukkan nilai yi ke dalam unit-unit lainnya.

(terjadi perubahan vektor aktivasi).

Langkah 8. Uji apakah terjadi konvergensi

Analisa pada fungsi Lyapunov (biasa juga disebut sebagai fungsi energi) untuk

jaringan Hopfield adalah bagian penting yang akan menunjukkan bahwa telah terjadi

konvergensi, dimana sebelumnya bobot telah berubah secara asinkron dan nilai 0 pada

diagonalnya (Fausett, L, 1994).

Adapun Algoritma Hopfield dalam penerapan pola angka 0 sampai angka 9

adalah sebagai berikut:

1. Menciptakan vektor pola yang ke – p, yang merupakan himpunan n simpul untuk

pola yang ke- p.

S(p) = (S1(p), S2(p), …, Si(p), …, Sn(p))

Keterangan: P = Jumlah Pola Angka

2. Menciptakan matriks koneksi sebagai tempat pola contoh yaitu angka 0 sampai

pola angka 9 yang disimpan dalam suatu konstanta.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 32: 09E0067

23

Koneksi pada jaringan syaraf Hopfield dapat dilihat pada tabel berikut:

Tabel 1. Koneksi pada jaringan syaraf Hopfield

Neuron 1 (N1) Neuron 2 (N2) Neuron 3 (N3) Neuron 4 (N4)

Neuron 1 (N1) Tidak Ada N2>N1 N3>N1 N4>N1

Neuron 2 (N2) N1>N2 Tidak Ada N3>N2 N4>N2

Neuron 3 (N3) N1>N3 N2>N3 Tidak Ada N4>N3

Neuron 4 (N4) N1>N4 N2>N4 N3>N4 Tidak Ada

3.

Keterangan: P = jumlah bobot

Wij = bobot koneksi dari simpul i ke simpul j

Si(p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1

Sj(p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1

Untuk membentuk matriks bobot dimulai dengan matriks koneksi bobot

kosong:

Misalkan ingin menerima nilai 0101, untuk ini terlebih dahulu dibentuk matriks

koneksi dari 0101. Matriks koneksinya kemudian ditambahkan ke dalam matriks

koneksi bobot. Saat nilai dimasukkan, matriks koneksi bobot berada dalam proses

pengenalan pola baru.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 33: 09E0067

24

Langkah berikutnya adalah mengubah nilai 0101 menjadi bipolar, sehingga

menjadi:

0 = -1

1 = 1

0 = -1

1 = 1

Sehingga diperoleh sebuah array -1, 1, -1, 1. Array ini kemudian digunakan untuk

membangun matriks kontribusi 0101 dengan cara mengalikan dengan transposenya.

Hasilnya dapat dilihat sebagai berikut:

Langkah selanjutnya adalah membuat 0 secara diagonal nilai dari sudut kiri atas

sampai sudut kanan bawah. Hal ini dilakukan karena neuron pada jaringan Hopfield

tidak terhubung pada dirinya sendiri, sehingga matriks diatas menjadi:

Matriks di atas dapat ditambahkan ke dalam matriks koneksi bobot yang sudah ada.

Jika pola yang ingin dikenali hanya 0101, maka matriks di atas menjadi matriks

bobotnya.

4. Kerjakan langkah-langkah ini selama pola belum konvergen.

Langkah a: Untuk tiap vektor x (x1, x2, …, xn).

Langkah b: Inisialisasi pola input yang tidak diketahui.

Yi = Xi dengan (i = 1 … n)

Langkah c: Kerjakan langkah b sampai semua pola diuji.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 34: 09E0067

25

Langkah d:

Langkah e: Determinitive Activation (Sinyal Output).

yi =

Keterangan: 0i selalu berharga 0

Langkah f: Hasil dari output Yi berlaku untuk semua pola lain.

Langkah g: Uji pola sampai konvergen.

1 untuk y_ini 0

-1 untuk y_ini < 0

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 35: 09E0067

26

2.7. Flowchart Algoritma Hopfield

Gambar 7. Flowchart Algoritma Hopfield

Tentukan Matriks Bobot

Bangun JST Hopfield

Jalankan JST Hopfield

Sampai Keadaan Stabil

Proses

Pembelajaran

Pro

ses Kalk

ulasi

Cek

Kondisi

Konvergen

Tidak

Terpenuhi

Terpenuhi

Mulai

Pola Angka

Dikenali

Selesai

Cek

Solusi

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 36: 09E0067

27

BAB 3

ANALISIS DAN PERANCANGAN APLIKASI

3.1 Analisis Kebutuhan

Tulisan tangan sangat penting dalam komunikasi antar manusia. Baik dalam

kebutuhan komunikasi pribadi seperti surat menyurat, catatan, maupun dalam

komunikasi bisnis seperti surat berharga bank, pajak, perjanjian kerja dan lain-lain.

Tulisan tangan adalah hasil penggabungan kerja otak dan tubuh seseorang, sehingga

menjadikannya berbeda antar setiap pribadi sebagaimana wajah dan sifatnya.

Interaksi dan ketergantungan manusia akan komputer semakin meningkat.

Komputer semakin dibutuhkan untuk mempermudah pekerjaan. Pengenalan pola

tulisan tangan secara otomatis sangat dibutuhkan apabila dokumen-dokumen

tersikulasi berada pada jumlah yang besar.

Angka-angka pada kartu pos, cek bank, pajak akan lebih mudah untuk disortir

apabila pendataan dapat dilakukan secara otomatis. Beberapa penelitian telah berhasil

menghasilkan penerapan dari pengenalan pola angka. Dengan menggunakan Optical

Characters Recognition (OCR), Salim Ouchtati menunjukkan pengenalan pola yang

sudah mengalami kerusakan pada tampilannya.

Dengan dasar penelitian jurnal di atas, penulis mencoba untuk mengenali pola

angka dengan algoritma yang berbeda yakni dengan menggunakan algoritma Hopfield.

Berdasarkan landasan teori, secara umum bentuk struktur jaringan syaraf

tiruan Hopfield dapat digambarkan sebagai berikut:

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 37: 09E0067

28

Gambar 8. Struktur Jaringan Hopfield

Keterangan: x 0..N = input

y0...N = output

w00…ij = bobot

3.2 Aplikasi Algoritma Hopfield

Misalkan dalam sebuah vektor biner tersimpan pola 1, 1, 1, 0 atau ekuivalen dengan

bipolar yaitu pola 1, 1, 1, -1 dan dimasukkan ke dalam sebuah network. Misalkan pola

yang tersimpan dirusak dan diberi derau ataupun polanya diacak sehingga berubah

menjadi 0, 0, 1, 0, oleh karena itu dengan menggunakan algoritma Hopfield dapat

diperoleh kembali pola semula yaitu 1, 1, 1, 0. Output dari pola misalkan disimpan

dalam bentuk acak yaitu Y1, Y4, Y3, dan Y2.

Penyelesaian dari masalah pada halaman sebelumnya adalah sebagai berikut:

Langkah 1: Inisialisasi bobot untuk menyimpan pola, yaitu:

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 38: 09E0067

29

W =

Langkah 2: Vektor input yang sudah diacak adalah X=(0, 0, 1, 0), dengan X1=0, X4=0,

X3=1, dan X2=0.

Dari vektor input, akan dimasukkan ke dalam jaringan.

Langkah 3: Tentukan nilai output Y awal yaitu vektor input x yang diacak (0, 0, 1, 0).

Langkah a: Pilihlah unit Y1 untuk melakukan perubahan aktivasi.

= 0 + 1

= 1

Langkah b: y_in1 > 0 → y1 = 1

Karena nilai y_in1 lebih besar dari 0, maka aktivasi berubah dan menja-

dikan nilai Y1=1.

Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau

dalam bentuk vektor (1, 0, 1, 0).

Langkah 4:

Langkah a: Pilihlah unit Y4 untuk melakukan perubahan aktivasi.

= 0 + (-2)

= -2

Langkah b: y_in4 > 0 → y4 = 0

Karena nilai y_in4 kurang dari 0, maka aktivasi tetap dan menjadi-

kan nilai Y4 tetap bernilai = 0.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 39: 09E0067

30

Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau

dalam bentuk vektor (1, 0, 1, 0).

Langkah 5:

Langkah a: Pilihlah unit Y3 untuk melakukan perubahan aktivasi.

= 1 + 1

= 2

Langkah b: y_in3 > 0 → y3 = 1

Karena nilai y_in1 lebih besar dari 0, maka aktivasi berubah dan menja-

dikan nilai Y3 = 1.

Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau

dalam bentuk vektor (1, 0, 1, 0).

Langkah 6:

Langkah a: Pilihlah unit Y2 untuk melakukan perubahan aktivasi.

= 0 + 2

= 2

Langkah b: y_in2 > 0 → y2 = 1

Karena nilai y_in2 lebih besar dari 0, maka aktivasi berubah dan menja-

dikan nilai Y1=1.

Langkah c: Nilai output terakhir adalah: Y1=1, Y4=0, Y3=1, dan Y2=1, atau

dalam bentuk vektor (1, 1, 1, 0).

Langkah 7: Lakukan pengujian sampai output konvergen.

Karena iterasi terakhir output sudah menunjukkan kondisi konvergen,

maka output tersebut akan dijadikan output jaringan syaraf tiruan.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 40: 09E0067

31

3.3. Kondisi Konvergen

Hopfield (1984) melalui penelitiannya membuktikan bahwa jaringan syaraf tiruannya

akan konvergen pada nilai batas stabil dengan menggunakan fungsi Lyapunov (fungsi

energi). Fungsi energi pada jaringan Hopfield sebagai berikut:

Jika aktivasi jaringan berubah berdasarkan yi, maka energi akan berubah menjadi

Pada saat aktivasi neuron Yi, jika yi positif maka akan berubah menjadi nol. Dengan

demikian

untuk yi negatif, maka akan menjadi positif yaitu

Dalam penelitiannya Hopfield menemukan bahwa pola biner yang dapat disimpan dan

dipanggil kembali dalam sebuah jaringan, dengan ketepatan yang baik adalah sebesar

dimana n adalah jumlah neuron dalam suatu jaringan.

3.4 Rancangan Tampilan

Perangkat lunak pengenalan pola angka akan ditampilkan dalam halaman situs web

dengan menggunakan Java applet. Pilihan menu dari masing-masing perintah akan

ditampilkan dengan sistem menu icon. Tombol menu akan disusun sesuai dengan

urutan perintah pengenalan pola, antara lain:

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 41: 09E0067

32

1. Tombol menu Clear Display, digunakan untuk membersihkan bidang gambar

dari pola-pola.

2. Tombol menu Randomize, digunakan untuk menggambar pola acak.

3. Tombol menu Memorize, digunakan menyimpan pola yang sudah digambar ke

dalam memori komputer.

4. Tombol menu Test, digunakan untuk mencoba membandingkan pola-pola

yang sudah tersimpan dengan pola yang baru.

5. Tombol menu Clear Memory, digunakan untuk membersihkan data yang

tersimpan dalam memori komputer.

6. Tombol First Pattern, digunakan untuk menampilkan pola pertama yang sudah

disimpan terlebih dahulu pada bidang gambar.

7. Tombol Last Pattern, digunakan untuk menampilkan pola yang terakhir

disimpan pada bidang gambar.

Gambar 9. Rancangan Tampilan Program Applet Pada Browser

3.5 Rancangan Masukan Dan Keluaran

3.5.1 Rancangan Masukan

Untuk memasukkan data hanya digunakan piranti tetikus, yang digunakan untuk

memilih menu yang ada serta menggambar pola pada bidang yang telah disediakan.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 42: 09E0067

33

Pola dapat digambar pada bidang dengan cara menekan tombol kiri atau kanan

sehingga bidang gambar akan berubah warna menandakan sebuah variabel telah

terbentuk, dalam hal ini piksel. Pola dapat dihapus dengan cara yang sama seperti cara

menggambar pola.

3.5.2 Rancangan Keluaran

Pola yang sudah disimpan dapat ditampilkan kembali dengan tombol menu yang ada

pada bagian atas bidang gambar. Pola akan ditampilkan dalam bidang yang sama

dengan masukan. Selain pola akan ditampilkan juga grafik garis pada bidang sebelah

gambar yang berfungsi untuk melihat perbandingan antar pola yang satu dengan yang

lainnya.

3.2 Analisis Kebutuhan Perangkat Keras

Selain dengan Java, untuk mengetahui bagaimana proses pengenalan pola angka juga

dapat digunakan perangkat lunak yang dapat mempermudah proses komputasi dalam

penelitan bidang jaringan syaraf tiruan, dalam hal ini yang digunakan adalah

perangkat lunak Matlab 7.1 release 14, The MathWorks, Inc..

Kecepatan pemrosesan data pada Matlab bergantung pada sistem komputer

yang digunakan. Semakin baik spesifikasi komputer yang digunakan, hasil

perhitungan akan ditampilkan lebih cepat. Spesifikasi sistem yang digunakan dalam

percobaan:

1. Prosesor Intel Pentium D 3 GHz.

2. Memori RAM 4 GB.

3. Harddisk 80 GB.

4. O/S Windows XP Profesional SP3.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 43: 09E0067

34

BAB 4

PEMBAHASAN

4.1 Perangkat Lunak

Untuk membangun sebuah perangkat lunak diperlukan pemahaman tentang teknik

pemrograman komputer. Sebuah perangkat lunak pada dasarnya terdiri atas

sekumpulan perintah-perintah dalam bahasa komputer, yang bertujuan agar sebuah

komputer dapat mengerjakan suatu pekerjaan sesuai dengan keinginan pemakainya.

Dewasa ini sudah banyak berkembang beragam jenis bahasa pemrograman yang

memiliki metode pemrograman yang berbeda-beda. Salah satu bahasa pemrograman

yang banyak dipakai dewasa ini adalah bahasa pemrograman Java.

Java adalah sebuah bahasa pemrograman yang dikembangkan oleh perusahaan

Sun Microsystems. Bahasa pemrograman ini memiliki keunggulan dimana perangkat

lunak yang dibuat dapat dijalankan pada hampir semua sistem operasi seperti

Windows, UNIX, dan Macintosh. Hal ini dimungkinkan karena hampir semua sistem

operasi dewasa ini sudah memiliki penerjemah dan pengolah Java, yang dinamakan

Java Virtual Machine (JVM).

Bahasa pemrograman Java dapat menghasilkan perangkat lunak yang fleksibel,

mulai dari perangkat lunak berukuran kecil yang dapat dijalankan pada sebuah

halaman situs web, sampai perangkat lunak berukuran besar yang dapat menjalankan

beberapa fungsi sekaligus. Hal ini dimungkinkan karena karakteristik pemrograman

Java yang berorientasi objek. Dengan kemampuannya ini Java dapat dijalankan dalam

beragam keadaan komputer, terutama yang berhubungan dengan antarmuka yang

sifatnya grafis.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 44: 09E0067

35

4.2 Struktur Data

Sebuah perangkat lunak yang bertujuan untuk mengenali sebuah pola memerlukan

sebuah struktur data, yang nantinya akan menentukan bagaimana data yang berupa

sekumpulan piksel disimpan ke dalam memori komputer dan kemudian dipanggil

kembali sebagai data pembanding. Data yang dimasukkan nantinya berupa matriks

yang diperoleh dari piksel-piksel yang telah terlebih dahulu ditentukan bidang

gambarnya.

Pola-pola angka yang dibandingkan nantinya akan memiliki bentuk yang

berbeda-beda sehingga diperlukan record yang berfungsi untuk menyimpan

serangkaian data dalam satu variabel. Untuk pola yang pertama sekali dimasukkan

sebagai pembanding perlu diberikan nama yang berbeda dengan pola akhir yang

digunakan sebagai penguji sehingga perubahan piksel dapat dibandingkan.

Adapun deklarasi applet dalam Java adalah sebagai berikut:

public class HopfieldApp extends Applet

{

HopMem mem;

Pattern current_pattern;

Pattern first_pattern;

Pattern last_pattern;

int xsize;

int ysize;

Color bgrnd;

boolean erase;

boolean first;

boolean changed;

double overlap1[];

double overlap2[];

int overlap;

HopCanvas hopCanvas;

Dari type data di atas dapat ditampung data yang berupa piksel dari pola-pola

yang dibentuk dari 10x10 node.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 45: 09E0067

36

4.3 Pengenalan Pola dengan Matlab

Aplikasi algoritma Hopfield ke dalam applet tidak menampilkan perubahan yang

terjadi pada bobot jaringan. Untuk melihat perhitungan bobot dapat digunakan

aplikasi Matlab. Dalam penulisan ini penulis menggunakan Matlab versi 7. Adapun

pola yang penulis gunakan dalam Matlab sebagai berikut:

Gambar 10. Pola aplikasi algoritma Hopfield untuk mengenali pola pada Matlab

Dalam penelitian pada Matlab, pola dibentuk dari matriks berukuran 10x12

dan jumlah pola yang akan disimpan dalam jaringan sebanyak 8 buah. Setelah pola

dipilih selanjutnya adalah mengacaknya sehingga diperoleh bentuk:

Gambar 11. Pola angka 3 yang diacak

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 46: 09E0067

37

Dengan menggunakan perhitungan algoritma Hopfield, diharapkan pola yang

telah diacak dapat dikenali sebagai angka 3. Pada percobaan jumlah iterasi yang

penulis gunakan dalam menampilkan kondisi pembaruan jaringan adalah 10. Pada

kondisi iterasi ke-10, pola angka menjadi:

Gambar 12. Pola angka pada iterasi ke-10

Pola mulai dapat dikenali pada iterasi ke-30 dengan kondisi pola menjadi:

Gambar 13. Pola angka pada iterasi ke-30

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 47: 09E0067

38

Pada iterasi ke-45 pola dikenali sebagai angka 3 dimana kondisi pola menjadi:

Gambar 14. Pola angka pada iterasi ke-45

4.4 Aplikasi Algoritma ke dalam Program Java

Sebuah gambar atau pola merupakan sekumpulan titik-titik yang disusun sehingga

menghasilkan suatu bentuk. Pada komputer gambar atau pola disusun oleh

sekumpulan titik yang dinamakan piksel. Untuk mengenali pola terlebih dahulu piksel

diubah ke dalam bentuk matriks, kemudian disimpan ke dalam komputer.

Gambar 15. Contoh pola angka satu pada bidang gambar yang akan dipelajari

komputer

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 48: 09E0067

39

Untuk pola angka satu pada halaman sebelumnya, matriks yang bersesuaian:

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 1 1 1 -1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 -1 1 1 -1 -1 -1 -1

-1 -1 -1 1 1 1 1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

Pola angka 1 (satu) pada halaman sebelumnya akan dipelajari dan disimpan ke dalam

komputer. Misalkan ada pola angka 1 yang memiliki bentuk berbeda dengan pola

pada halaman sebelumnya langkah-langkah pengenalannya dapat dilihat sebagai

berikut.

Misal gambar pola angka 1 yang baru:

Gambar 16. Pola angka 1 yang akan dikenali komputer

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 49: 09E0067

40

4.3.1. Algoritma Pengenalan Pola pada Komputer

Untuk mengenali pola angka yang dimasukkan ke dalam program, komputer akan

menjalankan langkah-langkah berikut:

Langkah 1:

Ubah piksel menjadi bentuk bipolar dengan perintah:

int i = parent.xsize;

int j = parent.ysize;

int k = mouseevent.getX();

int l = mouseevent.getY();

Pattern pattern = parent.current_pattern;

Penekanan tetikus akan memanggil perintah yang berfungsi sebagai deteksi apakah

pada bidang telah terjadi suatu input. Jika komputer mendeteksi penekanan, maka

piksel dengan warna merah akan ditampilkan sekaligus memberikannya nilai. Dari

pola angka Gambar 10 diperoleh vektor bipolar:

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1,

-1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1,

1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1,1, -1, -1, -1, -1, -1, -1,

-1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1

Langkah 2:

Setelah konversi piksel, jika ada perintah untuk menyimpan pola maka komputer akan

mulai menjalankan algoritma Hopfield, dimulai dari inisialisasi bobot. Untuk

memperoleh matriks bobot dari Gambar 10, matriks kontribusi dikalikan dengan

transposenya sehingga diperoleh matriks:

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 50: 09E0067

41

1 1 1 1 1 1 1 1 1 1

1 1 1 1 -1 -1 1 1 1 1

1 1 1 -1 -1 -1 1 1 1 1

1 1 -1 1 -1 -1 1 1 -1 1

1 -1 -1-1 -1 -1 -1 -1 -1 1

1 -1 -1 -1-1 -1 -1 -1 -1 1

1 1 1 1 -1 -1 1 1 -1 1

1 1 1 1 -1 -1 1 1 1 1

1 1 1 -1 -1 -1 -1 1 1 1

1 1 1 1 1 1 1 1 1 1

Perintah yang digunakan untuk menghitung bobot sebagai berikut:

weights[i][j] = weights[i][j] + pattern.pattern[i] * pattern.pattern[j];

Selanjutnya nilai diagonal akan diubah menjadi 0 sehingga diperoleh matriks

bobotnya:

0 1 1 1 1 1 1 1 1 1

1 0 1 1 -1 -1 1 1 1 1

1 1 0 -1 -1 -1 1 1 1 1

1 1 -1 0 -1 -1 1 1 -1 1

1 -1 -1-1 0 -1 -1 -1 -1 1

1 -1 -1 -1-1 0 -1 -1 -1 1

1 1 1 1 -1 -1 0 1 -1 1

1 1 1 1 -1 -1 1 0 1 1

1 1 1 -1 -1 -1 -1 1 0 1

1 1 1 1 1 1 1 1 1 0

Langkah 3:

Matriks bobot di atas kemudian disimpan ke dalam komputer sebagai pola awal angka.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 51: 09E0067

42

Langkah 4:

Proses pengenalan pola akan dimulai ketika pola angka yang baru dimasukkan.

Komputer kemudian menghitung bobot pola baru, menghitung aktivasi, dan

melakukan perhitungan hingga terjadi konvergen. Input pola baru sebagai berikut:

0 0 0 0 0 1 0 0 0 0

0 0 0 0 1 1 0 0 0 0

0 0 0 1 1 1 0 0 0 0

0 0 0 0 1 1 0 0 0 0

0 0 0 0 1 1 0 0 0 0

0 0 0 0 1 1 0 0 0 0

0 0 0 0 1 1 0 0 0 0

0 0 0 1 1 1 1 0 0 0

0 0 0 1 1 1 1 0 0 0

0 0 0 1 1 1 1 0 0 0

Langkah 5:

Pada langkah ini komputer akan melakukan iterasi hingga tercapai kondisi stabil dari

jaringan. Pada penelitian iterasi yang dilakukan adalah sampai 10.

Langkah 6:

Setelah tercapai kondisi stabil pada jaringan, komputer kemudian akan memanggil

pola awal untuk ditampilkan beserta hasil iterasi pada bidang program.

4.4 Implementasi dalam Program Java dengan Applet

Berikut ditampilkan pola angka yang akan dikenali dengan algoritma Hopfield, mulai

dari angka 0 sampai 9.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 52: 09E0067

43

Gambar 17. Pola angka 0.

Gambar 18. Pola angka 1

Gambar 19. Pola angka 2 .

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 53: 09E0067

44

Gambar 20. Pola angka 3.

Gambar 21. Pola angka 4.

Gambar 22. Pola angka 5.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 54: 09E0067

45

Gambar 23. Pola angka 6.

Gambar 24. Pola angka 7.

Gambar 25. Pola angka 8.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 55: 09E0067

46

Gambar 26. Pola angka 9.

Setelah pola angka disimpan perlu diadakan pengecekan oleh program apakah

pola-pola tersebut dapat dibedakan antar satu dengan lainnya. Selain itu penulis juga

akan melakukan perbandingan antar pola yang memiliki bentuk yang hampir sama

atau perbandingan dengan bentuk yang telah diacak. Hal ini perlu dilakukan karena

pola angka bisa saja memiliki nilai yang sama namun berbeda dalam penampilan

bentuknya.

Gambar pada halaman berikut menunjukkan pola yang mengalami pengacakan

mendekati pola angka 2 dan angka 7.

Gambar 27. Pola angka yang telah diacak.

Dari hasil percobaan pada halaman sebelumnya program mengenali pola tersebut

sebagai angka 2. Dapat dilihat dari grafik garis berwarna merah, yakni angka 2

sebagai pola pertama.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 56: 09E0067

47

Gambar 28. Pola yang telah dikenali oleh program.

Selanjutnya yang memiliki bentuk hampir sama adalah 0 dan 8. Angka 0 yang diacak

memiliki kemungkinan menjadi angka 8 apabila pada bagian tengahnya terdapat

tambahan piksel. Pola berikut akan dicoba apakah program akan mengenalinya

sebagai pola angka 0 atau 8.

Gambar 29. Pola angka 0 yang diacak mendekati bentuk angka 8.

Dari hasil percobaan, program lebih mengenal pola sebagai angka 8. Dari gambar

berikut dapat dilihat dari hasil grafik garis warna biru sebagai pola terakhir yakni

angka 8.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 57: 09E0067

48

Gambar 30. Pola yang dikenali sebagai angka 8.

Berikutnya akan dicoba pengenalan pola dengan cara mengacak pola angka satu

sehingga diperoleh bentuk sebagai berikut:

Gambar 31. Pola angka 1 yang telah diacak.

Setelah dijalankan program masih bisa mengenali bahwa pola yang diacak di atas

merupakan pola angka 1. Dapat dilihat dari grafik garis warna biru yang mendekati

aktifasi 1.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 58: 09E0067

49

Gambar 32. Pola angka acak yang dikenali sebagai angka 1.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 59: 09E0067

50

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Adapun kesimpulan yang didapat dari algoritma Hopfield antara lain:

1. Setelah beberapa percobaan pengenalan pola dengan jaringan Hopfield,

menunjukkan pola dapat dikenali pada iterasi ke-45 dengan tingkat

probabilitas 0,3.

2. Dari hasil percobaan, algoritma Hopfield dapat digunakan untuk mengenali

pola-pola angka namun keakuratan dalam mengenali pola akan berkurang

seiring bertambahnya jumlah pola angka dan tingkat kerusakan dari pola angka

tersebut.

3. Kesalahan pengenalan pola angka mungkin terjadi pada pola angka yang

hampir mirip, seperti pada angka 1 dan 7, 8 dan 0, 5 dan 6.

5.2 Saran

Sebagai saran untuk mengenali pola angka secara lebih baik:

1. Sistem dapat dikembangkan menjadi lebih kompleks sehingga pola yang akan

ditampilkan dan dikenali bisa lebih terperinci.

2. Pengembangan sistem juga dapat menggunakan media optik sehingga pola

tidak hanya diinput dengan tetikus tetapi juga dapat melalui media foto.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 60: 09E0067

51

DAFTAR PUSTAKA

Desiani, Anita dan Muhammad Arhami. 2005. Konsep Kecerdasan Buatan. Edisi ke-1.

Yogyakarta: Penerbit ANDI.

Fausett, L. 1994. Fundamentals of Neural Networks: Architectures, Algorithms, and

Applications. Englewood Cliffs, New Jersey: Prentice-Hall, Inc.

Hermawan, Arief, 2006, “Jaringan Syaraf Tiruan Teori dan Aplikasi”,

Yogyakarta: Penerbit ANDI.

Hopfield, J. J. 1982. “Neural networks and physical systems with emergent collective

computational abilities”. Proceedings of the National Academy of Sciences:

79: 2554-2558 .

Hopfield, J. J. 1984. “Neurons with graded response have collective computational

properties like those of two-state neurons”. Proceedings of the National Aca-

demy of Sciences: 81: 3088-3092 .

Imada, A. dan Araki, K. “Hopfield model of associative memory as a test function of

evolutionary computations”.

Kristanto, Andri, 2004, “Jaringan Saraf Tiruan (Konsep Dasar, Algoritma dan

Aplikasinya )”, Yogyakarta: Gava Media.

Kusumadewi, Sri. 2003. Artificial Intelligence (Teknik dan Aplikasinya). Edisi ke-1.

Yogyakarta: Graha Ilmu.

Morris, Dan. http://techhouse.brown.edu/dmorris/JOHN/StinterNet.html. Diakses

tanggal 13 April, 2006.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 61: 09E0067

52

Ouchtati, S., Redjimi, M., Bedda, M. dan Bouchareb, F. “A new offline system for

handwritten digits recognition”. Asian Journal of Information Technology:

620-626, 2006.

Puspitaningrum, Diyah, 2006, “Pengantar Jaringan Syaraf Tiruan”, Yogyakarta:

Penerbit ANDI.

Seung, Sebastian. 2002. “The Hopfield model”.

Siang, Jong Jek, 2002, “Matematika Diskrit dan Aplikasinya pada Ilmu

Komputer” , Penerbit ANDI Yogyakarta.

Siang, Jong Jek, 2005, “Jaringan Syaraf Tiruan & Pemrogramannya

Menggunakan Matlab”, Penerbit ANDI Yogyakarta.

Sulehria, H. K. dan Ye Zhang. 2007. “Hopfield neural network–a survey”. Pro-

ceedingsof the 6th

WSEAS Int. Conf. on Artificial Intelligenc: hal. 125-130. Greece.

AI-Junkie. www.ai-junkie.com. Diakses tanggal 20 Januari, 2007.

Citeseer. http://citeseerx.ist.psu.edu. Diakses tanggal 10 Desember 2007.

Find Articles. www.findarticles.com. Diakses tanggal 13 April, 2006.

Heaton Research. www.heatonresearch.com. Diakses tanggal 15 Mei, 2007.

Neural Networks. www.doc.ic.ac.uk. Diakses tanggal 5 Agustus, 2007.

Wikipedia. www.wikipedia.com. Diakses tanggal 13 April, 2006.

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 62: 09E0067

LAMPIRAN

Tabel perubahan bobot jaringan W11 sampai W120,120 :

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 63: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 64: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 65: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 66: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 67: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 68: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 69: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 70: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 71: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 72: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 73: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 74: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 75: 09E0067

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 76: 09E0067

listing dari HopCanvas.class:

import java.awt.*;

import java.awt.event.*;

class HopCanvas extends Canvas

implements MouseListener, MouseMotionListener

{

HopfieldApp parent;

public HopCanvas(HopfieldApp hopfieldapp)

{

parent = hopfieldapp;

setSize(680, 200);

addMouseListener(this);

addMouseMotionListener(this);

}

public void mouseClicked(MouseEvent mouseevent)

{

int i = parent.xsize;

int j = parent.ysize;

int k = mouseevent.getX();

int l = mouseevent.getY();

Pattern pattern = parent.current_pattern;

int i1 = k / pattern.blocksize + (l / pattern.blocksize) * (i / pattern.blocksize);

if(k < i && l < j)

{

pattern.toggle(i1);

Graphics g = getGraphics();

if(pattern.pattern[i1] > 0)

{

parent.erase = false;

g.setColor(Color.red);

} else

{

parent.erase = true;

g.setColor(Color.blue);

}

g.fillRect((k - k % pattern.blocksize) + 1, (l - l % pattern.blocksize) + 1,

pattern.blocksize - 2, pattern.blocksize - 2);

parent.changed = true;

}

}

public void mouseDragged(MouseEvent mouseevent)

{

int i = parent.xsize;

int j = parent.ysize;

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 77: 09E0067

int k = mouseevent.getX();

int l = mouseevent.getY();

Pattern pattern = parent.current_pattern;

boolean flag = parent.erase;

int i1 = k / pattern.blocksize + (l / pattern.blocksize) * (i / pattern.blocksize);

if(k < i && l < j)

{

Graphics g = getGraphics();

if(flag)

{

if(pattern.pattern[i1] > 0)

{

pattern.toggle(i1);

}

g.setColor(Color.blue);

} else

{

if(pattern.pattern[i1] < 0)

{

pattern.toggle(i1);

}

g.setColor(Color.red);

}

g.fillRect((k - k % pattern.blocksize) + 1, (l - l % pattern.blocksize) + 1,

pattern.blocksize - 2, pattern.blocksize - 2);

parent.changed = true;

}

}

public void mouseEntered(MouseEvent mouseevent)

{

}

public void mouseExited(MouseEvent mouseevent)

{

}

public void mouseMoved(MouseEvent mouseevent)

{

}

public void mousePressed(MouseEvent mouseevent)

{

}

public void mouseReleased(MouseEvent mouseevent)

{

}

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 78: 09E0067

public void paint(Graphics g)

{

paintRectangles();

paintGraph();

}

public void paintGraph()

{

Graphics g = getGraphics();

Pattern pattern = parent.current_pattern;

int l = parent.xsize;

int i1 = parent.ysize;

double ad[] = parent.overlap1;

double ad1[] = parent.overlap2;

int j1 = parent.overlap;

setBackground(Color.white);

g.setColor(Color.black);

g.drawRect(0, 0, l - 1, i1 - 1);

g.drawLine(l + 20, 10, l + 20, i1 - 20);

g.drawLine(l + 20, 10, l + 15, 20);

g.drawLine(l + 20, 10, l + 25, 20);

g.drawLine(l + 18, i1 - 100, l + 380, i1 - 100);

g.drawLine(l + 380, i1 - 100, l + 370, i1 - 105);

g.drawLine(l + 380, i1 - 100, l + 370, i1 - 95);

g.drawString("Iteration", l + 340, i1 - 108);

g.drawString("Overlap", l + 28, 20);

g.drawString("0", l + 9, i1 - 96);

g.drawString("First Pattern", l + 322, 20);

g.drawString("Last Pattern", l + 322, 40);

g.drawString("1", l + 9, i1 - 166);

g.drawString("1", l + 9, i1 - 26);

g.drawLine(l + 18, i1 - 30, l + 22, i1 - 30);

g.drawLine(l + 18, i1 - 170, l + 22, i1 - 170);

for(int i = 1; i < 10; i++)

{

g.drawLine(l + 20 + i * 34, i1 - 98, l + 20 + i * 34, i1 - 102);

}

g.setColor(Color.red);

g.drawLine(l + 300, 16, l + 320, 16);

if(j1 == 1)

{

g.drawRect(l + 21, i1 - 100 - (int)(ad[0] * 70D), 1, 1);

} else

{

for(int j = 0; j < j1 - 1; j++)

{

g.drawLine(l + 21 + j * 34, i1 - 100 - (int)(ad[j] * 70D), l + 21 + (j + 1) * 34,

i1 - 100 - (int)(ad[j + 1] * 70D));

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 79: 09E0067

}

}

g.setColor(Color.blue);

g.drawLine(l + 300, 36, l + 320, 36);

if(j1 == 1)

{

g.drawRect(l + 21, i1 - 100 - (int)(ad1[0] * 70D), 1, 1);

} else

{

for(int k = 0; k < j1 - 1; k++)

{

g.drawLine(l + 21 + k * 34, i1 - 100 - (int)(ad1[k] * 70D), l + 21 + (k + 1) *

34, i1 - 100 - (int)(ad1[k + 1] * 70D));

}

}

}

public void paintRectangles()

{

Graphics g = getGraphics();

Pattern pattern = parent.current_pattern;

int i = parent.xsize;

int j = parent.ysize;

setBackground(Color.white);

for(int k = 0; k < parent.current_pattern.length; k++)

{

int i1 = (k / (i / pattern.blocksize)) * pattern.blocksize;

int l = (k % (i / pattern.blocksize)) * pattern.blocksize;

if(pattern.pattern[k] > 0)

{

g.setColor(Color.red);

} else

{

g.setColor(Color.blue);

}

g.fillRect(l + 1, i1 + 1, pattern.blocksize - 2, pattern.blocksize - 2);

}

}

}

listing dari HopfieldApp.class:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 80: 09E0067

public class HopfieldApp extends Applet

{

HopMem mem;

Pattern current_pattern;

Pattern first_pattern;

Pattern last_pattern;

int xsize;

int ysize;

Color bgrnd;

boolean erase;

boolean first;

boolean changed;

double overlap1[];

double overlap2[];

int overlap;

HopCanvas hopCanvas;

public HopfieldApp()

{

bgrnd = Color.lightGray;

erase = false;

first = true;

changed = false;

}

public void init()

{

current_pattern = new Pattern();

mem = new HopMem();

String s = getParameter("wid");

String s1 = getParameter("ht");

String s2 = getParameter("size");

if(s != null && s1 != null)

{

xsize = Integer.parseInt(s);

ysize = Integer.parseInt(s1);

} else

{

xsize = 200;

ysize = 200;

}

if(s2 != null)

{

current_pattern.blocksize = Integer.parseInt(s2);

}

current_pattern.init(xsize, ysize);

mem.init(current_pattern);

mem.happ = this;

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 81: 09E0067

overlap1 = new double[10];

overlap2 = new double[10];

for(int i = 0; i < 10; i++)

{

overlap1[i] = 0.0D;

overlap2[i] = 0.0D;

}

overlap = 0;

first_pattern = current_pattern.clone_it();

last_pattern = current_pattern.clone_it();

hopCanvas = new HopCanvas(this);

Panel panel = new Panel();

panel.setLayout(new FlowLayout());

Button button = new Button("Clear Display");

ActionListener actionlistener = new ActionListener() {

public void actionPerformed(ActionEvent actionevent)

{

current_pattern.init();

changed = true;

hopCanvas.paintRectangles();

}

};

button.addActionListener(actionlistener);

Button button1 = new Button("Randomize");

ActionListener actionlistener1 = new ActionListener() {

public void actionPerformed(ActionEvent actionevent)

{

current_pattern.randomize();

changed = true;

hopCanvas.paintRectangles();

}

};

button1.addActionListener(actionlistener1);

Button button2 = new Button("Memorize");

ActionListener actionlistener2 = new ActionListener() {

public void actionPerformed(ActionEvent actionevent)

{

mem.impose(current_pattern);

changed = true;

if(first)

{

first_pattern = current_pattern.clone_it();

first = false;

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 82: 09E0067

}

last_pattern = current_pattern.clone_it();

}

};

button2.addActionListener(actionlistener2);

Button button3 = new Button("Test");

ActionListener actionlistener3 = new ActionListener() {

public void actionPerformed(ActionEvent actionevent)

{

current_pattern = mem.iterate(current_pattern);

}

};

button3.addActionListener(actionlistener3);

Button button4 = new Button("Clear Memory");

ActionListener actionlistener4 = new ActionListener() {

public void actionPerformed(ActionEvent actionevent)

{

mem.init(current_pattern);

first_pattern = current_pattern.clone_it();

last_pattern = current_pattern.clone_it();

changed = true;

}

};

button4.addActionListener(actionlistener4);

Button button5 = new Button("First Pattern");

ActionListener actionlistener5 = new ActionListener() {

public void actionPerformed(ActionEvent actionevent)

{

current_pattern = first_pattern.clone_it();

hopCanvas.paintRectangles();

}

};

button5.addActionListener(actionlistener5);

Button button6 = new Button("Last Pattern");

ActionListener actionlistener6 = new ActionListener() {

public void actionPerformed(ActionEvent actionevent)

{

current_pattern = last_pattern.clone_it();

hopCanvas.paintRectangles();

}

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 83: 09E0067

};

button6.addActionListener(actionlistener6);

panel.add(button);

panel.add(button1);

panel.add(button2);

panel.add(button3);

panel.add(button4);

panel.add(button5);

panel.add(button6);

add("Top", panel);

add("Center", hopCanvas);

}

}

listing dari HopMem.class

import java.awt.Component;

import java.io.PrintStream;

class HopMem

{

boolean settling;

int size;

int weights[][];

HopfieldApp happ;

HopMem()

{

}

public void debug(Pattern pattern)

{

for(int i = 0; i < pattern.length; i++)

{

System.out.println(i + ": " + pattern.pattern[i]);

}

System.out.println("Weights: ");

for(int j = 0; j < pattern.length; j++)

{

for(int k = 0; k < pattern.length; k++)

{

System.out.print(j + "," + k + ": " + weights[j][k] + "\t");

}

System.out.println("");

}

}

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 84: 09E0067

public int ham(Pattern pattern, Pattern pattern1)

{

int j = 0;

for(int i = 0; i < pattern.length; i++)

{

if(pattern.pattern[i] * pattern1.pattern[i] <= 0)

{

j++;

}

}

return j;

}

public void impose(Pattern pattern)

{

for(int i = 0; i < pattern.length; i++)

{

for(int j = 0; j < pattern.length; j++)

{

if(i != j)

{

weights[i][j] = weights[i][j] + pattern.pattern[i] * pattern.pattern[j];

}

}

}

}

public void init(Pattern pattern)

{

settling = false;

size = pattern.length;

weights = new int[pattern.length][pattern.length];

}

public Pattern iterate(Pattern pattern)

{

if(happ.changed)

{

happ.changed = false;

happ.overlap1[0] = 0.0D;

happ.overlap2[0] = 0.0D;

for(int i = 0; i < pattern.length; i++)

{

happ.overlap1[0] += happ.first_pattern.pattern[i] * pattern.pattern[i];

happ.overlap2[0] += happ.last_pattern.pattern[i] * pattern.pattern[i];

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 85: 09E0067

}

happ.overlap1[0] /= pattern.length;

happ.overlap2[0] /= pattern.length;

happ.overlap = 1;

}

Pattern pattern1 = new Pattern();

pattern1.init(pattern);

for(int j = 0; j < pattern1.length; j++)

{

for(int l = 0; l < pattern1.length; l++)

{

pattern1.pattern[j] = pattern1.pattern[j] + pattern.pattern[l] * weights[j][l];

}

}

pattern1 = pattern1.normalize();

happ.overlap1[happ.overlap] = 0.0D;

happ.overlap2[happ.overlap] = 0.0D;

for(int k = 0; k < pattern1.length; k++)

{

happ.overlap1[happ.overlap] += happ.first_pattern.pattern[k] *

pattern1.pattern[k];

happ.overlap2[happ.overlap] += happ.last_pattern.pattern[k] *

pattern1.pattern[k];

}

happ.overlap1[happ.overlap] /= pattern1.length;

happ.overlap2[happ.overlap] /= pattern1.length;

happ.overlap++;

if(happ.overlap == 10)

{

happ.overlap = 0;

}

happ.current_pattern = pattern1;

happ.hopCanvas.repaint();

return pattern1;

}

}

listing dari Pattern.class

class Pattern

{

int length;

int blocksize;

int xsize;

int ysize;

int pattern[];

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 86: 09E0067

Pattern()

{

}

public Pattern clone_it()

{

Pattern pattern1 = new Pattern();

pattern1.pattern = new int[length];

for(int i = 0; i < length; i++)

{

pattern1.pattern[i] = pattern[i];

}

pattern1.length = length;

pattern1.blocksize = blocksize;

pattern1.xsize = xsize;

pattern1.ysize = ysize;

return pattern1;

}

public void init()

{

for(int i = 0; i < length; i++)

{

pattern[i] = -1;

}

}

public void init(int i, int j)

{

xsize = i / blocksize;

ysize = j / blocksize;

length = (i / blocksize) * (j / blocksize);

pattern = new int[length];

init();

}

public void init(Pattern pattern1)

{

length = pattern1.length;

blocksize = pattern1.blocksize;

pattern = new int[length];

init();

}

public Pattern normalize()

{

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009

Page 87: 09E0067

for(int i = 0; i < length; i++)

{

if(pattern[i] != 0)

{

pattern[i] = pattern[i] / Math.abs(pattern[i]);

}

}

return this;

}

public void randomize()

{

for(int i = 0; i < length; i++)

{

pattern[i] = (int)(2L * Math.round(Math.random()) - 1L);

}

}

public void toggle(int i)

{

if(i < length)

{

pattern[i] = pattern[i] * -1;

}

}

}

Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009