60
Tugas IV Kercerdasan Buatan
ARTIFICIAL NEURAL NETWORK
DENGAN METODE MCULLOCH DAN METODE LMS
Diajukan untuk memenuhi Tugas Mata Kuliah
Kecerdasan Buatan (Artificial Intelligent)
Oleh :
Nama : Steven Lim
NPM : 1421021
JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK INDUSTRI
UNIVERSITAS INTERNASIONAL BATAM
2015
Bab I
Landasan Teori
PENDAHULUAN.
Sejak ditemukan pertama kali oleh McCulloch dan Pitts pada tahun 1948, JST telah berkembang pesat dan telah digunakan pada banyak aplikasi. Jaringan saraf tiruan (JST) telah dikembangkan sejak tahun 1940. Belum ada definisi yang baku mengenai JST ini. Teori yang menginspirasi lahirnya sistem jaringan saraf muncul dari bermacam disiplin ilmu : terutama dari neuro science, teknik, dan ilmu komputer, juga dari psikologi, matematika, fisika, dan ilmu bahasa. Ilmu-ilmu ini bekerja bersama untuk satu tujuan yaitu pengembangan sistem kecerdasan
Jaringan Syaraf Tiruan adalah paradigma pemrosesan suatu informasi yang terinspirasi oleh sistim sel syaraf biologi, sama seperti otak yang memproses suatu informasi. Elemen mendasar dari paradigma tersebut adalah struktur yang baru dari sistim pemrosesan informasi. Jaringan Syaraf Tiruan, seperti manusia, belajar dari suatu contoh. Jaringan Syaraf Tiruan dibentuk untuk memecahkan suatu masalah tertentu seperti pengenalan pola atau klasifikasi karena proses pembelajaran.
Jaringan Syaraf Tiruan berkembang secara pesat pada beberapa tahun terakhir. Jaringan Syaraf Tiruan telah dikembangkan sebelum adanya suatu komputer konvensional yang canggih dan terus berkembang walaupun pernah mengalami masa vakum selama beberapa tahun.
INSPIRASI BIOLOGI.
Jaringan Syaraf Tiruan keluar dari penelitian kecerdasan buatan, terutama percobaan untuk menirukan fault-tolerence dan kemampuan untuk belajar dari sistem syaraf biologi dengan model struktur low-level dari otak.
Otak terdiri dari sekitar (10.000.000.000) sel syaraf yang saling berhubungan. Sel syaraf mempunyai cabang struktur input (dendrites), sebuah inti sel dan percabangan struktur output (axon). Axon dari sebuah sel terhubung dengan dendrites yang lain melalui sebuah synapse. Ketika sebuah sel syaraf aktif, kemudian menimbulkan suatu signal electrochemical pada axon. Signal ini melewati synapses menuju ke sel syaraf yang lain. Sebuah sel syaraf lain akan mendapatkan signal jika memenuhi batasan tertentu yang sering disebut dengan nilai ambang atau (threshold).
Gambar 1.1 Susunan Saraf Manusia.
PERBANDINGAN JARINGAN SYARAF TIRUAN DENGAN KONVENSIONAL.
Jaringan Syaraf Tiruan memiliki pendekatan yang berbeda untuk memecahkan masalah bila dibandingkan dengan sebuah komputer konvensional. Umumnya komputer konvensional menggunakan pendekatan algoritma (komputer konvensional menjalankan sekumpulan perintah untuk memecahkan masalah). Jika suatu perintah tidak diketahui oleh komputer konvensional maka komputer konvensional tidak dapat memecahkan masalah yang ada. Sangat penting mengetahui bagaimana memecahkan suatu masalah pada komputer konvensional dimana komputer konvensional akan sangat bermanfaat jika dapat melakukan sesuatu dimana pengguna belum mengatahui bagaimana melakukannya.
Jaringan Syaraf Tiruan dan suatu algoritma komputer konvensional tidak saling bersaing namun saling melengkapi satu sama lain. Pada suatu kegiatan yang besar, sistim yang diperlukan biasanya menggunakan kombinasi antara keduanya (biasanya sebuah komputer konvensional digunakan untuk mengontrol Jaringan Syaraf Tiruan untuk menghasilkan efisiensi yang maksimal. Jaringan Syaraf Tiruan tidak memberikan suatu keajiban tetapi jika digunakan secara tepat akan menghasilkan sasuatu hasil yang luarbiasa.
Gambar 1.2 Sebuah Sel Syaraf Sederhana
MODEL DASAR JARINGAN SYARAF TIRUAN
Mengadopsi esensi dasar dari system syaraf biologi, syaraf tiruan digambarkansebagai berikut : Menerima input atau masukan (baik dari data yang dimasukkan atau dari output sel syaraf pada jaringan syaraf. Setiap input datang melalui suatu koneksi atau hubungan yang mempunyai sebuah bobot (weight). Setiap sel syaraf mempunyai sebuah nilai ambang. Jumlah bobot dari input dan dikurangi dengan nilai ambang kemudian akan mendapatkan suatu aktivasi dari sel syaraf (post synaptic potential, PSP, dari sel syaraf). Signal aktivasi kemudian menjadi fungsi aktivasi / fungsi transfer untukmenghasilkan output dari sel syaraf.
Jika tahapan fungsi aktivasi digunakan ( output sel syaraf = 0 jika input <0 dan 1 jika input >= 0) maka tindakan sel syaraf sama dengan sel syaraf biologi yang dijelaskan diatas (pengurangan nilai ambang dari jumlah bobot dan membandingkan dengan 0 adalah sama dengan membandingkan jumlah bobot dengan nilai ambang). Biasanya tahapan fungsi jarang digunakan dalan Jaringan Syaraf Tiruan. Fungsi aktivasi (f(.)) dapat dilihat pada Gambar1.3.
Gambar 1.3 Fungsi Aktivasi
Bagaimana sel syaraf saling berhubungan? Jika suatu jaringan ingin digunakan untuk berbagai keperluan maka harus memiliki input (akan membawa nilai dari suatu variabel dari luar) dan output (dari prediksi atau signal kontrol). Input dan output sesuai dengan sensor dan syaraf motorik seperti signal datang dari mata kemudian diteruskan ke tangan, Dalam hal ini terdapat sel syaraf atau neuron pada lapisan tersembunyi berperan pada jaringan ini. Input, lapisan tersembunyi dan output sel syaraf diperlukan untuk saling terhubung satu sama lain.
Berdasarkan dari arsitektur (pola koneksi), Jaringan Syaraf Tiruan dapat dibagi kedalam dua katagori :
STRUKTUR FEEDFORWARD.
Sebuah jaringan yang sederhana mempunyai struktur feedforward dimana signal bergerak dari input kemudian melewati lapisan tersembunyi dan akhirnya mencapai unit output (mempunyai struktur perilaku yang stabil).
Tipe jaringan feedforward mempunyai sel syaraf yang tersusun dari beberapa lapisan. Lapisan input bukan merupakan sel syaraf. Lapisan ini hanya memberi pelayanan dengan mengenalkan suatu nilai dari suatu variabel. Lapisan tersembunyi dan lapisan output sel syaraf terhubung satu sama lain dengan lapisan sebelumnya. Kemungkinan yang timbul adalah adanya hubungan dengan beberapa unit dari lapisan sebelumnya atau terhubung semuanya (lebih baik).
Gambar 1.4 Struktur Feedforward.
STRUKTUR RECURRENT (FEEDBACK)
Jika suatu jaringan berulang (mempunyai koneksi kembali dari output ke input) akan menimbulkan ketidakstabilan dan akan menghasilkan dinamika yang sangat kompleks. Jaringan yang berulang sangat menarik untuk diteliti dalam Jaringan Syaraf Tiruan, namun sejauh ini structure feedforward sangat berguna untuk memecahkan masalah.
Gambar 1.5 Struktur feedback.
FUNGSI AKTIVASI.
Ada beberapa bentuk fungsi aktivasi yang umum digunakan dalam Neural Network, antara lain:
Fungsi tangga biner
Jaringan dengan lapisan tunggal sering menggunakan fungsi tangga biner untuk mengkonversikan input dari suatu variabel yang bernilai kontinu ke suatu ouput biner (0 atau 1). Fungsi tangga biner dirumuskan sebagai,
Sedangkan grafiknya dapat dilihat pada gambar dibawah ini;
Gambar 1.6 Grafik Fungsi Tangga Biner.
Fungsi linear (identitas)
Fungsi linear memiliki nilai output yang sama denagn nilai inputnya. Fungsi linear dirumuskan sebagai,
y=x
dan grafik fungsi linear dapat dilihat pada gambar berikut.
Gambar 1.7 Grafik Fungsi Linear.
Fungsi sigmoid biner
Fungsi ini mempunyai nilai pada range 0 sampai 1. Fungsi ini dirumuskan sebagai,
Dan grafik fungsi ini dapat dilihat pada gambar berikut :
Gambar 1.8 Grafik Fungsi Sigmoid Biner.
Fungsi sigmoid bipolar
Fungsi ini mempunyai nilai pada range antara –1 sampai 1. Fungsi ini dirumuskan sebagai,
Sedangkan grafik fungsinya dapat dilihat pada gambar berikut ,
Gambar 1.9 Grafik Fungsi Sigmoid Bipolar.
PROSES PEMBELAJARAN.
Umumnya, jika menggunakan Jaringan Syaraf Tiruan, hubungan antara input dan output harus diketahui secara pasti dan jika hubungan tersebut telah diketahui maka dapat dibuat suatu model. Hal lain yang penting adalah proses belajar hubungan input/output dilakukan dengan pembelajaran. Ada dua tipe pembelajaran yang dikenal yaitu : pembelajaran terawasi dan pembelajaran tak terawasi.
Pada pembelajaran terawasi, metode ini digunakan jika output yang diharapkan telah diketahui sebelumnya. Biasanya pembelajaran dilakukan dengan menggunakan data yang telah ada. Pada contoh diatas misalnya data pasar saham yang ada pada DOW, NASDAQ atau FTSE, data yang ada sebelumnya mengenai aplikasi kredit yang berhasil termasuk daftar pertanyaan atau posisi sebuah robot dan reaksi yang benar.
Pada metode pembelajaran yang tidak terawasi, tidak memerlukan target output. Pada metode ini tidak dapat ditentukan hasil seperti apa yang diharapkan selama proses pembelajaran. Selama proses pembelajaran, nilai bobot disusun dalam suatu range tertentu tergantung pada nilai input yang diberikan. Tujuan pembelajaran ini adalah mengelompokkan unit-unit yang hampir sama dalam suatu area tertentu. Pembelajaran seperti ini biasanya sangat cocok untuk pengelompokkan (klasifikasi) pola.
FUNGSI TRANSFER.
Karakter dari Jaringan Syaraf Tiruan tergantung atas bobot dan fungsi inputoutput (fungsi transfer) yang mempunyai ciri tertentu untuk setiap unit. Fungsi ini terdiri dari 3 katagori yaitu :
Untuk linear units, Aktifitas output adalah sebanding dengan jumlah bobot output.
Untuk threshold units, Output diatur satu dari dua tingkatan tergantung dari apakah jumlah input adalah lebih besar atau lebih kecil dari nilai ambang.
Untuk sigmoid units, Output terus menerus berubah-ubah tetapi tidak berbentuk linear. Unit ini mengandung kesamaan yang lebih besar dari sel syaraf sebenarnya dibandingkan dengan linear dan threshold unit, namun ketiganya harus dipertimbangkan dengan perkiraan kasar.
Untuk membuat Jaringan Syaraf Tiruan untuk melakukan beberapa kerja khusus.Harus dipilih bagaimana unit-unit dihubungkan antara satu dengan yang lain dan harus mengatur bobot dari hubungan tersebut secara tepat. Hubungan tersebut menentukan apakah mungkin suatu unit mempengaruhi unit yang lain. Bobot menentukan kekuatan dari pengaruh tersebut. Dapat dilakukan pembelajaran terhadap 3 lapisan pada Jaringan Syaraf Tiruan untuk melakukan kerja khusus dengan menggunakan prosedure dibawah ini :
Memperkenalkan Jaringan Syaraf Tiruan dengan contoh pembelajaran yang terdiri dari sebuah pola dari aktifitas untuk unit-unit input bersama dengan pola yang diharapkan dari aktifitas untuk unit-unit output.
Menentukan seberapa dekat output sebenarnya dari Jaringan Syaraf Tiruan sesuai dengan output yang diharapkan.
Mengubah bobot setiap hubungan agar Jaringan Syaraf Tiruan menghasilkan suatu perkiraan yang lebih baik dari output yang diharapkan
METODE-METODE ARTIFICIAL NEURAL NETWORK.
Metode McCulloch
McCulloch menggunakan metoe Terawasi pada Ann. Metode ini menggunakan 4 gerbang logika yaitu sebagai berikut :
Gerbang Logika AND.
Gerbang AND memerlukan 2 atau lebih Masukan (Input) untuk menghasilkan hanya 1 Keluaran (Output). Gerbang AND akan menghasilkan Keluaran (Output) Logika 1 jika semua masukan (Input) bernilai Logika 1 dan akan menghasilkan Keluaran (Output) Logika 0 jika salah satu dari masukan (Input) bernilai Logika 0. Simbol yang menandakan Operasi Gerbang Logika AND adalah tanda titik (".") atau tidak memakai tanda sama sekali. Contohnya : Z = X.Y atau Z = XY.
Gambar 1.10 Simbol Dan Tabel kebenaran AND.
Gerbang Logika OR
Gerbang OR memerlukan 2 atau lebih Masukan (Input) untuk menghasilkan hanya 1 Keluaran (Output). Gerbang OR akan menghasilkan Keluaran (Output) 1 jika salah satu dari Masukan (Input) bernilai Logika 1 dan jika ingin menghasilkan Keluaran (Output) Logika 0, maka semua Masukan (Input) harus bernilai Logika 0.
Simbol yang menandakan Operasi Logika OR adalah tanda Plus ("+"). Contohnya : Z = X + Y.
Gambar 1.11 Simbol dan Tabel Kebenaran OR
Gerbang Logika X-OR
X-OR adalah singkatan dari Exclusive OR yang terdiri dari 2 Masukan (Input) dan 1 Keluaran (Output) Logika. Gerbang X-OR akan menghasilkan Keluaran (Output) Logika 1 jika semua Masukan-masukannya (Input) mempunyai nilai Logika yang berbeda. Jika nilai Logika Inputnya sama, maka akan memberikan hasil Keluaran Logika 0
Gambar 1.12 Simbol dan Tabel Kebenaran X-OR
Gerbang Logika X-NOR.
Seperti Gerbang X-OR, Gerban X-NOR juga terdiri dari 2 Masukan (Input) dan 1 Keluaran (Output). X-NOR adalah singkatan dari Exclusive NOR dan merupakan kombinasi dari Gerbang X-OR dan Gerbang NOT. Gerbang X-NOR akan menghasilkan Keluaran (Output) Logika 1 jika semua Masukan atau Inputnya bernilai Logika yang sama dan akan menghasilkan Keluaran (Output) Logika 0 jika semua Masukan atau Inputnya bernilai Logika yang berbeda. Hal ini merupakan kebalikan dari Gerbang X-OR (Exclusive OR).
Gambar 1.13 Simbol dan Tabel Kebenaran X-NOR
LEAST MEAN SQUARE.
Least Mean Square (LMS) adalah algoritma dalam filter adaptif digunakan untuk mengupdate koefisien filter (bobot) yang diharapkan.Yang nantinya akan menghasilkan error yang sekecilkecilnya Rumus dari algoritma LMS adalah sebagai berikut :
X = X' + μe(n) (n)…………………………………………………(1)
Gambar 1. Filter Algoritma LMS
Bentuk pemodelan sistem pada algoritma LMS adalah sebagai berikut.
Menentukan sejumlah parameter atau bobot hingga sebagai penentu karakteristik yang di ubah-ubah dalam rangka pengadaptifan sistem
Membuat Algoritma yang mengatur prosedur perubahan parameter- parameter tersebut
Membangkitkan sinyal yang berfungsi sebagai sinyal masukan yang berfungsi sebagai penggerak sistem adaptif ini.
Membandingkan sinyal pembanding (Sinyal yang diharapkan) , dengan output dari sistem adaptif ini
Membangkitkan sinyal galat €k untuk memantau dan menginisialisasi algoritma pengatur adaptasi nya
Respon filter FIR menghasilkan estimasi meansquare (akar rata-rata) yang minimum dari proses yang diharapkan d(n) .Dan keluaran dari filter FIR adalah:
Dimana
= [wn(0), wn(1), ..., wn(p)]
T = vektor koefisien filter pada waktu n, dan pada keadaan yang sebenarnya
Sinyal yang diinginkan d(n) tidak diketahui dan cenderung dinyatakan dengan fungsi random Maka dimisalkan sinyal d(n) merupakan sinyal yang dibentuk dari sinyal sinus dan beramplitudo maksimum sama dengan satu. Disini diharapkan sinyal hasil keluaran dari proses adaptif e(n) akan mendekati sinyal yang diinginkan d(n) .Semakin mirip dengan sinyal yang diinginkan maka MSE akan semakin minimum .Sehingga nilai estimasinya memiliki persamaan sebagai berikut :
Target mendapatkan nilai MSE minimum dikenal sebagai algoritma LMS (Least Mean Square).Algoritma LMS konvergen dalam rata-rata jika ukuran langkah μ ,memenuhi persamaan :
Dimana :
u = rate of convergency
Bab II
Metode Penyelesaian
METODE PENYELESAIAN PROGRAM MCCULLOH.
Gambar 2.1 Interface Program McCulloch
Gambar diatas adalah interface dari program McCulloch. Langkah awal dalam pengerjaan program ini sama seperti biasanya yaitu menjalan kan Visual Studio lalu Open prject dan pilh solution yang ingin dijalankan. Kemudian perhatikan button dan box yang terdapat pada interface tersebut.
Button
Button yang terdapat pada interface terdiri dari button and dan or yang normal dan button and, or, XOR, dan X-NOR ANN.
List-Box.
List-Box akan menampilkan data yang digunakan untuk menjalankan program dan grafik.
Graphic Chart
Bagian ini akan menggambarkan data bentuk grafik
Yang pertama adalah program AND. AND pada normal adalah memunculkan data dengan menggunakan persamaan AND. Pada AND normal akan memunculkan data pada listbox. Data pada listbox muncul karena adanya coding sebagai berikut.
Coding diatas akan memunculkan data yang akan digunkan untuk membandingkan data pada ANN dan dalam keadaan Normal.
Gambar 2.2 Interface setelah button AND dijalankan.
Data Pada AND akan muncul karena coding dibawah ini yang juga akan menampilkan hasil dari pencarian nilai AND dalam bentuk Grafik.
Selain itu AND juga memilii table kebenaran sebagi berikut.
Tabel 2.1 Tabel Kebenaran AND
Selanjutnya adalah button ke dua yaitu button OR. Button pada or ini masih akan menggunakan formload yang digunakan sebelumnya. Berikut adalah gambar interface setelah button OR diaktifkan.
Gambar 2.3 Interface Program setelah button OR di jalankan.
Data pada OR dapat dijalankan karena coding dibawah ini. Dan coding tersebut menggunakan table kebenaran yang terdapat pada table setelah gambar dibawah ini.
Tabel 2.2 Tabel Kebenaran OR
Setelah menggunakan OR selanjutnya adalah button pada bagian ANN yaitu AND(ANN) perbedaannya hanyalah bila menggunakan AND(Normal) adalah merupakan hasil dari pencarian menggunakan metode AND yang sesungguhnya. Sedangkan, AND(ANN) adalah menggunakan program ANN untuk mencari hasil dan membandingkannya dengan AND yang sesungguhnya.
Berikut adalah coding yang digunakan untuk menjalankan AND(ANN) dan interface yang akan tampil setelah button AND (ANN) di jalankan.
{ listBox1.Items.Clear(); listBox1.Items.Add("---- AND (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); bias = 12; for (i = 0; i < data; i++) { w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2; vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i]; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); } { listBox1.Items.Clear(); listBox1.Items.Add("---- AND (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); bias = 12; for (i = 0; i < data; i++) { w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2; vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i]; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); }
{
listBox1.Items.Clear();
listBox1.Items.Add("---- AND (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
bias = 12;
for (i = 0; i < data; i++)
{
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
{
listBox1.Items.Clear();
listBox1.Items.Add("---- AND (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
bias = 12;
for (i = 0; i < data; i++)
{
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
Gambar 2.4 Interface Saat Button AND(ANN) dijalankan.
private void button4_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- OR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); bias = 2; for (i = 0; i < data; i++) { w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2; vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i]; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); } } private void button4_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- OR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); bias = 2; for (i = 0; i < data; i++) { w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2; vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i]; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); } }Setelah Program AND diaktifkan dan dibandingkan. Selanjutnya menggunakan button OR(ANN) yang akan dibandingkan juga dengan hasil OR yang sesungguhnya. Berikut adalah coding yang digunakan pada program OR(ANN)
private void button4_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- OR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
bias = 2;
for (i = 0; i < data; i++)
{
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
}
private void button4_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- OR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
bias = 2;
for (i = 0; i < data; i++)
{
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
}
Setelah Button OR(ANN) dijalankan maka interface pada program akan tampil seperti Gambar di Bawah ini.
Gambar 2.5 Interface Saat Button OR(ANN) dijalankan.
Selain button AND dan OR pada ANN masih ada button X-OR dan X-NOR dimana bila X-OR diaktifkan , akan memunculkan interface sebagai berikut.
Gambar 2.6 Interface setelah button X-OR dijalankan.
Interface dapat mucul dikarenakan coding yang digunakan. Pada graphic bagian bawah ditunujkan X-OR memiliki Nilai pada Range 12 yang memiliki curva yang berbeda. Grafik tersebut berbeda karena memiliki persamaan yang private void XOR_btn_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- XOR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); for (i = 0; i < data; i++) { vq[i] = 0; for (j = 0; j < 32; j++) //hidden layer 1 { setBobotXOR(); u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j]; if (u >= teta[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; } //hidden layer2 // untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j] * 1; // bobot = 1 } bias = 1; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); } }private void XOR_btn_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- XOR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); for (i = 0; i < data; i++) { vq[i] = 0; for (j = 0; j < 32; j++) //hidden layer 1 { setBobotXOR(); u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j]; if (u >= teta[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; } //hidden layer2 // untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j] * 1; // bobot = 1 } bias = 1; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); } }berbeda.berikut adalah Coding yang digunakan pada coding X-OR.
private void XOR_btn_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- XOR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
for (i = 0; i < data; i++)
{
vq[i] = 0;
for (j = 0; j < 32; j++) //hidden layer 1
{
setBobotXOR();
u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j];
if (u >= teta[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
//hidden layer2
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j] * 1; // bobot = 1
}
bias = 1;
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
}
private void XOR_btn_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- XOR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
for (i = 0; i < data; i++)
{
vq[i] = 0;
for (j = 0; j < 32; j++) //hidden layer 1
{
setBobotXOR();
u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j];
if (u >= teta[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
//hidden layer2
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j] * 1; // bobot = 1
}
bias = 1;
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
}
Dan yang terakhir adalah button X-NOR yag merupakan kebalikan dari X-OR. Berikut adalah tampilan atau interface program setelah button X-NOR dijalankan beserta coding yang terdapat pada button X-NOR.
Gambar 2.7 Interface program setelah program X-NOR di jalankan (Grafik Bawah)
private void XNOR_btn_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- XNOR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); for (i = 0; i < data; i++) { vq[i] = 0; // untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND private void XNOR_btn_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- XNOR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); for (i = 0; i < data; i++) { vq[i] = 0; // untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND
private void XNOR_btn_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- XNOR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
for (i = 0; i < data; i++)
{
vq[i] = 0;
// untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND
private void XNOR_btn_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- XNOR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
for (i = 0; i < data; i++)
{
vq[i] = 0;
// untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND
for (i = 0; i < data; i++) { vq[i] = 0; // untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND for (j = 0; j < 32; j++) //hidden layer 1 { setBobotXNOR(); u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j]; if (u>= teta1[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; } //hidden layer2 // untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j]*1; // bobot = 1 } bias = 1;// if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); } listBox1.Items.Add(x5[24] + " , " + x4[24] + " , " + x3[24] + " , " + x2[24] + " , " + x1[24] + " , " + x0[24] + " = " + y_out[24]); listBox1.Items.Add(w52[13] + " , " + w42[13] + " , " + w32[13] + " , " + w22[13] + " , " + w12[13] + w02[13]); } for (i = 0; i < data; i++) { vq[i] = 0; // untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND for (j = 0; j < 32; j++) //hidden layer 1 { setBobotXNOR(); u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j]; if (u>= teta1[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; } //hidden layer2 // untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j]*1; // bobot = 1 } bias = 1;// if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); } listBox1.Items.Add(x5[24] + " , " + x4[24] + " , " + x3[24] + " , " + x2[24] + " , " + x1[24] + " , " + x0[24] + " = " + y_out[24]); listBox1.Items.Add(w52[13] + " , " + w42[13] + " , " + w32[13] + " , " + w22[13] + " , " + w12[13] + w02[13]); }
for (i = 0; i < data; i++)
{
vq[i] = 0;
// untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND
for (j = 0; j < 32; j++) //hidden layer 1
{
setBobotXNOR();
u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j];
if (u>= teta1[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
//hidden layer2
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j]*1; // bobot = 1
}
bias = 1;//
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
listBox1.Items.Add(x5[24] + " , " + x4[24] + " , " + x3[24] + " , " + x2[24] + " , " + x1[24] + " , " + x0[24] + " = " + y_out[24]);
listBox1.Items.Add(w52[13] + " , " + w42[13] + " , " + w32[13] + " , " + w22[13] + " , " + w12[13] + w02[13]);
}
for (i = 0; i < data; i++)
{
vq[i] = 0;
// untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND
for (j = 0; j < 32; j++) //hidden layer 1
{
setBobotXNOR();
u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j];
if (u>= teta1[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
//hidden layer2
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j]*1; // bobot = 1
}
bias = 1;//
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
}
listBox1.Items.Add(x5[24] + " , " + x4[24] + " , " + x3[24] + " , " + x2[24] + " , " + x1[24] + " , " + x0[24] + " = " + y_out[24]);
listBox1.Items.Add(w52[13] + " , " + w42[13] + " , " + w32[13] + " , " + w22[13] + " , " + w12[13] + w02[13]);
}
Data Yang dimunculkan pada listbox mengalami perubahan terlebih dahulu diakarenakan adanya bobot dan bias yang berbeda (Pada X-OR dan X-NOR) berikut merupakan table kebenaranyang terdapat pada program ini serta ilustrasi model X-OR dan X-NOR.
Gambar 2.8 Contoh Model Struktur X-OR
Gambar 2.9 Contoh Model Struktur X-NOR
Tabel 2.3 Tabel kebenaran Gerbang X-OR.
Tabel 2.4 Tabel kebenaran gerbang X-NOR.
Metode Penyelesaian Program LMS
Cara program tersebut dapat berjalan yaitu saat kita memilih salah satu pilihan logika, yaitu AND dan OR lalu kita akan menekan tombol start, lalu program akan mengeksekusi program dengan memasukkan nilai program awal berupa input x0 sampai x4, lalu nilai input tersebut akan di komputasikan dengan nilai bobot yang nantinya akan menjadi nilai hidden layer, lalu nilai tersebut dijumlahkan menjadi nilai y atau output, pada metode program ini menggunakan proses JST atau (Jarigan Syaraf Tiruan) unseprvied learning dan nilai logika AND dan OR sebagai hasil dari inputan program.
namespace LMS_cs{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } double[] err = new double[20]; double[] y = new double[20]; double[] d = new double[20]; double[] actual = new double[20]; double cek_err ; double[] w = new double[10]; double temp, v, u, u0, t, errlim; int[] x1 = new int[16] { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }; int[] x2 = new int[16] { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }; int[] x3 = new int[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }; int[] x4 = new int[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }; const int x0 = 1; int k, i, j, l,inc; int alpha; Random acak = new Random(); [DllImport("Winmm.dll")] private static extern long timeGetTime();namespace LMS_cs{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } double[] err = new double[20]; double[] y = new double[20]; double[] d = new double[20]; double[] actual = new double[20]; double cek_err ; double[] w = new double[10]; double temp, v, u, u0, t, errlim; int[] x1 = new int[16] { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }; int[] x2 = new int[16] { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }; int[] x3 = new int[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }; int[] x4 = new int[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }; const int x0 = 1; int k, i, j, l,inc; int alpha; Random acak = new Random(); [DllImport("Winmm.dll")] private static extern long timeGetTime(); langkah pertama dalam pembuatan program ini yaitu proses inisialisasi source code dapat dilihat di bawah ini:
namespace LMS_cs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
double[] err = new double[20];
double[] y = new double[20];
double[] d = new double[20];
double[] actual = new double[20];
double cek_err ;
double[] w = new double[10];
double temp, v, u, u0, t, errlim;
int[] x1 = new int[16] { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] x2 = new int[16] { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 };
int[] x3 = new int[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 };
int[] x4 = new int[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 };
const int x0 = 1;
int k, i, j, l,inc;
int alpha;
Random acak = new Random();
[DllImport("Winmm.dll")]
private static extern long timeGetTime();
namespace LMS_cs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
double[] err = new double[20];
double[] y = new double[20];
double[] d = new double[20];
double[] actual = new double[20];
double cek_err ;
double[] w = new double[10];
double temp, v, u, u0, t, errlim;
int[] x1 = new int[16] { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] x2 = new int[16] { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 };
int[] x3 = new int[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 };
int[] x4 = new int[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 };
const int x0 = 1;
int k, i, j, l,inc;
int alpha;
Random acak = new Random();
[DllImport("Winmm.dll")]
private static extern long timeGetTime();
Pada source code diatas menunjukan data inisialisasi tersebut bertujuan membangkitkan atau membentuk nilai inputan berupa nilai biner sebanyak 4 input.
Gambar 2.10 Interface Program LMS.
private void button1_Click(object sender, EventArgs e) { chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart1.Series[2].Points.Clear(); chart1.Series[3].Points.Clear(); chart2.Series[0].Points.Clear(); for (i = 0; i < 4; i++) { w[i]=(acak.NextDouble()*DateTime.Now.Millisecond)/100; ListBox4.Items.Add("w" + i + " = " + w[i]); } inc = 0; k = 1; t = int.Parse(TextBox1.Text); u0 = double.Parse(TextBox2.Text); alpha = int.Parse(TextBox3.Text); errlim = double.Parse(TextBox4.Text); ListBox1.Items.Clear(); ListBox2.Items.Clear(); ListBox3.Items.Clear(); if (RadioButton1.Checked == true) { for (i = 0; i <= 15; i++) { d[i] = x1[i] & x2[i] & x3[i] & x4[i]; ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]); ListBox2.Items.Add(d[i]); } learning(); test(); } else { for (i = 0; i <= 15; i++) { d[i] = x1[i] " x2[i] " x3[i] " x4[i]; ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]); ListBox2.Items.Add(d[i]); } learning(); test(); }private void button1_Click(object sender, EventArgs e) { chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart1.Series[2].Points.Clear(); chart1.Series[3].Points.Clear(); chart2.Series[0].Points.Clear(); for (i = 0; i < 4; i++) { w[i]=(acak.NextDouble()*DateTime.Now.Millisecond)/100; ListBox4.Items.Add("w" + i + " = " + w[i]); } inc = 0; k = 1; t = int.Parse(TextBox1.Text); u0 = double.Parse(TextBox2.Text); alpha = int.Parse(TextBox3.Text); errlim = double.Parse(TextBox4.Text); ListBox1.Items.Clear(); ListBox2.Items.Clear(); ListBox3.Items.Clear(); if (RadioButton1.Checked == true) { for (i = 0; i <= 15; i++) { d[i] = x1[i] & x2[i] & x3[i] & x4[i]; ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]); ListBox2.Items.Add(d[i]); } learning(); test(); } else { for (i = 0; i <= 15; i++) { d[i] = x1[i] " x2[i] " x3[i] " x4[i]; ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]); ListBox2.Items.Add(d[i]); } learning(); test(); }
private void button1_Click(object sender, EventArgs e)
{
chart1.Series[0].Points.Clear();
chart1.Series[1].Points.Clear();
chart1.Series[2].Points.Clear();
chart1.Series[3].Points.Clear();
chart2.Series[0].Points.Clear();
for (i = 0; i < 4; i++)
{
w[i]=(acak.NextDouble()*DateTime.Now.Millisecond)/100;
ListBox4.Items.Add("w" + i + " = " + w[i]);
}
inc = 0;
k = 1;
t = int.Parse(TextBox1.Text);
u0 = double.Parse(TextBox2.Text);
alpha = int.Parse(TextBox3.Text);
errlim = double.Parse(TextBox4.Text);
ListBox1.Items.Clear();
ListBox2.Items.Clear();
ListBox3.Items.Clear();
if (RadioButton1.Checked == true)
{
for (i = 0; i <= 15; i++)
{
d[i] = x1[i] & x2[i] & x3[i] & x4[i];
ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]);
ListBox2.Items.Add(d[i]);
}
learning();
test();
}
else
{
for (i = 0; i <= 15; i++)
{
d[i] = x1[i] " x2[i] " x3[i] " x4[i];
ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]);
ListBox2.Items.Add(d[i]);
}
learning();
test();
}
private void button1_Click(object sender, EventArgs e)
{
chart1.Series[0].Points.Clear();
chart1.Series[1].Points.Clear();
chart1.Series[2].Points.Clear();
chart1.Series[3].Points.Clear();
chart2.Series[0].Points.Clear();
for (i = 0; i < 4; i++)
{
w[i]=(acak.NextDouble()*DateTime.Now.Millisecond)/100;
ListBox4.Items.Add("w" + i + " = " + w[i]);
}
inc = 0;
k = 1;
t = int.Parse(TextBox1.Text);
u0 = double.Parse(TextBox2.Text);
alpha = int.Parse(TextBox3.Text);
errlim = double.Parse(TextBox4.Text);
ListBox1.Items.Clear();
ListBox2.Items.Clear();
ListBox3.Items.Clear();
if (RadioButton1.Checked == true)
{
for (i = 0; i <= 15; i++)
{
d[i] = x1[i] & x2[i] & x3[i] & x4[i];
ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]);
ListBox2.Items.Add(d[i]);
}
learning();
test();
}
else
{
for (i = 0; i <= 15; i++)
{
d[i] = x1[i] " x2[i] " x3[i] " x4[i];
ListBox1.Items.Add(x1[i] + " " + x2[i] + " " + x3[i] + " " + x4[i]);
ListBox2.Items.Add(d[i]);
}
learning();
test();
}
Pada source code diatas menunjukan saat tombol start di klik nilai dari data input pada proses inisialisasi di proses kedalam metode JST yaitu metode LMS, source code diatas juga menampilkan proses dari list box, chart dan proses yang lebih mendetai seperti, tau, miu, alpha, epsilon, eror, dan epoch.
Proses pembelajaran atau learning atau bisa disebut unsupervised learning pada proses tersebut data input dikomputasikan dengan nilai bobot dan menjadi nilai U dan pada source code tersebut juga menunjukan proses perhitungan error pada proses komputasi program tersebut.
Bab III
Analisa Data
Berikut merupakan analisa data dan program yang terdapat pada program McCulloch dan LMS.
AND pada McCulloch.
AND Normal.
Pada program ini, AND terdapat menjadi 2 bagian yaitu AND dengan metode Normal dan AND dengan metode McCulloh (ANN). Pada bagian ini yang akan di jelaskan adalah AND dengan metode normal. Pada metode ini dapat kita lihat di coding AND terdapat persamaan untuk menghitung nilai. Sebelum menuju persamaan. Perhatikan coding berikut ini.
private void button1_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- AND (NORM) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart1.Series[2].Points.Clear(); chart1.Series[3].Points.Clear(); chart1.Series[4].Points.Clear(); chart1.Series[5].Points.Clear(); chart1.Series[6].Points.Clear(); for (i = 0; i < data ; i++) {private void button1_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- AND (NORM) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart1.Series[2].Points.Clear(); chart1.Series[3].Points.Clear(); chart1.Series[4].Points.Clear(); chart1.Series[5].Points.Clear(); chart1.Series[6].Points.Clear(); for (i = 0; i < data ; i++) {
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- AND (NORM) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart1.Series[0].Points.Clear();
chart1.Series[1].Points.Clear();
chart1.Series[2].Points.Clear();
chart1.Series[3].Points.Clear();
chart1.Series[4].Points.Clear();
chart1.Series[5].Points.Clear();
chart1.Series[6].Points.Clear();
for (i = 0; i < data ; i++)
{
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- AND (NORM) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart1.Series[0].Points.Clear();
chart1.Series[1].Points.Clear();
chart1.Series[2].Points.Clear();
chart1.Series[3].Points.Clear();
chart1.Series[4].Points.Clear();
chart1.Series[5].Points.Clear();
chart1.Series[6].Points.Clear();
for (i = 0; i < data ; i++)
{
Dari Coding diatas dapat di analisa bahwa pada listbox 1 akan memunculkan ("------AND (NORM)-----") sebagai Judul dari program dan ( " x5 x4 x3 x2 x1 x0 y") sebagai header dari data yang akan menunjukan nilai input pada listbox.
Selanjutnya coding (for (i = 0; i < data ; i++) merupakan coding yang menelaskan bahwa I yang digunakan memilik nilai awal nol dan batasan I lebih kecil dari data dimana data yang kita gunakan adalah 64. Berdasarkan coding diatas, dapat di mengerti bahwa data tersebut memiliki nilai awal ) dengan batasan 63.
Pada Coding Visual Studio button AND dapat ditemukan coding yang menunjukan persamaan AND yang digunakan untuk program ini. Berikut adalah coding yang menunjukanpersamaan AND.
{ listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + and_out[i]); chart1.Series[0].Points.AddXY(i, x0[i]); chart1.Series[1].Points.AddXY(i, x1[i] + 2); chart1.Series[2].Points.AddXY(i, x2[i] + 4); chart1.Series[3].Points.AddXY(i, x3[i] + 6); chart1.Series[4].Points.AddXY(i, x4[i] + 8); chart1.Series[5].Points.AddXY(i, x5[i] + 10); chart1.Series[6].Points.AddXY(i, and_out[i] + 12); }{ listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + and_out[i]); chart1.Series[0].Points.AddXY(i, x0[i]); chart1.Series[1].Points.AddXY(i, x1[i] + 2); chart1.Series[2].Points.AddXY(i, x2[i] + 4); chart1.Series[3].Points.AddXY(i, x3[i] + 6); chart1.Series[4].Points.AddXY(i, x4[i] + 8); chart1.Series[5].Points.AddXY(i, x5[i] + 10); chart1.Series[6].Points.AddXY(i, and_out[i] + 12); } Coding tersebut akan menunjukan bahwa setiap inputan data akan menghasikan nilai I yang akan di tampilkan pada listbox serta Chart. Berikut coding yang digunakan untuk menampilkan data pada intercace
{
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + and_out[i]);
chart1.Series[0].Points.AddXY(i, x0[i]);
chart1.Series[1].Points.AddXY(i, x1[i] + 2);
chart1.Series[2].Points.AddXY(i, x2[i] + 4);
chart1.Series[3].Points.AddXY(i, x3[i] + 6);
chart1.Series[4].Points.AddXY(i, x4[i] + 8);
chart1.Series[5].Points.AddXY(i, x5[i] + 10);
chart1.Series[6].Points.AddXY(i, and_out[i] + 12);
}
{
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + and_out[i]);
chart1.Series[0].Points.AddXY(i, x0[i]);
chart1.Series[1].Points.AddXY(i, x1[i] + 2);
chart1.Series[2].Points.AddXY(i, x2[i] + 4);
chart1.Series[3].Points.AddXY(i, x3[i] + 6);
chart1.Series[4].Points.AddXY(i, x4[i] + 8);
chart1.Series[5].Points.AddXY(i, x5[i] + 10);
chart1.Series[6].Points.AddXY(i, and_out[i] + 12);
}
Setelah data ditampilkan dapat dibandingkan dengan hasil perhitungan secara manual. Berikut penulis menggunakan 2 buah sample perhitungan yaitu pada nomor 1 dan 63 dari table kebenaran AND.
Dik : = x0 = 1, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0.
I = x0 . x1 . x2 . x3 . x4 . x5
AND (1) = 1 &0 &0 &0 &0 &0
AND ( 1) = 0
I = x0 . x1 . x2 . x3 . x4 . x5
AND (63) = 1 & 1 &1 &1 & 1 &1
AND (63) = 1
Bila dibandingkan dengan data yang muncul pada Interface program, dapat dibuktikan bahwa hasilnya adalah sama.
Gambar 3.1 Hasil perhitungan menggunakan program ( No 1)
Gambar 3.2 Hasil perhitungan menggunakan program ( No. 63)
AND ANN.
Perbedaan antara AND (Normal) dengan AND (ANN) adalah terdapat pada posisi graphic dan proses penyelesaianya. Bila AND (Normal) menggunakan cara atau persamaan AND yang sesungguhnya maka, AND (ANN) akan menggunakan persamaan berbeda untuk membandingkan apakah nilai AND (ANN) akan sama dengan nilai AND (Normal).
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2; vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2; vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i]; Berikut adalah coding dari persamaan yang digunakan oleh program AND (ANN)
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
Dari persamaan coding tersebut dapat dilihat perbedaanya dengan AND (Normal) yaitu nilai input akan dikalikan dengan bobot dan akan di bandingkan dengan bias untuk memunculkan output.
if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; }if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; }
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
Dari coding diatas dapat dijelaskan bahwa bila nilai (vq[i]) lebih besar dari bias yang kita tentukan, maka Y adalah 1. Sedangkan, bila nilai tersebutlebih kecil daripada bias maka Y dalah 0.
Bila dibandingkan, AND (Normal) dengan AND (ANN) memilik hasil yang sama. Dapat dibuktikan dari hasil yang muncul pada listbox serta graphic adalah sama. Berikut ini adalah gambar graphic yang menunjukan bahwa AND (Normal) memiliki hasil yang sama dengan AND (ANN).
Gambar 3.3 Perbandingan AND (Normal) dengan AND (ANN).
OR pada McCulloch.
OR (Normal)
Sama seperti gerbang AND, Gerbang OR juga memiliki 2 bagian pada program ini, yaitu Gerbang OR dengan metode Normal dan Gerbang OR dengan Metode McCulloch (ANN).
Coding yang digunakan OR sama dengan coding Gerbang AND. Perbedaanya adalah pada saat button OR di aktifkan Graphic AND yang sedang aktif akan di hapus dikarenakan coding sebagai berikut.
private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- OR (NORM) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart1.Series[2].Points.Clear(); chart1.Series[3].Points.Clear(); chart1.Series[4].Points.Clear(); chart1.Series[5].Points.Clear(); chart1.Series[6].Points.Clear();private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- OR (NORM) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart1.Series[2].Points.Clear(); chart1.Series[3].Points.Clear(); chart1.Series[4].Points.Clear(); chart1.Series[5].Points.Clear(); chart1.Series[6].Points.Clear();
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- OR (NORM) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart1.Series[0].Points.Clear();
chart1.Series[1].Points.Clear();
chart1.Series[2].Points.Clear();
chart1.Series[3].Points.Clear();
chart1.Series[4].Points.Clear();
chart1.Series[5].Points.Clear();
chart1.Series[6].Points.Clear();
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- OR (NORM) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart1.Series[0].Points.Clear();
chart1.Series[1].Points.Clear();
chart1.Series[2].Points.Clear();
chart1.Series[3].Points.Clear();
chart1.Series[4].Points.Clear();
chart1.Series[5].Points.Clear();
chart1.Series[6].Points.Clear();
Dari coding diatas, dapat dilihat persamaan dengan coding AND terletak pada bagian dimana listbox1 akan menambah kan data dengan header yang berbeda. Header pada program OR adalah ("---- OR (NORM) ----") sedangkan nilai x yang akan ditambahkan sama dengan AND. Namun, output tidak akan sama karena memiliki proses penyelesaian dengan persamaan dan cara yang berbeda.
Selain itu, Coding diatas juga dapat menghapus graphic yang sudah ada sebelumnya. Dalam kasus ini graphic yang akan di hapus adalah Graphic AND dan akan memunculkan graphic baru. Graphic baru yang dimunculkan adalah graphic OR.
Sama sepert AND, OR juga memiliki persamaan untunk menentukan hasil inputan akhirya melalui table kebenaran sebelumnya. Berikut adalah coding untuk persamaan OR.
or_out[i] = x0[i] " x1[i] " x2[i] " x3[i] " x4[i] " x5[i];or_out[i] = x0[i] " x1[i] " x2[i] " x3[i] " x4[i] " x5[i];
or_out[i] = x0[i] " x1[i] " x2[i] " x3[i] " x4[i] " x5[i];
or_out[i] = x0[i] " x1[i] " x2[i] " x3[i] " x4[i] " x5[i];
Persamaan di atas merupakan fungsi OR ( " ) bila menggunakan perhitungan manual akan menggunakan rumus sebagai berikut.
Z = X + Y…………………………………………………….. ( 1 )
Dengan menggunakanrumus diatas maka dapat dibandingkan antara hasil perhitungan menggunakan rumus secara manual dengan perhitungan program OR (Normal)
Berikut ini penulis menyertakan 2 buah sample untuk membandingkan perhitungan secara manual dengan perhitungan menggunakan program.
Dik = x0 = 1, x1 = 1, x2 = 1, x3 = 1, x4 = 0, x5 = 1.
OR ( 0 ) = 1 " 1 " 1 " 1 " 0 " 1
OR ( 0 ) = 1
Dik = x0 = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0.
OR ( 47) = 0 " 0 " 0 " 0 " 0 " 0
OR ( 47 ) = 0
Gambar 3.4 Hasil perhitungan program nomor 0
Gambar 3.5 Hasil perhitungan program nomor 47
Dengan melihat gambar dan hasil perhitungan diatas, dapat dikatakan hasil yang diinginkan melalui perhitungan manual dan perhitungan proram adalah sama,
OR ( ANN )
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i]; Sama seperti sebelumnya, yang membedakan OR ( Normal ) dan OR ( ANN) adalah proses penyelesaianya serta coding yang digunakan. Selain itu hasil yang akandidapatkan menggunakan cara perhitungan manual denga proses perhitungan program adalah sama.
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
w0[i] = 2; w1[i] = 2; w2[i] = 2; w3[i] = 2; w4[i] = 2; w5[i] = 2;
vq[i] = x0[i] * w0[i] + x1[i] * w1[i] + x2[i] * w2[i] + x3[i] * w3[i] + x4[i] * w4[i] + x5[i] * w5[i];
Dari coding di atas dapat dilihat persamaan yang digunakan sama dengan persamaan AND (ANN) yang membuatberbeda adalah nilaiinputan serta hasil akhir dari perhitungannya. Ketentuan yang digunakan juga sama dengan AND dimana bila nilai vq[i] lebih kecil dari bias maka Y adalah 0, sedangkan bila nilai vq[i] lebih besar dari bias maka Y adalah 1.
if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; }
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
Bila dibandingkan, OR (Normal) dengan OR (ANN) memilik hasil yang sama. Dapat dibuktikan dari hasil yang muncul pada listbox serta graphic adalah sama. Berikut ini adalah gambar graphic yang menunjukan bahwa OR (Normal) memiliki hasil yang sama dengan OR (ANN).
Gambar 3.6 Pebandingan Graphic OR (Normal) dengan OR (ANN).
X-OR Pada McCulloch
Gerbang Logika XOR dengan 6 input bukan merupakan gerbang dasar, oleh karena itu untuk membentuknya dalam gerbang kombinasional diperlukan metode , salah satunya adalah dengan menggunakan Kanaugh Maps. Setelah persamaannya didapatkan maka pemodelan neuron McCulloh and Pitts dapat direalisasikan. Jika digambarkan model peta K-Maps nya untuk XOR dengan 6x input tampak pada gambar 3.7
Gambar 3.7 K-Maps6 input XOR
Berdasarkan peta K-Maps diatas maka persamaan untuk XOR 6 input ini adalah sebagai berikut:
Y= x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1+ x6x5x4x3x2x1
Dari persamaan diatas guna mempermudah maka dapat dirubah seperti bentuk dibawah ini:
U1 = x6x5x4x3x2x1
U2 = x6x5x4x3x2x1
U3 = x6x5x4x3x2x1
U4 = x6x5x4x3x2x1
U5 = x6x5x4x3x2x1
U6 = x6x5x4x3x2x1
U7 = x6x5x4x3x2x1
U8 = x6x5x4x3x2x1
U9 = x6x5x4x3x2x1
U10 = x6x5x4x3x2x1
U11 = x6x5x4x3x2x1
U12 = x6x5x4x3x2x1
U13 = x6x5x4x3x2x1
U14 = x6x5x4x3x2x1
U15 = x6x5x4x3x2x1
U16 = x6x5x4x3x2x1
U17 = x6x5x4x3x2x1
U18 = x6x5x4x3x2x1
U19 = x6x5x4x3x2x1
U20 = x6x5x4x3x2x1
U21 = x6x5x4x3x2x1
U22 = x6x5x4x3x2x1
U23 = x6x5x4x3x2x1
U24 = x6x5x4x3x2x1
U25 = x6x5x4x3x2x1
U26 = x6x5x4x3x2x1
U27 = x6x5x4x3x2x1
U28 = x6x5x4x3x2x1
U29 = x6x5x4x3x2x1
U30 = x6x5x4x3x2x1
U31 = x6x5x4x3x2x1
U32 = x6x5x4x3x2x1
Kemudian untuk mencari nilai Y menggunakan rumus.
yK+1= i=1nWiXiK…………………………………………………….( 2)
Program X-OR ini tidak terlalu berbeda denganOR dan AND. Rumus yang digunakan juga sama. Yang berbeda adalah X-OR tidak akan dibandingkan dengan AND maupun OR. Berikut adalah coding yang digunakan untuk memuncukan inputan data serta persamaan yang digunakan dalam program ini.
for (i = 0; i < data; i++) { vq[i] = 0; for (j = 0; j < 32; j++) //hidden layer 1 { setBobotXOR(); u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j]; if (u >= teta[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; } //hidden layer2 // untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j] * 1; // bobot = 1 } for (i = 0; i < data; i++) { vq[i] = 0; for (j = 0; j < 32; j++) //hidden layer 1 { setBobotXOR(); u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j]; if (u >= teta[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; } //hidden layer2 // untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j] * 1; // bobot = 1 } Karena data yang digunakan berjumlah 32 dan I = 0 maka data akandi mulai dari 0 sampai 31. Coding yang digunakan untuk menjalankan jumlah data adalah.
for (i = 0; i < data; i++)
{
vq[i] = 0;
for (j = 0; j < 32; j++) //hidden layer 1
{
setBobotXOR();
u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j];
if (u >= teta[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
//hidden layer2
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j] * 1; // bobot = 1
}
for (i = 0; i < data; i++)
{
vq[i] = 0;
for (j = 0; j < 32; j++) //hidden layer 1
{
setBobotXOR();
u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j];
if (u >= teta[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
//hidden layer2
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j] * 1; // bobot = 1
}
vq[i] = 0; for (j = 0; j < 32; j++) //hidden layer 1 { vq[i] = 0; for (j = 0; j < 32; j++) //hidden layer 1 {
vq[i] = 0;
for (j = 0; j < 32; j++) //hidden layer 1
{
vq[i] = 0;
for (j = 0; j < 32; j++) //hidden layer 1
{
Jadi data yang akan muncul hanyalah 0-31 dengan J adalah sequential (Berurut).
Sebelum memulai perhitungan,yang harus dilakukan adalah menentukan jumlah bobot yang akan ditentukan. Berikut adalah coding yang diinput untuk mnentukan bobot yang akan digunakan pada X-OR.void setBobotXOR() { w01[0] = -1; w11[0] = -1; w21[0] = -1; w31[0] = -1; w41[0] = -1; w51[0] = 4; teta[0] = 4; w01[1] = -1; w11[1] = -1; w21[1] = -1; w31[1] = -1; w41[1] = 4; w51[1] = -1; teta[1] = 4; w01[2] = -1; w11[2] = -1; w21[2] = -1; w31[2] = 4; w41[2] = -1; w51[2] = -1; teta[2] = 4; w01[3] = -1; w11[3] = -1; w21[3] = -1; w31[3] = 1; w41[3] = 1; w51[3] = 1; teta[3] = 3; w01[4] = -1; w11[4] = -1; w21[4] = 4; w31[4] = -1; w41[4] = -1; w51[4] = -1; teta[4] = 4; w01[5] = -1; w11[5] = -1; w21[5] = 1; w31[5] = -1; w41[5] = 1; w51[5] = 1; teta[5] = 3; w01[6] = -1; w11[6] = -1; w21[6] = 1; w31[6] = 1; w41[6] = -1; w51[6] = 1; teta[6] = 3; w01[7] = -1; w11[7] = -1; w21[7] = 1; w31[7] = 1; w41[7] = 1; w51[7] = -1; teta[7] = 3; w01[8] = -1; w11[8] = 4; w21[8] = -1; w31[8] = -1; w41[8] = -1; w51[8] = -1; teta[8] = 4; w01[9] = -1; w11[9] = 1; w21[9] = -1; w31[9] = -1; w41[9] = 1; w51[9] = 1; teta[9] = 3; w01[10] = -1; w11[10] = 1; w21[10] = -1; w31[10] = 1; w41[10] = -1; w51[10] = 1; teta[10] = 3; w01[11] = -1; w11[11] = 1; w21[11] = -1; w31[11] = 1; w41[11] = 1; w51[11] = -1; teta[11] = 3; w01[12] = -1; w11[12] = 1; w21[12] = 1; w31[12] = -1; w41[12] = -1; w51[12] = 1; teta[12] = 3; w01[13] = -1; w11[13] = 1; w21[13] = 1; w31[13] = -1; w41[13] = 1; w51[13] = -1; teta[13] = 3; w01[14] = -1; w11[14] = 1; w21[14] = 1; w31[14] = 1; w41[14] = -1; w51[14] = -1; teta[14] = 3; w01[15] = -1; w11[15] = 1; w21[15] = 1; w31[15] = 1; w41[15] = 1; w51[15] = 1; teta[15] = 5; w01[16] = 3; w11[16] = -1; w21[16] = -1; w31[16] = -1; w41[16] = -1; w51[16] = -1; teta[16] = 3; w01[17] = 1; w11[17] = -1; w21[17] = -1; w31[17] = -1; w41[17] = 1; w51[17] = 1; teta[17] = 3; w01[18] = 1; w11[18] = -1; w21[18] = -1; w31[18] = 1; w41[18] = -1; w51[18] = 1; teta[18] = 3; w01[19] = 1; w11[19] = -1; w21[19] = -1; w31[19] = 1; w41[19] = 1; w51[19] = -1; teta[19] = 3; w01[20] = 1; w11[20] = -1; w21[20] = 1; w31[20] = -1; w41[20] = -1; w51[20] = 1; teta[20] = 3; w01[21] = 1; w11[21] = -1; w21[21] = 1; w31[21] = -1; w41[21] = 1; w51[21] = -1; teta[21] = 3; w01[22] = 1; w11[22] = -1; w21[22] = 1; w31[22] = 1; w41[22] = -1; w51[22] = -1; teta[22] = 3; w01[23] = 1; w11[23] = -1; w21[23] = 1; w31[23] = 1; w41[23] = 1; w51[23] = 1; teta[23] = 5; w01[24] = 1; w11[24] = 1; w21[24] = -1; w31[24] = -1; w41[24] = -1; w51[24] = 1; teta[24] = 3; w01[25] = 1; w11[25] = 1; w21[25] = -1; w31[25] = -1; w41[25] = 1; w51[25] = -1; teta[25] = 3; w01[26] = 1; w11[26] = 1; w21[26] = -1; w31[26] = 1; w41[26] = -1; w51[26] = -1; teta[26] = 3; w01[27] = 1; w11[27] = 1; w21[27] = -1; w31[27] = 1; w41[27] = 1; w51[27] = 1; teta[27] = 5; w01[28] = 1; w11[28] = 1; w21[28] = 1; w31[28] = -1; w41[28] = -1; w51[28] = -1; teta[28] = 3; w01[29] = 1; w11[29] = 1; w21[29] = 1; w31[29] = -1; w41[29] = 1; w51[29] = 1; teta[29] = 5; w01[30] = 1; w11[30] = 1; w21[30] = 1; w31[30] = 1; w41[30] = -1; w51[30] = 1; teta[30] = 5; w01[31] = 1; w11[31] = 1; w21[31] = 1; w31[31] = 1; w41[31] = 1; w51[31] = -1; teta[31] = 5; }void setBobotXOR() { w01[0] = -1; w11[0] = -1; w21[0] = -1; w31[0] = -1; w41[0] = -1; w51[0] = 4; teta[0] = 4; w01[1] = -1; w11[1] = -1; w21[1] = -1; w31[1] = -1; w41[1] = 4; w51[1] = -1; teta[1] = 4; w01[2] = -1; w11[2] = -1; w21[2] = -1; w31[2] = 4; w41[2] = -1; w51[2] = -1; teta[2] = 4; w01[3] = -1; w11[3] = -1; w21[3] = -1; w31[3] = 1; w41[3] = 1; w51[3] = 1; teta[3] = 3; w01[4] = -1; w11[4] = -1; w21[4] = 4; w31[4] = -1; w41[4] = -1; w51[4] = -1; teta[4] = 4; w01[5] = -1; w11[5] = -1; w21[5] = 1; w31[5] = -1; w41[5] = 1; w51[5] = 1; teta[5] = 3; w01[6] = -1; w11[6] = -1; w21[6] = 1; w31[6] = 1; w41[6] = -1; w51[6] = 1; teta[6] = 3; w01[7] = -1; w11[7] = -1; w21[7] = 1; w31[7] = 1; w41[7] = 1; w51[7] = -1; teta[7] = 3; w01[8] = -1; w11[8] = 4; w21[8] = -1; w31[8] = -1; w41[8] = -1; w51[8] = -1; teta[8] = 4; w01[9] = -1; w11[9] = 1; w21[9] = -1; w31[9] = -1; w41[9] = 1; w51[9] = 1; teta[9] = 3; w01[10] = -1; w11[10] = 1; w21[10] = -1; w31[10] = 1; w41[10] = -1; w51[10] = 1; teta[10] = 3; w01[11] = -1; w11[11] = 1; w21[11] = -1; w31[11] = 1; w41[11] = 1; w51[11] = -1; teta[11] = 3; w01[12] = -1; w11[12] = 1; w21[12] = 1; w31[12] = -1; w41[12] = -1; w51[12] = 1; teta[12] = 3; w01[13] = -1; w11[13] = 1; w21[13] = 1; w31[13] = -1; w41[13] = 1; w51[13] = -1; teta[13] = 3; w01[14] = -1; w11[14] = 1; w21[14] = 1; w31[14] = 1; w41[14] = -1; w51[14] = -1; teta[14] = 3; w01[15] = -1; w11[15] = 1; w21[15] = 1; w31[15] = 1; w41[15] = 1; w51[15] = 1; teta[15] = 5; w01[16] = 3; w11[16] = -1; w21[16] = -1; w31[16] = -1; w41[16] = -1; w51[16] = -1; teta[16] = 3; w01[17] = 1; w11[17] = -1; w21[17] = -1; w31[17] = -1; w41[17] = 1; w51[17] = 1; teta[17] = 3; w01[18] = 1; w11[18] = -1; w21[18] = -1; w31[18] = 1; w41[18] = -1; w51[18] = 1; teta[18] = 3; w01[19] = 1; w11[19] = -1; w21[19] = -1; w31[19] = 1; w41[19] = 1; w51[19] = -1; teta[19] = 3; w01[20] = 1; w11[20] = -1; w21[20] = 1; w31[20] = -1; w41[20] = -1; w51[20] = 1; teta[20] = 3; w01[21] = 1; w11[21] = -1; w21[21] = 1; w31[21] = -1; w41[21] = 1; w51[21] = -1; teta[21] = 3; w01[22] = 1; w11[22] = -1; w21[22] = 1; w31[22] = 1; w41[22] = -1; w51[22] = -1; teta[22] = 3; w01[23] = 1; w11[23] = -1; w21[23] = 1; w31[23] = 1; w41[23] = 1; w51[23] = 1; teta[23] = 5; w01[24] = 1; w11[24] = 1; w21[24] = -1; w31[24] = -1; w41[24] = -1; w51[24] = 1; teta[24] = 3; w01[25] = 1; w11[25] = 1; w21[25] = -1; w31[25] = -1; w41[25] = 1; w51[25] = -1; teta[25] = 3; w01[26] = 1; w11[26] = 1; w21[26] = -1; w31[26] = 1; w41[26] = -1; w51[26] = -1; teta[26] = 3; w01[27] = 1; w11[27] = 1; w21[27] = -1; w31[27] = 1; w41[27] = 1; w51[27] = 1; teta[27] = 5; w01[28] = 1; w11[28] = 1; w21[28] = 1; w31[28] = -1; w41[28] = -1; w51[28] = -1; teta[28] = 3; w01[29] = 1; w11[29] = 1; w21[29] = 1; w31[29] = -1; w41[29] = 1; w51[29] = 1; teta[29] = 5; w01[30] = 1; w11[30] = 1; w21[30] = 1; w31[30] = 1; w41[30] = -1; w51[30] = 1; teta[30] = 5; w01[31] = 1; w11[31] = 1; w21[31] = 1; w31[31] = 1; w41[31] = 1; w51[31] = -1; teta[31] = 5; }Koding tersebut akan menjadi panduan bagi program untuk menginput nilai bobot pada persamaan yang digunakan.
void setBobotXOR()
{
w01[0] = -1; w11[0] = -1; w21[0] = -1; w31[0] = -1; w41[0] = -1; w51[0] = 4; teta[0] = 4;
w01[1] = -1; w11[1] = -1; w21[1] = -1; w31[1] = -1; w41[1] = 4; w51[1] = -1; teta[1] = 4;
w01[2] = -1; w11[2] = -1; w21[2] = -1; w31[2] = 4; w41[2] = -1; w51[2] = -1; teta[2] = 4;
w01[3] = -1; w11[3] = -1; w21[3] = -1; w31[3] = 1; w41[3] = 1; w51[3] = 1; teta[3] = 3;
w01[4] = -1; w11[4] = -1; w21[4] = 4; w31[4] = -1; w41[4] = -1; w51[4] = -1; teta[4] = 4;
w01[5] = -1; w11[5] = -1; w21[5] = 1; w31[5] = -1; w41[5] = 1; w51[5] = 1; teta[5] = 3;
w01[6] = -1; w11[6] = -1; w21[6] = 1; w31[6] = 1; w41[6] = -1; w51[6] = 1; teta[6] = 3;
w01[7] = -1; w11[7] = -1; w21[7] = 1; w31[7] = 1; w41[7] = 1; w51[7] = -1; teta[7] = 3;
w01[8] = -1; w11[8] = 4; w21[8] = -1; w31[8] = -1; w41[8] = -1; w51[8] = -1; teta[8] = 4;
w01[9] = -1; w11[9] = 1; w21[9] = -1; w31[9] = -1; w41[9] = 1; w51[9] = 1; teta[9] = 3;
w01[10] = -1; w11[10] = 1; w21[10] = -1; w31[10] = 1; w41[10] = -1; w51[10] = 1; teta[10] = 3;
w01[11] = -1; w11[11] = 1; w21[11] = -1; w31[11] = 1; w41[11] = 1; w51[11] = -1; teta[11] = 3;
w01[12] = -1; w11[12] = 1; w21[12] = 1; w31[12] = -1; w41[12] = -1; w51[12] = 1; teta[12] = 3;
w01[13] = -1; w11[13] = 1; w21[13] = 1; w31[13] = -1; w41[13] = 1; w51[13] = -1; teta[13] = 3;
w01[14] = -1; w11[14] = 1; w21[14] = 1; w31[14] = 1; w41[14] = -1; w51[14] = -1; teta[14] = 3;
w01[15] = -1; w11[15] = 1; w21[15] = 1; w31[15] = 1; w41[15] = 1; w51[15] = 1; teta[15] = 5;
w01[16] = 3; w11[16] = -1; w21[16] = -1; w31[16] = -1; w41[16] = -1; w51[16] = -1; teta[16] = 3;
w01[17] = 1; w11[17] = -1; w21[17] = -1; w31[17] = -1; w41[17] = 1; w51[17] = 1; teta[17] = 3;
w01[18] = 1; w11[18] = -1; w21[18] = -1; w31[18] = 1; w41[18] = -1; w51[18] = 1; teta[18] = 3;
w01[19] = 1; w11[19] = -1; w21[19] = -1; w31[19] = 1; w41[19] = 1; w51[19] = -1; teta[19] = 3;
w01[20] = 1; w11[20] = -1; w21[20] = 1; w31[20] = -1; w41[20] = -1; w51[20] = 1; teta[20] = 3;
w01[21] = 1; w11[21] = -1; w21[21] = 1; w31[21] = -1; w41[21] = 1; w51[21] = -1; teta[21] = 3;
w01[22] = 1; w11[22] = -1; w21[22] = 1; w31[22] = 1; w41[22] = -1; w51[22] = -1; teta[22] = 3;
w01[23] = 1; w11[23] = -1; w21[23] = 1; w31[23] = 1; w41[23] = 1; w51[23] = 1; teta[23] = 5;
w01[24] = 1; w11[24] = 1; w21[24] = -1; w31[24] = -1; w41[24] = -1; w51[24] = 1; teta[24] = 3;
w01[25] = 1; w11[25] = 1; w21[25] = -1; w31[25] = -1; w41[25] = 1; w51[25] = -1; teta[25] = 3;
w01[26] = 1; w11[26] = 1; w21[26] = -1; w31[26] = 1; w41[26] = -1; w51[26] = -1; teta[26] = 3;
w01[27] = 1; w11[27] = 1; w21[27] = -1; w31[27] = 1; w41[27] = 1; w51[27] = 1; teta[27] = 5;
w01[28] = 1; w11[28] = 1; w21[28] = 1; w31[28] = -1; w41[28] = -1; w51[28] = -1; teta[28] = 3;
w01[29] = 1; w11[29] = 1; w21[29] = 1; w31[29] = -1; w41[29] = 1; w51[29] = 1; teta[29] = 5;
w01[30] = 1; w11[30] = 1; w21[30] = 1; w31[30] = 1; w41[30] = -1; w51[30] = 1; teta[30] = 5;
w01[31] = 1; w11[31] = 1; w21[31] = 1; w31[31] = 1; w41[31] = 1; w51[31] = -1; teta[31] = 5;
}
void setBobotXOR()
{
w01[0] = -1; w11[0] = -1; w21[0] = -1; w31[0] = -1; w41[0] = -1; w51[0] = 4; teta[0] = 4;
w01[1] = -1; w11[1] = -1; w21[1] = -1; w31[1] = -1; w41[1] = 4; w51[1] = -1; teta[1] = 4;
w01[2] = -1; w11[2] = -1; w21[2] = -1; w31[2] = 4; w41[2] = -1; w51[2] = -1; teta[2] = 4;
w01[3] = -1; w11[3] = -1; w21[3] = -1; w31[3] = 1; w41[3] = 1; w51[3] = 1; teta[3] = 3;
w01[4] = -1; w11[4] = -1; w21[4] = 4; w31[4] = -1; w41[4] = -1; w51[4] = -1; teta[4] = 4;
w01[5] = -1; w11[5] = -1; w21[5] = 1; w31[5] = -1; w41[5] = 1; w51[5] = 1; teta[5] = 3;
w01[6] = -1; w11[6] = -1; w21[6] = 1; w31[6] = 1; w41[6] = -1; w51[6] = 1; teta[6] = 3;
w01[7] = -1; w11[7] = -1; w21[7] = 1; w31[7] = 1; w41[7] = 1; w51[7] = -1; teta[7] = 3;
w01[8] = -1; w11[8] = 4; w21[8] = -1; w31[8] = -1; w41[8] = -1; w51[8] = -1; teta[8] = 4;
w01[9] = -1; w11[9] = 1; w21[9] = -1; w31[9] = -1; w41[9] = 1; w51[9] = 1; teta[9] = 3;
w01[10] = -1; w11[10] = 1; w21[10] = -1; w31[10] = 1; w41[10] = -1; w51[10] = 1; teta[10] = 3;
w01[11] = -1; w11[11] = 1; w21[11] = -1; w31[11] = 1; w41[11] = 1; w51[11] = -1; teta[11] = 3;
w01[12] = -1; w11[12] = 1; w21[12] = 1; w31[12] = -1; w41[12] = -1; w51[12] = 1; teta[12] = 3;
w01[13] = -1; w11[13] = 1; w21[13] = 1; w31[13] = -1; w41[13] = 1; w51[13] = -1; teta[13] = 3;
w01[14] = -1; w11[14] = 1; w21[14] = 1; w31[14] = 1; w41[14] = -1; w51[14] = -1; teta[14] = 3;
w01[15] = -1; w11[15] = 1; w21[15] = 1; w31[15] = 1; w41[15] = 1; w51[15] = 1; teta[15] = 5;
w01[16] = 3; w11[16] = -1; w21[16] = -1; w31[16] = -1; w41[16] = -1; w51[16] = -1; teta[16] = 3;
w01[17] = 1; w11[17] = -1; w21[17] = -1; w31[17] = -1; w41[17] = 1; w51[17] = 1; teta[17] = 3;
w01[18] = 1; w11[18] = -1; w21[18] = -1; w31[18] = 1; w41[18] = -1; w51[18] = 1; teta[18] = 3;
w01[19] = 1; w11[19] = -1; w21[19] = -1; w31[19] = 1; w41[19] = 1; w51[19] = -1; teta[19] = 3;
w01[20] = 1; w11[20] = -1; w21[20] = 1; w31[20] = -1; w41[20] = -1; w51[20] = 1; teta[20] = 3;
w01[21] = 1; w11[21] = -1; w21[21] = 1; w31[21] = -1; w41[21] = 1; w51[21] = -1; teta[21] = 3;
w01[22] = 1; w11[22] = -1; w21[22] = 1; w31[22] = 1; w41[22] = -1; w51[22] = -1; teta[22] = 3;
w01[23] = 1; w11[23] = -1; w21[23] = 1; w31[23] = 1; w41[23] = 1; w51[23] = 1; teta[23] = 5;
w01[24] = 1; w11[24] = 1; w21[24] = -1; w31[24] = -1; w41[24] = -1; w51[24] = 1; teta[24] = 3;
w01[25] = 1; w11[25] = 1; w21[25] = -1; w31[25] = -1; w41[25] = 1; w51[25] = -1; teta[25] = 3;
w01[26] = 1; w11[26] = 1; w21[26] = -1; w31[26] = 1; w41[26] = -1; w51[26] = -1; teta[26] = 3;
w01[27] = 1; w11[27] = 1; w21[27] = -1; w31[27] = 1; w41[27] = 1; w51[27] = 1; teta[27] = 5;
w01[28] = 1; w11[28] = 1; w21[28] = 1; w31[28] = -1; w41[28] = -1; w51[28] = -1; teta[28] = 3;
w01[29] = 1; w11[29] = 1; w21[29] = 1; w31[29] = -1; w41[29] = 1; w51[29] = 1; teta[29] = 5;
w01[30] = 1; w11[30] = 1; w21[30] = 1; w31[30] = 1; w41[30] = -1; w51[30] = 1; teta[30] = 5;
w01[31] = 1; w11[31] = 1; w21[31] = 1; w31[31] = 1; w41[31] = 1; w51[31] = -1; teta[31] = 5;
}
u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j]; if (u >= teta[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; }u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j]; if (u >= teta[j]) { y_temp[j] = 1; } else { y_temp[j] = 0; } Setelah niali bobot ditentukan maka program akan berjalan dengan perhitungan menggunakan persamaan yang ada pada coding yaitu.
u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j];
if (u >= teta[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
u = x0[i] * w01[j] + x1[i] * w11[j] + x2[i] * w21[j] + x3[i] * w31[j] + x4[i] * w41[j] + x5[i] * w51[j];
if (u >= teta[j])
{
y_temp[j] = 1;
}
else
{
y_temp[j] = 0;
}
Koding diatas merupakan persamaan yang digunakan dalam X-OR. Selain itu jika biasanya program harus diinput sebanyak jumlah data (persamaannya) dengan menggunakan coding ini program akan terus berjalan sampai data yang diinginkan karena fungsi for dan temp lah yang membuat program ini terus mengulang dengan sendririnya.
Neuron ke-33 merupakan neuron untuk Gerbang OR dimana gerbang ini akan menjadi pembanding dari jumlah ke 32 neuron tadi.
Bila pada neuron ke 33 nilai bias adalah 1 maka nilai dari jumlah ke-32 neuron tadi akan di bandingkan dengan ketentuan sebagai berikut.
vq[i] += y_temp[j] * 1; // bobot = 1 } bias = 1; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } vq[i] += y_temp[j] * 1; // bobot = 1 } bias = 1; if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; }
vq[i] += y_temp[j] * 1; // bobot = 1
}
bias = 1;
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
vq[i] += y_temp[j] * 1; // bobot = 1
}
bias = 1;
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
Setelah neuron dibandingkan maka ketentuan akan memunculkan hasil akhir dimana bila nilai jumlah ke 32 neuron tadi ( vq[i]) lebih besar sama dengan dari bias pada neuron ke 33 maka Y adalah 1. Sedangkan bila nilai jumlah ke 32 neuron tadi ( vq[i]) lebih kecil dari bias pada neuron ke 33 maka Y adalah 0.
istBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12);istBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12); Berikut adalah coding yang akan menampilkan Hasil akhir dalam bentuk grafik seperti berikut.
istBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
istBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
Gambar 3.8 Grafik hasil X-OR.
X-NOR Pada McCulloch.
Sama sepert X-OR. Sebelum direalisasikan dalam bentuk McCulloch kita harus memiliki K-Maps dengan 6 inputterlebih dahulu. Berikut penulih sertakan K-Maps 6 input untuk merealisasikan program McCulloch X-NOR.
Gambar 3.9 K-Maps 6 Inputs X-NOR.
U1 = x6x5x4x3x2x1
U2 = x6x5x4x3x2x1
U3 = x6x5x4x3x2x1
U4 = x6x5x4x3x2x1
U5 = x6x5x4x3x2x1
U6 = x6x5x4x3x2x1
U7 = x6x5x4x3x2x1
U8 = x6x5x4x3x2x1
U9 = x6x5x4x3x2x1
U10 = x6x5x4x3x2x1
U11 = x6x5x4x3x2x1
U12 = x6x5x4x3x2x1
U13 = x6x5x4x3x2x1
U14 = x6x5x4x3x2x1
U15 = x6x5x4x3x2x1
U16 = x6x5x4x3x2x1
U17 = x6x5x4x3x2x1
U18 = x6x5x4x3x2x1
U19 = x6x5x4x3x2x1
U20 = x6x5x4x3x2x1
U21 = x6x5x4x3x2x1
U22 = x6x5x4x3x2x1
U23 = x6x5x4x3x2x1
U24 = x6x5x4x3x2x1
U25 = x6x5x4x3x2x1
U26 = x6x5x4x3x2x1
U27 = x6x5x4x3x2x1
U28 = x6x5x4x3x2x1
U29 = x6x5x4x3x2x1
U30 = x6x5x4x3x2x1
U31 = x6x5x4x3x2x1
U32 = x6x5x4x3x2x1
private void XNOR_btn_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- XNOR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear();private void XNOR_btn_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("---- XNOR (ANN) ----"); listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y "); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart2.Series[2].Points.Clear(); chart2.Series[3].Points.Clear(); chart2.Series[4].Points.Clear(); chart2.Series[5].Points.Clear(); chart2.Series[6].Points.Clear(); Dengan menggunakan K-Maps diatas maka program ini dapat terealisasikan. Sama seperti X-OR, program ini tidak akan dibandingkan dengan hasil dari AND maupun OR. Berikut adalah coding yang akan menjalankan button dalam program ini.
private void XNOR_btn_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- XNOR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
private void XNOR_btn_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("---- XNOR (ANN) ----");
listBox1.Items.Add(" x5 x4 x3 x2 x1 x0 y ");
chart2.Series[0].Points.Clear();
chart2.Series[1].Points.Clear();
chart2.Series[2].Points.Clear();
chart2.Series[3].Points.Clear();
chart2.Series[4].Points.Clear();
chart2.Series[5].Points.Clear();
chart2.Series[6].Points.Clear();
Coding diatas akan mengaktifan button XNOR dengan ketentuan yang telh ditetapkan. Program akan berjalan sesuai dengan persamaan yang kita masukan untuk X-NOR. Program ini akan menggunakan neuron sebanyak 33 dmana neuron dari range 0-31 (32 Neuron) akan irepresentasikan sebagai for (i = 0; i < data; i++) { vq[i] = 0; // untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND for (i = 0; i < data; i++) { vq[i] = 0; // untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND indeks array gerbang AND.
for (i = 0; i < data; i++)
{
vq[i] = 0;
// untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND
for (i = 0; i < data; i++)
{
vq[i] = 0;
// untuk neuron direpresentasikan sebagai indeks array dari neuron 0 - neuron 31, gerbang AND
u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j];u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j];Berikut adalah coding untuk persamaan X-NOR.
u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j];
u = x0[i] * w02[j] + x1[i] * w12[j] + x2[i] * w22[j] + x3[i] * w32[j] + x4[i] * w42[j] + x5[i] * w52[j];
// untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j]*1; // bobot = 1 } bias = 1;// if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } // untuk neuron ke-33, neuron untuk gerbang OR vq[i] += y_temp[j]*1; // bobot = 1 } bias = 1;// if (vq[i] >= bias) { y_out[i] = 1; } else { y_out[i] = 0; } Dengan Persamaan di atas dapat dilihat bahwa persamaan yang digunakan adalah sama dengan persamaan setiap ANN baik itu AND, OR, maupun X-OR. Setelah persamaan ditemukan selanjutnya adalah mencari hasil akhir dengan cara membandingkan jumlah dari 0-31 dengan neuron 32 ( Gerbang OR) dengan ketentuan sebagai berikut.
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j]*1; // bobot = 1
}
bias = 1;//
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
// untuk neuron ke-33, neuron untuk gerbang OR
vq[i] += y_temp[j]*1; // bobot = 1
}
bias = 1;//
if (vq[i] >= bias)
{
y_out[i] = 1;
}
else
{
y_out[i] = 0;
}
Setelah neuron dibandingkan maka ketentuan akan memunculkan hasil akhir dimana bila nilai jumlah ke 32 neuron tadi ( vq[i]) lebih besar sama dengan dari bias pada neuron ke 33 maka Y adalah 1. Sedangkan bila nilai jumlah ke 32 neuron tadi ( vq[i]) lebih kecil dari bias pada neuron ke 33 maka listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12);listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]); chart2.Series[0].Points.AddXY(i, x0[i]); chart2.Series[1].Points.AddXY(i, x1[i] + 2); chart2.Series[2].Points.AddXY(i, x2[i] + 4); chart2.Series[3].Points.AddXY(i, x3[i] + 6); chart2.Series[4].Points.AddXY(i, x4[i] + 8); chart2.Series[5].Points.AddXY(i, x5[i] + 10); chart2.Series[6].Points.AddXY(i, y_out[i] + 12);Y adalah 0. Coding dibawah ini akan menampilkan grafik hasil pencarian X-NOR menggunakan metode ANN.
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
listBox1.Items.Add("No." + i + " " + x5[i] + " , " + x4[i] + " , " + x3[i] + " , " + x2[i] + " , " + x1[i] + " , " + x0[i] + " = " + y_out[i]);
chart2.Series[0].Points.AddXY(i, x0[i]);
chart2.Series[1].Points.AddXY(i, x1[i] + 2);
chart2.Series[2].Points.AddXY(i, x2[i] + 4);
chart2.Series[3].Points.AddXY(i, x3[i] + 6);
chart2.Series[4].Points.AddXY(i, x4[i] + 8);
chart2.Series[5].Points.AddXY(i, x5[i] + 10);
chart2.Series[6].Points.AddXY(i, y_out[i] + 12);
Gambar 3.10 Grafik hasil X-NOR.
void setBobotXNOR() { w02[0] = -1; w12[0] = -1; w22[0] = -1; w32[0] = -1; w42[0] = -1; w52[0] = -1; teta1[0] = 0; w02[1] = -1; w12[1] = -1; w22[1] = -1; w32[1] = -1; w42[1] = 1; w52[1] = 1; teta1[1] = 2; w02[2] = -1; w12[2] = -1; w22[2] = -1; w32[2] = 1; w42[2] = -1; w52[2] = 1; teta1[2] = 2; w02[3] = -1; w12[3] = -1; w22[3] = -1; w32[3] = 1; w42[3] = 1; w52[3] = -1; teta1[3] = 2; w02[4] = -1; w12[4] = -1; w22[4] = 1; w32[4] = -1; w42[4] = -1; w52[4] = 1; teta1[4] = 2; w02[5] = -1; w12[5] = -1; w22[5] = 1; w32[5] = -1; w42[5] = 1; w52[5] = -1; teta1[5] = 2; w02[6] = -1; w12[6] = -1; w22[6] = 1; w32[6] = 1; w42[6] = -1; w52[6] = -1; teta1[6] = 2; w02[7] = -1; w12[7] = -1; w22[7] = 1; w32[7] = 1; w42[7] = 1; w52[7] = 1; teta1[7] = 4; w02[8] = -1; w12[8] = 1; w22[8] = -1; w32[8] = -1; w42[8] = -1; w52[8] = 1; teta1[8] = 2; w02[9] = -1; w12[9] = 1; w22[9] = -1; w32[9] = -1; w42[9] = 1; w52[9] = -1; teta1[9] = 2; w02[10] = -1; w12[10] = 1; w22[10] = -1; w32[10] = 1; w42[10] = -1; w52[10] = -1; teta1[10] = 2; w02[11] = -1; w12[11] = 1; w22[11] = -1; w32[11] = 1; w42[11] = 1; w52[11] = 1; teta1[11] = 4; w02[12] = -1; w12[12] = 1; w22[12] = 1; w32[12] = -1; w42[12] = -1; w52[12] = -1; teta1[12] = 2; w02[13] = -1; w12[13] = 1; w22[13] = 1; w32[13] = -1; w42[13] = 1; w52[13] = 1; teta1[13] = 4; w02[14] = -1; w12[14] = 1; w22[14] = 1; w32[14] = 1; w42[14] = -1; w52[14] = 1; teta1[14] = 4; w02[15] = -1; w12[15] = 1; w22[15] = 1; w32[15] = 1; w42[15] = 1; w52[15] = -1; teta1[15] = 4; w02[16] = 1; w12[16] = -1; w22[16] = -1; w32[16] = -1; w42[16] = -1; w52[16] = 1; teta1[16] = 2; w02[17] = 1; w12[17] = -1; w22[17] = -1; w32[17] = -1; w42[17] = 1; w52[17] = -1; teta1[17] = 2; w02[18] = 1; w12[18] = -1; w22[18] = -1; w32[18] = 1; w42[18] = -1; w52[18] = -1; teta1[18] = 2; w02[19] = 1; w12[19] = -1; w22[19] = -1; w32[19] = 1; w42[19] = 1; w52[19] = 1; teta1[19] = 4; w02[20] = 1; w12[20] = -1; w22[20] = 1; w32[20] = -1; w42[20] = -1; w52[20] = -1; teta1[20] = 2; w02[21] = 1; w12[21] = -1; w22[21] = 1; w32[21] = -1; w42[21] = 1; w52[21] = 1; teta1[21] = 4; w02[22] = 1; w12[22] = -1; w22[22] = 1; w32[22] = 1; w42[22] =-1; w52[22] = 1; teta1[22] = 4; w02[23] = 1; w12[23] = -1; w22[23] = 1; w32[23] = 1; w42[23] = 1; w52[23] = -1; teta1[23] = 4; w02[24] = 1; w12[24] = 1; w22[24] = -1; w32[24] = -1; w42[24] = -1; w52[24] = -1; teta1[24] = 2; w02[25] = 1; w12[25] = 1; w22[25] = -1; w32[25] = -1; w42[25] = 1; w52[25] = 1; teta1[25] = 4; w02[26] = 1; w12[26] = 1; w22[26] = -1; w32[26] = 1; w42[26] = -1; w52[26] = 1; teta1[26] = 4; w02[27] = 1; w12[27] = 1; w22[27] = -1; w32[27] = 1; w42[27] = 1; w52[27] = -1; teta1[27] = 4; w02[28] = 1; w12[28] = 1; w22[28] = 1; w32[28] = -1; w42[28] = -1; w52[28] = 1; teta1[28] = 4; w02[29] = 1; w12[29] = 1; w22[29] = 1; w32[29] = -1; w42[29] = 1; w52[29] = -1; teta1[29] = 4; w02[30] = 1; w12[30] = 1; w22[30] = 1; w32[30] = 1; w42[30] = -1; w52[30] = -1; teta1[30] = 4; w02[31] = 1; w12[31] = 1; w22[31] = 1; w32[31] = 1; w42[31] = 1; w52[31] = 1; teta1[31] = 6; }void setBobotXNOR() { w02[0] = -1; w12[0] = -1; w22[0] = -1; w32[0] = -1; w42[0] = -1; w52[0] = -1; teta1[0] = 0; w02[1] = -1; w12[1] = -1; w22[1] = -1; w32[1] = -1; w42[1] = 1; w52[1] = 1; teta1[1] = 2; w02[2] = -1; w12[2] = -1; w22[2] = -1; w32[2] = 1; w42[2] = -1; w52[2] = 1; teta1[2] = 2; w02[3] = -1; w12[3] = -1; w22[3] = -1; w32[3] = 1; w42[3] = 1; w52[3] = -1; teta1[3] = 2; w02[4] = -1; w12[4] = -1; w22[4] = 1; w32[4] = -1; w42[4] = -1; w52[4] = 1; teta1[4] = 2; w02[5] = -1; w12[5] = -1; w22[5] = 1; w32[5] = -1; w42[5] = 1; w52[5] = -1; teta1[5] = 2; w02[6] = -1; w12[6] = -1; w22[6] = 1; w32[6] = 1; w42[6] = -1; w52[6] = -1; teta1[6] = 2; w02[7] = -1; w12[7] = -1; w22[7] = 1; w32[7] = 1; w42[7] = 1; w52[7] = 1; teta1[7] = 4; w02[8] = -1; w12[8] = 1; w22[8] = -1; w32[8] = -1; w42[8] = -1; w52[8] = 1; teta1[8] = 2; w02[9] = -1; w12[9] = 1; w22[9] = -1; w32[9] = -1; w42[9] = 1; w52[9] = -1; teta1[9] = 2; w02[10] = -1; w12[10] = 1; w22[10] = -1; w32[10] = 1; w42[10] = -1; w52[10] = -1; teta1[10] = 2; w02[11] = -1; w12[11] = 1; w22[11] = -1; w32[11] = 1; w42[11] = 1; w52[11] = 1; teta1[11] = 4; w02[12] = -1; w12[12] = 1; w22[12] = 1; w32[12] = -1; w42[12] = -1; w52[12] = -1; teta1[12] = 2; w02[13] = -1; w12[13] = 1; w22[13] = 1; w32[13] = -1; w42[13] = 1; w52[13] = 1; teta1[13] = 4; w02[14] = -1; w12[14] = 1; w22[14] = 1; w32[14] = 1; w42[14] = -1; w52[14] = 1; teta1[14] = 4; w02[15] = -1; w12[15] = 1; w22[15] = 1; w32[15] = 1; w42[15] = 1; w52[15] = -1; teta1[15] = 4; w02[16] = 1; w12[16] = -1; w22[16] = -1; w32[16] = -1; w42[16] = -1; w52[16] = 1; teta1[16] = 2; w02[17] = 1; w12[17] = -1; w22[17] = -1; w32[17] = -1; w42[17] = 1; w52[17] = -1; teta1[17] = 2; w02[18] = 1; w12[18] = -1; w22[18] = -1; w32[18] = 1; w42[18] = -1; w52[18] = -1; teta1[18] = 2; w02[19] = 1; w12[19] = -1; w22[19] = -1; w32[19] = 1; w42[19] = 1; w52[19] = 1; teta1[19] = 4; w02[20] = 1; w12[20] = -1; w22[20] = 1; w32[20] = -1; w42[20] = -1; w52[20] = -1; teta1[20] = 2; w02[21] = 1; w12[21] = -1; w22[21] = 1; w32[21] = -1; w42[21] = 1; w52[21] = 1; teta1[21] = 4; w02[22] = 1; w12[22] = -1; w22[22] = 1; w32[22] = 1; w42[22] =-1; w52[22] = 1; teta1[22] = 4; w02[23] = 1; w12[23] = -1; w22[23] = 1; w32[23] = 1; w42[23] = 1; w52[23] = -1; teta1[23] = 4; w02[24] = 1; w12[24] = 1; w22[24] = -1; w32[24] = -1; w42[24] = -1; w52[24] = -1; teta1[24] = 2; w02[25] = 1; w12[25] = 1; w22[25] = -1; w32[25] = -1; w42[25] = 1; w52[25] = 1; teta1[25] = 4; w02[26] = 1; w12[26] = 1; w22[26] = -1; w32[26] = 1; w42[26] = -1; w52[26] = 1; teta1[26] = 4; w02[27] = 1; w12[27] = 1; w22[27] = -1; w32[27] = 1; w42[27] = 1; w52[27] = -1; teta1[27] = 4; w02[28] = 1; w12[28] = 1; w22[28] = 1; w32[28] = -1; w42[28] = -1; w52[28] = 1; teta1[28] = 4; w02[29] = 1; w12[29] = 1; w22[29] = 1; w32[29] = -1; w42[29] = 1; w52[29] = -1; teta1[29] = 4; w02[30] = 1; w12[30] = 1; w22[30] = 1; w32[30] = 1; w42[30] = -1; w52[30] = -1; teta1[30] = 4; w02[31] = 1; w12[31] = 1; w22[31] = 1; w32[31] = 1; w42[31] = 1; w52[31] = 1; teta1[31] = 6; } Hal terpenting dalam program ini adalah pengaturan nilai bobot. Berikut penulis sertakan bobot yang dipalkai.
void setBobotXNOR()
{
w02[0] = -1; w12[0] = -1; w22[0] = -1; w32[0] = -1; w42[0] = -1; w52[0] = -1; teta1[0] = 0;
w02[1] = -1; w12[1] = -1; w22[1] = -1; w32[1] = -1; w42[1] = 1; w52[1] = 1; teta1[1] = 2;
w02[2] = -1; w12[2] = -1; w22[2] = -1; w32[2] = 1; w42[2] = -1; w52[2] = 1; teta1[2] = 2;
w02[3] = -1; w12[3] = -1; w22[3] = -1; w32[3] = 1; w42[3] = 1; w52[3] = -1; teta1[3] = 2;
w02[4] = -1; w12[4] = -1; w22[4] = 1; w32[4] = -1; w42[4] = -1; w52[4] = 1; teta1[4] = 2;
w02[5] = -1; w12[5] = -1; w22[5] = 1; w32[5] = -1; w42[5] = 1; w52[5] = -1; teta1[5] = 2;
w02[6] = -1; w12[6] = -1; w22[6] = 1; w32[6] = 1; w42[6] = -1; w52[6] = -1; teta1[6] = 2;
w02[7] = -1; w12[7] = -1; w22[7] = 1; w32[7] = 1; w42[7] = 1; w52[7] = 1; teta1[7] = 4;
w02[8] = -1; w12[8] = 1; w22[8] = -1; w32[8] = -1; w42[8] = -1; w52[8] = 1; teta1[8] = 2;
w02[9] = -1; w12[9] = 1; w22[9] = -1; w32[9] = -1; w42[9] = 1; w52[9] = -1; teta1[9] = 2;
w02[10] = -1; w12[10] = 1; w22[10] = -1; w32[10] = 1; w42[10] = -1; w52[10] = -1; teta1[10] = 2;
w02[11] = -1; w12[11] = 1; w22[11] = -1; w32[11] = 1; w42[11] = 1; w52[11] = 1; teta1[11] = 4;
w02[12] = -1; w12[12] = 1; w22[12] = 1; w32[12] = -1; w42[12] = -1; w52[12] = -1; teta1[12] = 2;
w02[13] = -1; w12[13] = 1; w22[13] = 1; w32[13] = -1; w42[13] = 1; w52[13] = 1; teta1[13] = 4;
w02[14] = -1; w12[14] = 1; w22[14] = 1; w32[14] = 1; w42[14] = -1; w52[14] = 1; teta1[14] = 4;
w02[15] = -1; w12[15] = 1; w22[15] = 1; w32[15] = 1; w42[15] = 1; w52[15] = -1; teta1[15] = 4;
w02[16] = 1; w12[16] = -1; w22[16] = -1; w32[16] = -1; w42[16] = -1; w52[16] = 1; teta1[16] = 2;
w02[17] = 1; w12[17] = -1; w22[17] = -1; w32[17] = -1; w42[17] = 1; w52[17] = -1; teta1[17] = 2;
w02[18] = 1; w12[18] = -1; w22[18] = -1; w32[18] = 1; w42[18] = -1; w52[18] = -1; teta1[18] = 2;
w02[19] = 1; w12[19] = -1; w22[19] = -1; w32[19] = 1; w42[19] = 1; w52[19] = 1; teta1[19] = 4;
w02[20] = 1; w12[20] = -1; w22[20] = 1; w32[20] = -1; w42[20] = -1; w52[20] = -1; teta1[20] = 2;
w02[21] = 1; w12[21] = -1; w22[21] = 1; w32[21] = -1; w42[21] = 1; w52[21] = 1; teta1[21] = 4;
w02[22] = 1; w12[22] = -1; w22[22] = 1; w32[22] = 1; w42[22] =-1; w52[22] = 1; teta1[22] = 4;
w02[23] = 1; w12[23] = -1; w22[23] = 1; w32[23] = 1; w42[23] = 1; w52[23] = -1; teta1[23] = 4;
w02[24] = 1; w12[24] = 1; w22[24] = -1; w32[24] = -1; w42[24] = -1; w52[24] = -1; teta1[24] = 2;
w02[25] = 1; w12[25] = 1; w22[25] = -1; w32[25] = -1; w42[25] = 1; w52[25] = 1; teta1[25] = 4;
w02[26] = 1; w12[26] = 1; w22[26] = -1; w32[26] = 1; w42[26] = -1; w52[26] = 1; teta1[26] = 4;
w02[27] = 1; w12[27] = 1; w22[27] = -1; w32[27] = 1; w42[27] = 1; w52[27] = -1; teta1[27] = 4;
w02[28] = 1; w12[28] = 1; w22[28] = 1; w32[28] = -1; w42[28] = -1; w52[28] = 1; teta1[28] = 4;
w02[29] = 1; w12[29] = 1; w22[29] = 1; w32[29] = -1; w42[29] = 1; w52[29] = -1; teta1[29] = 4;
w02[30] = 1; w12[30] = 1; w22[30] = 1; w32[30] = 1; w42[30] = -1; w52[30] = -1; teta1[30] = 4;
w02[31] = 1; w12[31] = 1; w22[31] = 1; w32[31] = 1; w42[31] = 1; w52[31] = 1; teta1[31] = 6;
}
void setBobotXNOR()
{
w02[0] = -1; w12[0] = -1; w22[0] = -1; w32[0] = -1; w42[0] = -1; w52[0] = -1; teta1[0] = 0;
w02[1] = -1; w12[1] = -1; w22[1] = -1; w32[1] = -1; w42[1] = 1; w52[1] = 1; teta1[1] = 2;
w02[2] = -1; w12[2] = -1; w22[2] = -1; w32[2] = 1; w42[2] = -1; w52[2] = 1; teta1[2] = 2;
w02[3] = -1; w12[3] = -1; w22[3] = -1; w32[3] = 1; w42[3] = 1; w52[3] = -1; teta1[3] = 2;
w02[4] = -1; w12[4] = -1; w22[4] = 1; w32[4] = -1; w42[4] = -1; w52[4] = 1; teta1[4] = 2;
w02[5] = -1; w12[5] = -1; w22[5] = 1; w32[5] = -1; w42[5] = 1; w52[5] = -1; teta1[5] = 2;
w02[6] = -1; w12[6] = -1; w22[6] = 1; w32[6] = 1; w42[6] = -1; w52[6] = -1; teta1[6] = 2;
w02[7] = -1; w12[7] = -1; w22[7] = 1; w32[7] = 1; w42[7] = 1; w52[7] = 1; teta1[7] = 4;
w02[8] = -1; w12[8] = 1; w22[8] = -1; w32[8] = -1; w42[8] = -1; w52[8] = 1; teta1[8] = 2;
w02[9] = -1; w12[9] = 1; w22[9] = -1; w32[9] = -1; w42[9] = 1; w52[9] = -1; teta1[9] = 2;
w02[10] = -1; w12[10] = 1; w22[10] = -1; w32[10] = 1; w42[10] = -1; w52[10] = -1; teta1[10] = 2;
w02[11] = -1; w12[11] = 1; w22[11] = -1; w32[11] = 1; w42[11] = 1; w52[11] = 1; teta1[11] = 4;
w02[12] = -1; w12[12] = 1; w22[12] = 1; w32[12] = -1; w42[12] = -1; w52[12] = -1; teta1[12] = 2;
w02[13] = -1; w12[13] = 1; w22[13] = 1; w32[13] = -1; w42[13] = 1; w52[13] = 1; teta1[13] = 4;
w02[14] = -1; w12[14] = 1; w22[14] = 1; w32[14] = 1; w42[14] = -1; w52[14] = 1; teta1[14] = 4;
w02[15] = -1; w12[15] = 1; w22[15] = 1; w32[15] = 1; w42[15] = 1; w52[15] = -1; teta1[15] = 4;
w02[16] = 1; w12[16] = -1; w22[16] = -1; w32[16] = -1; w42[16] = -1; w52[16] = 1; teta1[16] = 2;
w02[17] = 1; w12[17] = -1; w22[17] = -1; w32[17] = -1; w42[17] = 1; w52[17] = -1; teta1[17] = 2;
w02[18] = 1; w12[18] = -1; w22[18] = -1; w32[18] = 1; w42[18] = -1; w52[18] = -1; teta1[18] = 2;
w02[19] = 1; w12[19] = -1; w22[19] = -1; w32[19] = 1; w42[19] = 1; w52[19] = 1; teta1[19] = 4;
w02[20] = 1; w12[20] = -1; w22[20] = 1; w32[20] = -1; w42[20] = -1; w52[20] = -1; teta1[20] = 2;
w02[21] = 1; w12[21] = -1; w22[21] = 1; w32[21] = -1; w42[21] = 1; w52[21] = 1; teta1[21] = 4;
w02[22] = 1; w12[22] = -1; w22[22] = 1; w32[22] = 1; w42[22] =-1; w52[22] = 1; teta1[22] = 4;
w02[23] = 1; w12[23] = -1; w22[23] = 1; w32[23] = 1; w42[23] = 1; w52[23] = -1; teta1[23] = 4;
w02[24] = 1; w12[24] = 1; w22[24] = -1; w32[24] = -1; w42[24] = -1; w52[24] = -1; teta1[24] = 2;
w02[25] = 1; w12[25] = 1; w22[25] = -1; w32[25] = -1; w42[25] = 1; w52[25] = 1; teta1[25] = 4;
w02[26] = 1; w12[26] = 1; w22[26] = -1; w32[26] = 1; w42[26] = -1; w52[26] = 1; teta1[26] = 4;
w02[27] = 1; w12[27] = 1; w22[27] = -1; w32[27] = 1; w42[27] = 1; w52[27] = -1; teta1[27] = 4;
w02[28] = 1; w12[28] = 1; w22[28] = 1; w32[28] = -1; w42[28] = -1; w52[28] = 1; teta1[28] = 4;
w02[29] = 1; w12[29] = 1; w22[29] = 1; w32[29] = -1; w42[29] = 1; w52[29] = -1; teta1[29] = 4;
w02[30] = 1; w12[30] = 1; w22[30] = 1; w32[30] = 1; w42[30] = -1; w52[30] = -1; teta1[30] = 4;
w02[31] = 1; w12[31] = 1; w22[31] = 1; w32[31] = 1; w42[31] = 1; w52[31] = 1; teta1[31] = 6;
}
ANALISA LMS.
Tujuan LMS adalah untuk mencari nilai target dengan nilai error sekecil mungkin berikut adalah coding yang digunakan sebagai inisialisasi dalam progam ini.
t = int.Parse(TextBox1.Text); u0 = double.Parse(TextBox2.Text); alpha = int.Parse(TextBox3.Text); errlim = double.Parse(TextBox4.Text);t = int.Parse(TextBox1.Text); u0 = double.Parse(TextBox2.Text); alpha = int.Parse(TextBox3.Text); errlim = double.Parse(TextBox4.Text);
t = int.Parse(TextBox1.Text);
u0 = double.Parse(TextBox2.Text);
alpha = int.Parse(TextBox3.Text);
errlim = double.Parse(TextBox4.Text);
t = int.Parse(TextBox1.Text);
u0 = double.Parse(TextBox2.Text);
alpha = int.Parse(TextBox3.Text);
errlim = double.Parse(TextBox4.Text);
Gambar 3.11 Inisialisasi
Dari Gambar diatas dapat dijelaskan melalu coding dimana Tau adalah target, u0 sebagai nilai yang digunakan untuk mencari u, alpha sebagai salah satu masukan nilai dan epsilon sebagai errorlimit yang menjadi batasan error dalam mendapatkan nilai target.
Berikut adalah hasil dari 2x percobaan dengan inisilalisasi yang sama guna mencari target nilai AND dengan metode ANN.
Gambar 3.12 Percobaan Pertama LMS.
Dari hasil percobaan pertama diketahui program membutuhkan waktu 115x epoch untuk mendapatkan target sebessar 300 dengan errorlimit 0.004993%.
Gambar 3.13 Percobaan ke 2 LMS (AND).
Dari hasil percobaan pertama diketahui program membutuhkan waktu 295 epoch untuk mendapatkan target sebessar 300 dengan errorlimit 0.0499%.
Selanjutnya adalah menggunakan program LMS untuk mencari hasil OR dengan metode ANN. Cara yang digunakan sama. Berikut adalah hasil 2x percobaan menggunakan program LMS.
Gambar 3.14 Hasil percobaan pertama pencarian nilai OR dengan metode ANN.
Dari percobaan diatas dapat dilihat bahwa untuk mencapai target 500 dengan batasan error 0.005% dibutuhkan 28 epoch dan error sebesar 0.00496.
Gambar 3.15 Hasil percobaan kedua pencarian nilai OR dengan metode ANN
Dari percobaan diatas dapat dilihat bahwa untuk mencapai target 500 dengan batasan error 0.005% dibutuhkan 32 epoch dan error sebesar 0.00481.
Nilai W yang muncul pada listbox 4 adalah listbox yang akan memuncukan nilai random yang akan di proses menggunakan error guna mencapai nilai y yang diinginkan sesuai dengan data yang diberikan.
private void test() { for (i = 0; i <= 15; i++) { if (y[i] > 0.8) { actual[i] = 1; } else { actual[i] = 0; } ListBox3.Items.Add("y " + i + " = " + y[i] + " actual = " + actual[i]); } }private void test() { for (i = 0; i <= 15; i++) { if (y[i] > 0.8) { actual[i] = 1; } else { actual[i] = 0; } ListBox3.Items.Add("y " + i + " = " + y[i] + " actual = " + actual[i]); } }Perhatikan coding berikut ini.
private void test()
{
for (i = 0; i <= 15; i++)
{
if (y[i] > 0.8)
{
actual[i] = 1;
}
else
{
actual[i] = 0;
}
ListBox3.Items.Add("y " + i + " = " + y[i] + " actual = " + actual[i]);
}
}
private void test()
{
for (i = 0; i <= 15; i++)
{
if (y[i] > 0.8)
{
actual[i] = 1;
}
else
{
actual[i] = 0;
}
ListBox3.Items.Add("y " + i + " = " + y[i] + " actual = " + actual[i]);
}
}
Dari coding ini dapat dilihat bahwa jika y(i) lebih besar
Bab IV
Kesimpulan
Kesimpulan yang dapat di ambil dari analisa di atas adalah.
Perbedaan antara Normal dan ANN hanyalah terletak pada rumus persamaan-nya saja.
Nilai normal akan dibandingkan dengan nilai ANN bila nilai yang dibandingkan berbeda, maka ada kesalahan dalam program.
Pada ANN akan dikalikan dengan bobot sedangkan pada nilai normal tidak dikalikan dengan bobot. Bobot dapat di tentukan sendiri.
Nilai X-OR dan X-NOR memiliki jumlah neuron yang sama dimana neuron pada range 0-31 ( 32 Neuron) akan menjadi array AND. Setelah Array AND dijumlahkan maka akan di bandingkan dengan neuron ke 33 untuk mendapatkan nilai akhir ( Y ).
Pada proses normal nilai tidak akan di bandingkan dengan bias , sedangkan pada proses ANN nilai akan dibandingkan dengan bias menggunakan ketentuan tertentu.
LMS bertujuan untuk mencapai nilai target dengan nilai error yang lebih kecil daripada errorlimit.
Pencarian dengan pengulangan 2x memiliki nilai error limit dan epoch yang berbeda untuk mencapai target yang diinginkan.
AND dan OR menggunakan metode ANN jika menggunakan program LMS akan lebih mudah karena target dan error dapat kita tentukan sesuai keinginan kita.
Daftar Pustaka.
Wikipedia, the free encyclopedia.
Suyanto. 2014. Artificial Inteligent Revisi kedua. Jakarta
Wahyu Setyo Pambudi, ST., MT. Modul Kecerdasan Buatan. Aplikasi Logika AND, OR, X_OR, XNOR empat input dengan metode jaringan McCulloh and Pitts