Anda di halaman 1dari 82

KATA PENGANTAR

Assalamu'alaikum warahmatullah wabarakatuh.

Puji dan syukur kami ucapkan kepada Allah SWT yang telah melimpahkan
rahmat dan hidayah-Nya, sehingga saya dapat menyusun laporan praktik kendali
cerdas hingga selesai. Dalam penyusunan laporan praktik kendali cerdas ini tidak
lepas dari dukungan berbagai pihak. Oleh karena itu, pada kesempatan ini saya
menyampaikan ucapan terima kasih kepada:
1. Orang tua kami, yang selalu memberikan semangat, motivasi, dan lain
sebagainya.
2. Bapak Dr. Haryanto M, Pd., M.T. yang telah memberikan bimbingan.
3. Teman-teman semua yang telah memberikan dukungan sehingga penyusunan
laporan ini dapat terselesaikan.
4. Dan semua pihak yang tidak bisa di sebutkan satu-persatu, yang telah
meberikan masukan dan ide dalam penyusunan laporan ini.
Akhirnya, penulis menyadari bahwa masih banyak kekurangan dalam
penyusunan laporan praktik kendali cerdas ini baik dari segi penulisan, bahasa
yang digunakan, maupun dari isi laporan praktik kendali cerdas. Karena
keterbatasan pengetahuan dan kemampuan, maka dari itu kritik dan saran yang
membangun dari semua pihak yang terkait sangat diharapkan, sehingga dapat
digunakan sebagai penyempurnaan laporan berikutnya. Demikian kata pengantar
ini saya buat, semoga dapat bermanfaat, khususnya bagi diri pribadi dan pembaca
pada umumnya.

Wssalamu'alaikum warahmatullah wabarakatuh.

Yogyakarta, 05 Juni 2016

Penyusun

ii
DAFTAR ISI

KATA PENGANTAR ........................................................................................... ii

DAFTAR ISI ......................................................................................................... iii

APLIKASI FUZZY UNTUK PENGATURAN LAMPU LALU LINTAS ...... 1


A. Program Pengaturan Lampu Lalu Lintas ......................................................... 1
B. Tampilan Program Saat Dijalankan ............................................................... 11

APLIKASI FUZZY LOGIC CONTROLLER UNTUK PENGENDALI


PENERANGAN RUANGAN ............................................................................. 13
A. Pendahuluan ................................................................................................... 13
B. Pembahasan .................................................................................................... 13
1. Penjelasan Pengendali Penerangan Ruangan .......................................... 13
2. Diagram Alir Pengendali Penerangan Ruangan ..................................... 15
3. Proses Perhitungan .................................................................................. 15
C. Program Pengendali Penerangan Ruangan Pada Visual Studio .................... 17
D. Hasil Program visual ...................................................................................... 21
E. Kesimpulan .................................................................................................... 23

APLIKASI JARINGAN SYARAF TIRUAN MC CULLOCH, HEBB,


PERCEPTRON, DAN DELTA ROOL UNTUK PENGENALAN POLA
GERBANG SERTA MAX NET UNTUK MENENTUKAN ANGKA
TERBESAR ......................................................................................................... 24
A. Arsitektur Jaringan ......................................................................................... 24
1. Model McCulloch................................................................................... 24
2. Model Hebb dan Perceptron ................................................................... 24
3. Model Delta Rool ................................................................................... 25
4. Model Max Net ...................................................................................... 25
B. Diagram Alir .................................................................................................. 25
1. Model Mc Culloch.................................................................................. 25
2. Model Hebb, Perceptron, dan Delta Rool .............................................. 26
C. Program McCulloch, Hebb, Max Net, Perceptron, dan Delta Rool............... 27
D. Tampilan Saat Progam Dijalankan ................................................................ 46

APLIKASI JARINGAN SYARAF TIRUAN MODEL BACK PROPAGASI


UNTUK PENGENALAN POLA GERBANG .................................................. 51
A. Arsitektur Jaringan ......................................................................................... 51
B. Program Back Propagasi ................................................................................ 51
C. Hasil Program Setelah Dijalankan ................................................................. 58

ALGORITMA GENETIKA ............................................................................... 60


A. Diagram Alir Program Algoritma Genetika .................................................. 60
B. Program Algoritma Genetika ......................................................................... 61
C. Hasil Program Setelah Dijalankan ................................................................. 72

iii
BEBERAPA APLIKASI JARINGAN SYARAF TIRUAN ............................ 76
A. Aplikasi Pengenalan Ucapan Dengan Jaringan Syaraf Tiruan Propagasi Balik
Untuk Pengendalian Robot Bergerak .................................................................... 76

BEBERAPA APLIKASI ALGORITMA GENETIKA ................................... 78


A. Implementasi Algoritma Genetika pada Mikrokontroler MCS51Untuk
Mencari Rute Terpendek ....................................................................................... 78
B. Implementasi Algoritma Genetika Untuk Optimasi Penggunaan Lahan
Pertanian................................................................................................................ 78

iv
APLIKASI FUZZY UNTUK PENGATURAN LAMPU LALU LINTAS

A. Program Pengaturan Lampu Lalu Lintas


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TRAFFIC_LIGHT
{
public partial class Form1 : Form
{
int a, b, c, d,KP1, KP2, KP3, KP4, LL1, LL2, LL3, LL4,detik;
int i,j,k,l,meraha,kuninga,hijaua,merahb,kuningb,hijaub;
int merahc,kuningc,hijauc,merahd,kuningd,hijaud,
merahaa,merahbb,merahcc,merahdd;
public Form1()
{
InitializeComponent();
}
//=========================================================
private void trackBar1_Scroll(object sender, EventArgs e)
{
KP1 = trackBar1.Value;
kepadatan1.Text = Convert.ToString(KP1);
LL1 = 180-180*(100-KP1)/100;
lamahijau1.Text = Convert.ToString(LL1);
}

private void trackBar2_Scroll(object sender, EventArgs e)


{
KP2 = trackBar2.Value;
kepadatan2.Text = Convert.ToString(KP2);
LL2 = 180 - 180 * (100 - KP2) / 100;
lamahijau2.Text = Convert.ToString(LL2);
}

1
private void trackBar3_Scroll(object sender, EventArgs e)
{
KP3 = trackBar3.Value;
kepadatan3.Text = Convert.ToString(KP3);
LL3 = 180 - 180 * (100 - KP3) / 100;
lamahijau3.Text = Convert.ToString(LL3);
}

private void trackBar4_Scroll(object sender, EventArgs e)


{
KP4 = trackBar4.Value;
kepadatan4.Text = Convert.ToString(KP4);
LL4 = 180 - 180 * (100 - KP4) / 100;
lamahijau4.Text = Convert.ToString(LL4);
}
//=========================================================
private void start_Click(object sender, EventArgs e)
{
a = 180 - 180 * (100 - KP1) / 100;
b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100;
d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c ;
i = 0; j = 0; k = 0; l = 0;
kuning1.Visible = false; hijau1.Visible = false; kuning2.Visible = false;
hijau2.Visible = false;
kuning3.Visible = false; hijau3.Visible = false; kuning4.Visible = false;
hijau4.Visible = false;
h1.Visible = false; k1.Visible = false; h11.Visible = false;
k11.Visible = false;
h2.Visible = false; k2.Visible = false; h22.Visible = false;
k22.Visible = false;
h3.Visible = false; k3.Visible = false; h33.Visible = false;
k33.Visible = false;
h4.Visible = false; k4.Visible = false; h44.Visible = false;
k44.Visible = false;
if (a >= b && a >= c && a >= d) { timer1.Enabled = true; }
if (b > a && b >= c && b >= d) { timer2.Enabled = true; }
if (c > a && c > b && c > d) { timer3.Enabled = true; }
if (d > a && d > b && d >= c) { timer4.Enabled = true; }
}

2
//=========================================================
private void timer1_Tick(object sender, EventArgs e)
{
i = 1;
detik = a--;
detik1.Text = detik.ToString();
merah1.Visible = false; kuning1.Visible = false; hijau1.Visible = true;
m1.Visible = false; k1.Visible = false; h1.Visible = true;
m11.Visible = false; k11.Visible = false; h11.Visible = true;
if (detik <= 5 && detik >= 0)
{
merah1.Visible = false; kuning1.Visible = true; hijau1.Visible = false;
m1.Visible = false; k1.Visible = true; h1.Visible = false;
m11.Visible = false; k11.Visible = true; h11.Visible = false;
}
if (detik <= 0)
{
timer1.Stop();
merah1.Visible = true; kuning1.Visible = false; hijau1.Visible = false;
m1.Visible = true; k1.Visible = false; h1.Visible = false;
m11.Visible = true; k11.Visible = false; h11.Visible = false;
if (i == 1 && j == 0 && k == 0 && l == 0)
{
if (b > c && b > d) { timer2.Enabled = true; }
if (c > b && c > d) { timer3.Enabled = true; }
if (d > b && d > c) { timer4.Enabled = true; }
if (b >= c && b >= d) { timer2.Enabled = true; }
if (b == c && b > d) { timer2.Enabled = true; }
if (c > b && c == d) { timer3.Enabled = true; }
if (d == b && d > c) { timer4.Enabled = true; }
}
if (i == 1 && j == 1 && k == 0 && l == 0)
{
if (c > d) { timer3.Enabled = true; }
if (d > c) { timer4.Enabled = true; }
}
if (i == 1 && j == 0 && k == 1 && l == 0)
{
if (b > d) { timer2.Enabled = true; }
if (d > b) { timer4.Enabled = true; }
}
if (i == 1 && j == 0 && k == 0 && l == 1)

3
{
if (b > c) { timer2.Enabled = true; }
if (c > d) { timer3.Enabled = true; }
}
if (i == 1 && j == 1 && k == 1 && l == 0)
{
a = 180 - 180 * (100 - KP1) / 100;
b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100;
d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d;
merahc = a + b + d; merahd = a + b + c ;
timer4.Enabled = true;
}
if (i == 1 && j == 1 && k == 0 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100;
b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100;
d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d;
merahc = a + b + d; merahd = a + b + c ;
timer3.Enabled = true;
}
if (i == 1 && j == 0 && k == 1 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100;
b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100;
d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d;
merahc = a + b + d; merahd = a + b + c;
timer2.Enabled = true;
}
if (i == 1 && j == 1 && k == 1 && l == 1)
{
i = 0; j = 0; k = 0; l = 0;
if (a >= b && a >= c && a >= d) { timer1.Enabled = true; }
if (b > a && b >= c && b >= d) { timer2.Enabled = true; }
if (c > a && c > b && c > d) { timer3.Enabled = true; }
if (d > a && d > b && d >= c) { timer4.Enabled = true; }
}

4
}
}
//=========================================================
private void timer2_Tick(object sender, EventArgs e)
{
j = 1;
detik = b--;
detik2.Text = detik.ToString();
merah2.Visible = false; hijau2.Visible = true; kuning2.Visible = false;
m2.Visible = false; k2.Visible = false; h2.Visible = true;
m22.Visible = false; k22.Visible = false; h22.Visible = true;
if (detik <= 5 && detik >= 0)
{
merah2.Visible = false; hijau2.Visible = false; kuning2.Visible = true;
m2.Visible = false; k2.Visible = true; h2.Visible = false;
m22.Visible = false; k22.Visible = true; h22.Visible = false;
}
if (detik <= 0)
{
timer2.Stop();
merah2.Visible = true; hijau2.Visible = false; kuning2.Visible = false;
m2.Visible = true; k2.Visible = false; h2.Visible = false;
m22.Visible = true; k22.Visible = false; h22.Visible = false;
if (i == 0 && j == 1 && k == 0 && l == 0)
{
if (a > c && a > d) { timer1.Enabled = true; }
if (c > a && c > d) { timer3.Enabled = true; }
if (d > a && d > c) { timer4.Enabled = true; }
if (a >= c && a >= d) { timer1.Enabled = true; }
if (a == c && a > d) { timer1.Enabled = true; }
if (c > a && c == d) { timer3.Enabled = true; }
if (d == a && d > c) { timer4.Enabled = true; }
}
if (i == 0 && j == 1 && k == 1 && l == 0)
{
if (a >= d) { timer1.Enabled = true; }
if (d > a) { timer4.Enabled = true; }
}
if (i == 0 && j == 1 && k == 0 && l == 1)
{
if (a >= c) { timer1.Enabled = true; }
if (c > a) { timer3.Enabled = true; }

5
}
if (i == 1 && j == 1 && k == 0 && l == 0)
{
if (c >= d) { timer3.Enabled = true; }
if (d > c) { timer4.Enabled = true; }
}
if (i == 1 && j == 1 && k == 1 && l == 0)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer4.Enabled = true;
}
if (i == 1 && j == 1 && k == 0 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer3.Enabled = true;
}
if (i == 0 && j == 1 && k == 1 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer1.Enabled = true;
}
if (i == 1 && j == 1 && k == 1 && l == 1)
{
i = 0; j = 0; k = 0; l = 0;
if (a >= b && a >= c && a >= d) { timer1.Enabled = true; }
if (b > a && b >= c && b >= d) { timer2.Enabled = true; }
if (c > a && c > b && c > d) { timer3.Enabled = true; }
if (d > a && d > b && d >= c) { timer4.Enabled = true; }
}
}
}
//=========================================================
private void timer3_Tick(object sender, EventArgs e)

6
{
k = 1;
detik = c--;
detik3.Text = detik.ToString();
merah3.Visible = false; hijau3.Visible = true; kuning3.Visible = false;
m3.Visible = false; k3.Visible = false; h3.Visible = true;
m33.Visible = false; k33.Visible = false; h33.Visible = true;
if (detik <= 5 && detik >= 0)
{
merah3.Visible = false; hijau3.Visible = false; kuning3.Visible = true;
m3.Visible = false; k3.Visible = true; h3.Visible = false;
m33.Visible = false; k33.Visible = true; h33.Visible = false;
}
if (detik <= 0)
{
timer3.Stop();
merah3.Visible = true; hijau3.Visible = false; kuning3.Visible = false;
m3.Visible = true; k3.Visible = false; h3.Visible = false;
m33.Visible = true; k33.Visible = false; h33.Visible = false;
if (i == 0 && j == 0 && k == 1 && l == 0)
{
if (a > b && a > d) { timer1.Enabled = true; }
if (b > a && b > d) { timer2.Enabled = true; }
if (d > a && d > b) { timer4.Enabled = true; }
if (a >= b && a >= d) { timer1.Enabled = true; }
if (a == b && a > d) { timer1.Enabled = true; }
if (b > a && b == d) { timer2.Enabled = true; }
if (d == a && d > b) { timer4.Enabled = true; }
}
if (i == 0 && j == 1 && k == 1 && l == 0)
{
if (a >= d) { timer1.Enabled = true; }
if (d > a) { timer4.Enabled = true; }
}
if (i == 0 && j == 0 && k == 1 && l == 1)
{
if (a >= b) { timer1.Enabled = true; }
if (b > a) { timer2.Enabled = true; }
}
if (i == 1 && j == 0 && k == 1 && l == 0)
{
if (b >= d) { timer2.Enabled = true; }

7
if (d > b) { timer4.Enabled = true; }
}
if (i == 1 && j == 1 && k == 1 && l == 0)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer4.Enabled = true;
}
if (i == 1 && j == 0 && k == 1 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer2.Enabled = true;
}
if (i == 0 && j == 1 && k == 1 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer1.Enabled = true;
}
if (i == 1 && j == 1 && k == 1 && l == 1)
{
i = 0; j = 0; k = 0; l = 0;
if (a >= b && a >= c && a >= d) { timer1.Enabled = true; }
if (b > a && b >= c && b >= d) { timer2.Enabled = true; }
if (c > a && c > b && c > d) { timer3.Enabled = true; }
if (d > a && d > b && d >= c) { timer4.Enabled = true; }
}
}
}
//=========================================================
private void timer4_Tick(object sender, EventArgs e)
{
l = 1;
detik = d--;
detik4.Text = detik.ToString();

8
merah4.Visible = false; hijau4.Visible = true; kuning4.Visible = false;
m4.Visible = false; k4.Visible = false; h4.Visible = true;
m44.Visible = false; k44.Visible = false; h44.Visible = true;
if (detik <= 5 && detik >= 0)
{
merah4.Visible = false; hijau4.Visible = false; kuning4.Visible = true;
m4.Visible = false; k4.Visible = true; h4.Visible = false;
m44.Visible = false; k44.Visible = true; h44.Visible = false;
}
if (detik <= 0)
{
timer4.Stop();
merah4.Visible = true; hijau4.Visible = false; kuning4.Visible = false;
m4.Visible = true; k4.Visible = false; h4.Visible = false;
m44.Visible = true; k44.Visible = false; h44.Visible = false;
kuning4.Visible = false;
if (i == 0 && j == 0 && k == 0 && l ==1)
{
if (a > b && a > c) { timer1.Enabled = true; }
if (b > a && b > c) { timer2.Enabled = true; }
if (c > a && c > b) { timer3.Enabled = true; }
if (a >= b && a >= c) { timer1.Enabled = true; }
if (a == b && a > c) { timer1.Enabled = true; }
if (b > a && b == c) { timer2.Enabled = true; }
if (c == a && c > b) { timer3.Enabled = true; }
}
if (i == 1 && j == 0 && k == 0 && l == 1)
{
if (b >= c) { timer2.Enabled = true; }
if (c > b) { timer3.Enabled = true; }
}
if (i == 0 && j == 1 && k == 0 && l == 1)
{
if (a >= c) { timer1.Enabled = true; }
if (c > a) { timer3.Enabled = true; }
}
if (i == 0 && j == 0 && k == 1 && l == 1)
{
if (a >= b) { timer1.Enabled = true; }
if (b > a) { timer2.Enabled = true; }
}
if (i == 1 && j == 1 && k == 0 && l == l)

9
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer3.Enabled = true;
}
if (i == 1 && j == 0 && k == 1 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer2.Enabled = true;
}
if (i == 0 && j == 1 && k == 1 && l == 1)
{
a = 180 - 180 * (100 - KP1) / 100; b = 180 - 180 * (100 - KP2) / 100;
c = 180 - 180 * (100 - KP3) / 100; d = 180 - 180 * (100 - KP4) / 100;
meraha = b + c + d; merahb = a + c + d; merahc = a + b + d;
merahd = a + b + c;
timer1.Enabled = true;
}
if (i == 1 && j == 1 && k == 1 && l == 1)
{
i = 0; j = 0; k = 0; l = 0;
if (a >= b && a >= c && a >= d) { timer1.Enabled = true; }
if (b > a && b >= c && b >= d) { timer2.Enabled = true; }
if (c > a && c > b && c > d) { timer3.Enabled = true; }
if (d > a && d > b && d >= c) { timer4.Enabled = true; }
}
}
}
//=========================================================
private void button2_Click(object sender, EventArgs e)
{
Close();
}
//=========================================================
private void button1_Click(object sender, EventArgs e)
{
timer1.Stop(); timer2.Stop(); timer3.Stop(); timer4.Stop();

10
}
//=========================================================
static string aa,bb,cc;
private void timer5_Tick(object sender, EventArgs e)
{
aa = label1.Text;
bb = aa.Substring(0, 1);
cc = aa.Substring(1, aa.Length - 1);
label1.Text = cc + bb;
}
//=========================================================
private void Form1_Load(object sender, EventArgs e)
{
timer5.Start();
}
}
}

B. Tampilan Program Saat Dijalankan


A.

11
12
APLIKASI FUZZY LOGIC CONTROLLER UNTUK PENGENDALI
PENERANGAN RUANGAN

A. PENDAHULUAN
Penerangan ruangan diperlukan manusia untuk melakukan aktifitas
dalam kehidupan. Penerangan membantu dalam mengenali objek benda secara
visual. Penerangan di bagi menjadi dua, yaitu penerangan alami dan
penerangan buatan. Penerangan alami terbatas pada jam-jam tertentu, dan juga
dipengaruhi oleh cuaca. Oleh karena itu diperlukan penerangan buatan agar
pencahayaan dapat stabil baik disiang hari maupun malam hari. Pada
umumnya pengaturan penerangan buatan dengan prinsip on-off. Pengaturan
ini hanya didasarkan pada gelap terangnya ruangan, tanpa menghiraukan
kontribusi dari luar. Keadaan ini mengakibatkan lampu harus menyala secara
maksimal terus, walaupun terdapat kontribusi penerangan dari luar. Hal ini
mengakibatkan ketidakefisienan penggunaan energi listrik karena
membutuhkan suplay tegangan secara maksimum dan terus menerus. Oleh
karena itu diperlukan pengendali lampu ruangan yang dapat mengatur gelap
terangnya lampu. Pengendali lampu ruangan didasarkan pada intensitas
cahaya dari luar dan juga warna cat dinding yang digunakan. Sehingga lampu
akan menyala sesuai dengan intensitas cahaya dari luar dan refleksi dinding.
Prinsip kendali yang digunakan adalah fuzzy logic controler. Sistem
inferensi yang digunakan dalam pengendali penerangan ruangan ini adalah
metode Tsukamoto. Dengan menggunakan pengaturan ruangan maka lampu
akan menyala dari redup sampai terang, tergantung dari kondisi cahaya luar
dan refleksi dinding.

B. PEMBAHASAN
1. Penjelasan Pengendali Penerangan Ruangan
Pengendali penerangan ruangan dengan metode tsukamoto ini akan
menghasilkan nyala lampu sesuai dengan keadaan cahaya dari luar
ruangan dan warna dinding yang digunakan. Cahaya luar menyumbang
gelap terangnya ruangan sedangkan warna dinding merupakan faktor
refleksi. Batas cahaya luar antara 0 sampai denagn 500 lux, sedangkan
faktor refleksi berkisar antara 10% sampai dengan 70%. Warna dinding
yang gelap akan menghasilkan refleksi yang kecil, dan warna dinding
sangat muda akan menghasilkan refleksi yang besar. Refleksi ini akan
memantulkan cahaya, baik cahaya dari luar maupun cahaya dari lampu,
sehingga refleksi juga menentukan dalam pengaturan peneranan ruangan.

13
Desain Tampilan Pengendali Ruangan dengan visual studio

Jika cahaya luar gelap dan warna dinding gelap maka lampu akan
menyala terang. Jika cahaya luar gelap dan warna dinding sangat muda
maka lampu akan menyala terang. Jika cahaya luar terang dan warna
dinding gelap maka lampu akan menyala redup/tidak menyala. Jika cahaya
luar terang dan warna dinding sangat muda maka lampu akan menyala
redup/tidak menyala. Output yang dihasilkan adalah tegangan yang
digunakan untuk menyalakan lampu dan berapa lux cahaya yang
dihasilkan lampu penerangan.
Input luas ruangan digunakan untuk menentukan berapa lumen
cahaya yang dipancarkan. Lumen merupakan perkalian lux dengan luas
ruangan. Semakin besar luas ruangan maka lumennya akan semakin besar
pula. Dari Output tersebut kemudian dikalkulasi menadi nyala lampu
redup, agak redup, agak terang, dan terang.

14
2. Diagram Alir Pengendali Penerangan Ruangan
Mulai

Input Input Warna


Fuzyfication
Cahaya luar Dinding

Fuzy input

Rule Evaluasi

Fuzzy Output

Defuzyfication

Output Cahaya
buatan

Apakah Output
Tidak
sesuai dengan yang
diharapkan

Ya

Seledai

3. Proses Perhitungan

Cahaya Luar

15
µ gelap = µ terang =
µ gelap = µ terang =
µ gelap = 0,30 µ terang = 0,70

Faktor Refleksi

µ gelap = µ terang =
µ gelap = µ terang =
µ gelap = 0,33 µ terang = 0,67

Rule:
a. Jika cahaya luar gelap dan warna dinding gelap maka lampu akan
menyala terang.
b. Jika cahaya luar gelap dan warna dinding sangat muda maka lampu
akan menyala terang.
c. Jika cahaya luar terang dan warna dinding gelap maka lampu akan
menyala redup/tidak menyala.
d. Jika cahaya luar terang dan warna dinding sangat muda maka lampu
akan menyala redup/tidak menyala.

Maka:
R1 = 0,30 & 0,33  µ1 = 0,30
R2 = 0,30 & 0,67  µ2 = 0,30
R3 = 0,70 & 0,33  µ3 = 0,33
R4 = 0,70 & 0,67  µ4 = 0,67

16
Cahaya Lampu yang Diinginkan

S1 = ( b – a ) x µ1 + a S3 = b - ( b – a ) x µ3
S1 = ( 500 – 0 ) x 0,30 + 0 S3 = 500 - ( 500 – 0 ) x 0,33
S1 = 150 S3 = 166,67

S2 = ( b – a ) x µ2 + a S4 = b - ( b – a ) x µ4
S2 = ( 500 – 0 ) x 0,30 + 0 S4 = 500 - ( 500 – 0 ) x 0,67
S2 = 150 S4 = 195,138

St =

St =
St = 195,1389 lux

C. Program Pengendali Penerangan Ruangan Pada Visual Studio


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Smart_Home
{
public partial class Form1 : Form
{
float a, b, c, d,wrndinding;
float miu_1, miu_2, miu_3, miu_4;
float s_1, s_2, s_3, s_4,s_t,z1,z2,z3,z4;

17
float in_luar, in_wrndinding, bts_luarA, bts_luarB, bts_wrndindingA,
bts_wrndindingB, bts_hslA, bts_hslB;
float luas_ruangan,lum;
public Form1()
{
InitializeComponent();
}
//===================================================
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
}
static string aa, bb, cc;
private void timer1_Tick(object sender, EventArgs e)
{
aa = label23.Text;
bb = aa.Substring(0, 1);
cc = aa.Substring(1, aa.Length - 1);
label23.Text = cc + bb;
}
//===================================================
private void trackBar1_Scroll(object sender, EventArgs e)
{
inchyluar.Text = Convert.ToString(trackBar1.Value);
}
private void trackBar3_Scroll(object sender, EventArgs e)
{
luas.Text = Convert.ToString(trackBar3.Value);
}
//====================================================
private void radioButton1_CheckedChanged(object sender,
EventArgs e)
{
wrndinding = 10;
inwrndinding.Text = Convert.ToString(wrndinding);
}
private void radioButton2_CheckedChanged(object sender,
EventArgs e)
{
wrndinding = 30;
inwrndinding.Text = Convert.ToString(wrndinding);
}

18
private void radioButton3_CheckedChanged(object sender,
EventArgs e)
{
wrndinding = 50;
inwrndinding.Text = Convert.ToString(wrndinding);
}
private void radioButton4_CheckedChanged(object sender,
EventArgs e)
{
wrndinding = 70;
inwrndinding.Text = Convert.ToString(wrndinding);
}
//===================================================
private void button1_Click(object sender, EventArgs e)
{
in_luar = float.Parse(inchyluar.Text);
in_wrndinding = float.Parse(inwrndinding.Text);
bts_luarA = float.Parse(btschyluarA.Text);
bts_luarB = float.Parse(btschyluarB.Text);
bts_wrndindingA = float.Parse(btswrndindingA.Text);
bts_wrndindingB = float.Parse(btswrndindingB.Text);
bts_hslA=float.Parse(btshslA.Text);
bts_hslB=float.Parse(btshslB.Text);
luas_ruangan = float.Parse(luas.Text);
//==================================================
a = (bts_luarB - in_luar) / (bts_luarB - bts_luarA);
b = (in_luar - bts_luarA) / (bts_luarB - bts_luarA);
c = (bts_wrndindingB - in_wrndinding) / (bts_wrndindingB -
bts_wrndindingA);
d = (in_wrndinding - bts_wrndindingA) / (bts_wrndindingB -
bts_wrndindingA);
Miuluarglp.Text = Convert.ToString(a);
Miuluarterang.Text = Convert.ToString(b);
Miudindinggelap.Text=Convert.ToString(c);
Miudindingsangatmuda.Text = Convert.ToString(d);
//=================================================
if (a < c) miu_1 = a; else miu_1 = c;//jika chy luar gelap & wrn
dinding gelap maka chy lampu terang
if (a < d) miu_2 = a; else miu_2 = d;//jika chy luar gelap & wrn
dinding sangat muda maka chy lampu Redup
if (b < c) miu_3 = b; else miu_3 = c;//jika chy luar terang & wrn
dinding gelap maka chy lampu terang

19
if (b < d) miu_4 = b; else miu_4 = d;//jika chy luar terang & wrn
dinding sangat muda maka chy lampu redup
Miu1.Text = Convert.ToString(miu_1);
Miu2.Text = Convert.ToString(miu_2);
Miu3.Text = Convert.ToString(miu_3);
Miu4.Text = Convert.ToString(miu_4);
//==================================================
s_1 = (bts_hslB - bts_hslA) * miu_1 + bts_hslA;
s_2 = (bts_hslB - bts_hslA) * miu_2 + bts_hslA;
s_3 = bts_hslB - ((bts_hslB - bts_hslA) * miu_3);
s_4 = bts_hslB - ((bts_hslB - bts_hslA) * miu_4);
S1.Text = Convert.ToString(s_1);
S2.Text = Convert.ToString(s_2);
S3.Text = Convert.ToString(s_3);
S4.Text = Convert.ToString(s_4);
//==================================================
s_t = ((miu_1 * s_1) + (miu_2 * s_2) + (miu_3 * s_3) + (miu_4 *
s_4)) / (miu_1 + miu_2 + miu_3 + miu_4);
St.Text = Convert.ToString(s_t);
if (s_t > 400) kondisi.Text = Convert.ToString("TERANG");
if (s_t > 200&&s_t<=400) kondisi.Text = Convert.ToString("
AGAK TERANG");
if (s_t > 100 && s_t <= 200) kondisi.Text =
Convert.ToString("AGAK REDUP");
if (s_t > 20&&s_t<=100) kondisi.Text =
Convert.ToString("REDUP");
if (s_t <=20) kondisi.Text = Convert.ToString("GELAP");
lumen.Text = Convert.ToString(s_t * luas_ruangan);
//====================================================
z1 = (220 - 10) * miu_1 + 10;
z2 = (220 - 10) * miu_2 + 10;
z3 = 220 - ((220 - 10) * miu_3);
z4 = 220 - ((220 - 10) * miu_4);
tegangan.Text = Convert.ToString(((miu_1 * z1) + (miu_2 * z2) +
(miu_3 * z3) + (miu_4 * z4)) / (miu_1 + miu_2 + miu_3 +
miu_4));
}
//===================================================
private void button2_Click(object sender, EventArgs e)
{
Close();
}

20
}
}

D. Hasil Program visual

21
22
E. KESIMPULAN
Program pengendali ruangan dengan metode tsukamoto akan
menghemat energi listrik yang digunakan. Hal ini karana pengendali
penerangan ruangan memperhitungkan kontribusi pencahayaan dari sumber
luar ke dalam ruangan dan juga memperhitungkan faktor refleksi dinding.
Sehingga lampu akan menyala dari redup sampai terang sesuai dengan kondisi
cahaya luar dan faktor refleksi.

23
APLIKASI JARINGAN SYARAF TIRUAN
MC CULLOCH, HEBB, PERCEPTRON, DAN DELTA ROOL
UNTUK PENGENALAN POLA GERBANG
SERTA MAX NET UNTUK MENENTUKAN ANGKA TERBESAR

A. Arsitektur Jaringan
1. Model McCulloch

X1 1 X1 1

Y Y
1 1
0 2 0 1
X2 1 X2 1

Arsitektur Jaringan AND Arsitektur Jaringan OR

1
0 1

1
X1 Z1
1
-1

Y
1
-1 0 1

X2 Z2 1
1
1
0 1

Arsitektur Jaringan X-OR


2. Model Hebb dan Perceptron

b1
b

W11
X1 Z1
V1
X1 W12
W1
Y
Y
W2 W21
X2 V2
X2 Z2
W22

b b2

Arsitektur Jaringan AND dan OR Arsitektur Jaringan X-OR

24
3. Model Delta Rool
W11
X1 Z1
V1
X1 W12
W1
Y
Y
W2 W21
X2 V2
X2 Z2
W22
Arsitektur Jaringan AND dan OR Arsitektur Jaringan X-OR
4. Model Max Net
1 1

A1
-ε Am

-ε -ε
-ε -ε

Ai Aj

1 1

B. Diagram Alir
1. Model Mc Culloch
Mulai

Input
(AND/ OR/ X-OR)

Proses belajar untuk


memperoleh Yout

Tampilkan hasil
belajar

Lagi?
Ya

Tidak

Stop

25
2. Model Hebb, Perceptron, dan Delta Rool
Mulai

Input
(AND/ OR/ X-OR)

Apakah proses
belajar sudah
pernah lakukan? Ya

Tidak

Proses belajar untuk


memperoleh Wi, bi

Wi dan bi ketemu?
Tidak

Ya

Simpan Wi dan bi di data

Tampilkan bobot

Dipakai untuk pengujian

Tampilkan
pengujian

Lagi?
Ya

Tidak

Stop

26
C. Program McCulloch, Hebb, Max Net, Perceptron, dan Delta Rool

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace latihan_JST
{
public partial class Form1 : Form
{
int hebb_AND=0, hebb_OR=0, hebb_XOR=0, P_AND=0, P_OR=0,
P_XOR=0, DR_AND=0, DR_OR=0, DR_XOR=0;
int w1=1, w2=1,x1,x2,c,d;
int w11_hebb, w12_hebb, w21_hebb, w22_hebb, b1_hebb, b2_hebb,
v1_hebb, v2_hebb,b_hebb;
int w11_p, w12_p, w21_p, w22_p, b1_p, b2_p, v1_p, v2_p,b_P;
double w11=1, w12=-1, w21=-1, w22=1, v1=1, v2=1;
double a,b,A_1,A_2,A_3,A_4,a1,a2,a3,a4,i,j,k,l;
double T,epsilon=0.2;
double model, gerbang,jml1,jml2,z1,z2;
int[] target_AND = { 1, -1, -1, -1 };
int [] target_OR = { 1, 1, 1, -1 };
int[] target_Z1 = { -1,-1, 1,-1 };
int[] target_Z2 = { -1, 1, -1, -1 };
int[] target_XOR = { -1, 1, 1, -1 };
int[] out_Z1 = new int[4];
int[] out_Z2=new int[4];
int[] bias = { 1, 1, 1, 1 };
int[] x1_hebb = { 1, 1, -1, -1 };
int[] x2_hebb = { 1, -1, 1, -1 };
int delta_w1, delta_w2, delta_wb,w1_baru,w2_baru,wb_baru;
int w1_hebb_AND, w2_hebb_AND, wb_hebb_AND, w1_hebb_OR,
w2_hebb_OR, wb_hebb_OR;
int w1_P_AND, w2_P_AND, wb_P_AND, w1_P_OR, w2_P_OR,
wb_P_OR;
int w1_lama = 0,w2_lama = 0,wb_lama = 0;

27
int u,net,cek=0;
int[] masukan_x1 = { 1, 1, -1, -1 };
int[] masukan_x2 = { 1, -1, 1, -1 };
int jml_perceptron,y_perceptron,teta=0,alfa=1;
double jml_DR,dlt, y_DR, teta_DR = 0.5, alfa_DR = 0.2;
double dw1_DR, dw2_DR, w1_DR,
w2_DR,w1_DR_AND,w2_DR_AND,w1_DR_OR,w2_DR_OR;
double w11_DR, w12_DR, w21_DR, w22_DR, v1_DR, v2_DR;
double[] x1_DR = { 1, 1, 0, 0 };
double[] x2_DR = { 1, 0, 1, 0 };
double[] target_AND_DR = { 1, 0, 0, 0 };
double[] target_OR_DR = { 1, 1, 1, 0 };
double[] target_Z1_DR = { 0, 0, 1, 0 };
double[] target_Z2_DR = { 0, 1, 0, 0 };
double[] target_XOR_DR = { 0, 1, 1, 0 };
double[] out_Z1_DR = new double[4];
double[] out_Z2_DR = new double[4];
double net_DR,w1_lama_DR = 0.1, w2_lama_DR = 0.3;
public Form1()
{
InitializeComponent();
}
private void radioButtonAND_CheckedChanged(object sender, EventArgs e)
{
gerbang = 1;
T = 2;
//========================
//hebb AND
if (model == 2)
{
if (hebb_AND == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
for (u = 0; u < 4; u++)
{
delta_w1 = x1_hebb[u] * target_AND[u];
delta_w2 = x2_hebb[u] * target_AND[u];
delta_wb = bias[u] * target_AND[u];
w1_hebb_AND = w1_lama + delta_w1;
w1_lama = w1_hebb_AND;
w2_hebb_AND = w2_lama + delta_w2;
w2_lama = w2_hebb_AND;

28
wb_hebb_AND = wb_lama + delta_wb;
wb_lama = wb_hebb_AND;
}
w1_lama = 0; w2_lama = 0; wb_lama = 0;
hebb_AND=hebb_AND + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w1.Text = Convert.ToString(w1_hebb_AND);
bobot_w2.Text = Convert.ToString(w2_hebb_AND);
bobot_b.Text = Convert.ToString(wb_hebb_AND);
}
//========================
//Perceptron AND
if (model == 4)
{
if (P_AND == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
ulangi:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_perceptron = (masukan_x1[u] * w1_lama) + (masukan_x2[u]
* w2_lama) + (bias[u] * wb_lama);
if (jml_perceptron > teta) y_perceptron = 1;
else if (jml_perceptron < teta) y_perceptron = -1;
else y_perceptron = 0;
if (target_AND[u] == y_perceptron)
{ delta_w1 = 0; delta_w2 = 0; delta_wb = 0; }
else
{
delta_w1 = alfa * masukan_x1[u] * target_AND[u];
delta_w2 = alfa * masukan_x2[u] * target_AND[u];
delta_wb = alfa * bias[u] * target_AND[u];
}
w1_P_AND = w1_lama + delta_w1; w1_lama = w1_P_AND;
w2_P_AND = w2_lama + delta_w2; w2_lama = w2_P_AND;
wb_P_AND = wb_lama + delta_wb; wb_lama = wb_P_AND;
if (delta_w1 > 0) cek++;
}
if (cek > 0) goto ulangi;

29
else { w1_lama = 0; w2_lama = 0; wb_lama = 0; }
P_AND = P_AND + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w1.Text = Convert.ToString(w1_P_AND); bobot_w2.Text =
Convert.ToString(w2_P_AND);
bobot_b.Text =Convert.ToString(wb_P_AND);
}
//================================================
//Delta Rool AND
if (model == 5)
{
if (DR_AND == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
ulangi:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_DR = (x1_DR[u] * w1_lama_DR) + (x2_DR[u] *
w2_lama_DR);
if (jml_DR < teta_DR) y_DR = 0; else y_DR = 1;
dlt = target_AND_DR[u] - y_DR;
dw1_DR = alfa_DR * x1_DR[u] * dlt;
dw2_DR = alfa_DR * x2_DR[u] * dlt;
w1_DR_AND = w1_lama_DR + dw1_DR;
w1_lama_DR = w1_DR_AND;
w2_DR_AND = w2_lama_DR + dw2_DR;
w2_lama_DR = w2_DR_AND;
if (dw1_DR > 0 || dw2_DR > 0 || dw1_DR < 0 || dw2_DR < 0)
cek++;
}
if (cek > 0) goto ulangi;
else { w1_lama_DR = 0.1; w2_lama_DR = 0.3; }
DR_AND = DR_AND + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w1.Text = Convert.ToString(w1_DR_AND);
bobot_w2.Text = Convert.ToString(w2_DR_AND);
bobot_b.Text = Convert.ToString(" ");

30
}
}
private void radioButtonOR_CheckedChanged(object sender, EventArgs e)
{
gerbang = 2;
T = 1;
//hebb OR==========================================
if (model == 2)
{
if (hebb_OR == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
for (u = 0; u < 4; u++)
{
delta_w1 = x1_hebb[u] * target_OR[u];
delta_w2 = x2_hebb[u] * target_OR[u];
delta_wb = bias[u] * target_OR[u];
w1_hebb_OR = w1_lama + delta_w1; w1_lama = w1_hebb_OR;
w2_hebb_OR = w2_lama + delta_w2; w2_lama = w2_hebb_OR;
wb_hebb_OR = wb_lama + delta_wb; wb_lama = wb_hebb_OR;
}
w1_lama = 0; w2_lama = 0; wb_lama = 0; hebb_OR = hebb_OR + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w1.Text = Convert.ToString(w1_hebb_OR);
bobot_w2.Text = Convert.ToString(w2_hebb_OR);
bobot_b.Text = Convert.ToString(wb_hebb_OR);
}
//Perceptron OR======================================
if (model == 4)
{
if (P_OR == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
ulangi:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_perceptron = (masukan_x1[u] * w1_lama) + (masukan_x2[u]
* w2_lama) + (bias[u] * wb_lama);
if (jml_perceptron > teta) y_perceptron = 1;

31
else
if (jml_perceptron < teta) y_perceptron = -1;
else y_perceptron = 0;
if (target_OR[u] == y_perceptron)
{ delta_w1 = 0; delta_w2 = 0; delta_wb = 0; }
else
{
delta_w1 = alfa * masukan_x1[u] * target_OR[u];
delta_w2 = alfa * masukan_x2[u] * target_OR[u];
delta_wb = alfa * bias[u] * target_OR[u];
}
w1_P_OR = w1_lama + delta_w1; w1_lama = w1_P_OR;
w2_P_OR = w2_lama + delta_w2; w2_lama = w2_P_OR;
wb_P_OR = wb_lama + delta_wb; wb_lama = wb_P_OR;
if (delta_w1 > 0) cek++;
}
if (cek > 0) goto ulangi;
else { w1_lama = 0; w2_lama = 0; wb_lama = 0; }
P_OR = P_OR + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w1.Text = Convert.ToString(w1_P_OR);
bobot_w2.Text = Convert.ToString(w2_P_OR);
bobot_b.Text = Convert.ToString(wb_P_OR);
}
//Delta Rool OR=====================================
if (model == 5)
{
if (DR_OR == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
ulangi:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_DR = (x1_DR[u] * w1_lama_DR) + (x2_DR[u] *
w2_lama_DR);
if (jml_DR < teta_DR) y_DR = 0; else y_DR = 1;
dlt = target_OR_DR[u] - y_DR;
dw1_DR = alfa_DR * x1_DR[u] * dlt;
dw2_DR = alfa_DR * x2_DR[u] * dlt;

32
w1_DR_OR = w1_lama_DR + dw1_DR;
w1_lama_DR = w1_DR_OR;
w2_DR_OR = w2_lama_DR + dw2_DR;
w2_lama_DR = w2_DR_OR;
if (dw1_DR > 0 || dw2_DR > 0 || dw1_DR < 0 || dw2_DR < 0)
cek++;
}
if (cek > 0) goto ulangi;
else { w1_lama_DR = 0.1; w2_lama_DR = 0.3; }
DR_OR = DR_OR + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w1.Text = Convert.ToString(w1_DR_OR); bobot_w2.Text =
Convert.ToString(w2_DR_OR); bobot_b.Text = Convert.ToString(" ");
}
}
private void radioButtonXOR_CheckedChanged(object sender, EventArgs e)
{
gerbang = 3;
T = 1;
//hebb X-OR
if (model == 2)
{
if (hebb_XOR == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
for (u = 0; u < 4; u++)
{
delta_w1 = x1_hebb[u] * target_Z1[u];
delta_w2 = x2_hebb[u] * target_Z1[u];
delta_wb = bias[u] * target_Z1[u];
w1_baru = w1_lama + delta_w1; w1_lama = w1_baru;
w2_baru = w2_lama + delta_w2; w2_lama = w2_baru;
wb_baru = wb_lama + delta_wb; wb_lama = wb_baru;
}
w11_hebb = w1_baru; w12_hebb = w2_baru; b1_hebb = wb_baru;
w1_lama = 0; w2_lama = 0; wb_lama = 0;
for (u = 0; u < 4; u++)
{
net = (x1_hebb[u] * w1_baru) + (x2_hebb[u] * w2_baru) +
wb_baru;

33
if (net >= 0) c = 1; else c = -1;
out_Z1[u] = c;
}
//=====================================
for (u = 0; u < 4; u++)
{
delta_w1 = x1_hebb[u] * target_Z2[u];
delta_w2 = x2_hebb[u] * target_Z2[u];
delta_wb = bias[u] * target_Z2[u];
w1_baru = w1_lama + delta_w1; w1_lama = w1_baru;
w2_baru = w2_lama + delta_w2; w2_lama = w2_baru;
wb_baru = wb_lama + delta_wb; wb_lama = wb_baru;
}
w21_hebb = w1_baru; w22_hebb = w2_baru; b2_hebb = wb_baru;
w1_lama = 0; w2_lama = 0; wb_lama = 0;
for (u = 0; u < 4; u++)
{
net = (x1_hebb[u] * w1_baru) + (x2_hebb[u] * w2_baru) +
wb_baru;
if (net >= 0) c = 1; else c = -1;
out_Z2[u] = c;
}
//==================================
for (u = 0; u < 4; u++)
{
delta_w1 = out_Z1[u] * target_XOR[u];
delta_w2 = out_Z2[u] * target_XOR[u];
delta_wb = bias[u] * target_XOR[u];
w1_baru = w1_lama + delta_w1; w1_lama = w1_baru;
w2_baru = w2_lama + delta_w2; w2_lama = w2_baru;
wb_baru = wb_lama + delta_wb; wb_lama = wb_baru;
}
w1_lama = 0; w2_lama = 0; wb_lama = 0;
v1_hebb = w1_baru; v2_hebb = w2_baru; b_hebb = wb_baru;
hebb_XOR = hebb_XOR + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w11.Text = Convert.ToString(w11_hebb);
bobot_w12.Text = Convert.ToString(w12_hebb);
bobot_w21.Text = Convert.ToString(w21_hebb);
bobot_w22.Text = Convert.ToString(w22_hebb);

34
bobot_b1.Text = Convert.ToString(b1_hebb);
bobot_b2.Text = Convert.ToString(b2_hebb);
bobot_v1.Text = Convert.ToString(v1_hebb);
bobot_v2.Text = Convert.ToString(v2_hebb);
}
//Perceptron X-OR
if (model == 4)
{
if (P_XOR == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");
ulangi:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_perceptron = (masukan_x1[u] * w1_lama) + (masukan_x2[u]
* w2_lama) + (bias[u] * wb_lama);
if (jml_perceptron > teta) y_perceptron = 1;
else
if (jml_perceptron < teta) y_perceptron = -1;
else y_perceptron = 0;
if (target_Z1[u] == y_perceptron)
{ delta_w1 = 0; delta_w2 = 0; delta_wb = 0; }
else
{
delta_w1 = alfa * masukan_x1[u] * target_Z1[u];
delta_w2 = alfa * masukan_x2[u] * target_Z1[u];
delta_wb = alfa * bias[u] * target_Z1[u];
}
w1_baru = w1_lama + delta_w1; w1_lama = w1_baru;
w2_baru = w2_lama + delta_w2; w2_lama = w2_baru;
wb_baru = wb_lama + delta_wb; wb_lama = wb_baru;
if (delta_w1 > 0) cek++;
}
if (cek > 0) goto ulangi;
else { w1_lama = 0; w2_lama = 0; wb_lama = 0; }
w11_p = w1_baru; w12_p = w2_baru; b1_p = wb_baru;
for (u = 0; u < 4; u++)
{
net = (masukan_x1[u] * w1_baru) + (masukan_x2[u] * w2_baru) +
wb_baru;
if (net >= 0) c = 1; else c = -1;

35
out_Z1[u] = c;
}
//X-OR mencai Z2
ulang:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_perceptron = (masukan_x1[u] * w1_lama) + (masukan_x2[u]
* w2_lama) + (bias[u] * wb_lama);
if (jml_perceptron > teta) y_perceptron = 1;
else
if (jml_perceptron < teta) y_perceptron = -1;
else y_perceptron = 0;
if (target_Z2[u] == y_perceptron)
{ delta_w1 = 0; delta_w2 = 0; delta_wb = 0; }
else
{
delta_w1 = alfa * masukan_x1[u] * target_Z2[u];
delta_w2 = alfa * masukan_x2[u] * target_Z2[u];
delta_wb = alfa * bias[u] * target_Z2[u];
}
w1_baru = w1_lama + delta_w1; w1_lama = w1_baru;
w2_baru = w2_lama + delta_w2; w2_lama = w2_baru;
wb_baru = wb_lama + delta_wb; wb_lama = wb_baru;
if (delta_w1 > 0) cek++;
}
if (cek > 0) goto ulang;
else { w1_lama = 0; w2_lama = 0; wb_lama = 0; }
w21_p = w1_baru; w22_p = w2_baru; b2_p = wb_baru;
for (u = 0; u < 4; u++)
{
net = (masukan_x1[u] * w1_baru) + (masukan_x2[u] * w2_baru) +
wb_baru;
if (net >= 0) c = 1; else c = -1;
out_Z2[u] = c;
}
//X-OR mencari Y
loop:
cek = 0;
for (u = 0; u < 4; u++)
{

36
jml_perceptron = (out_Z1[u] * w1_lama) + (out_Z2[u] * w2_lama)
+ (bias[u] * wb_lama);
if (jml_perceptron > teta) y_perceptron = 1;
else
if (jml_perceptron < teta) y_perceptron = -1;
else y_perceptron = 0;
if (target_XOR[u] == y_perceptron)
{ delta_w1 = 0; delta_w2 = 0; delta_wb = 0; }
else
{
delta_w1 = alfa * out_Z1[u] * target_XOR[u];
delta_w2 = alfa * out_Z2[u] * target_XOR[u];
delta_wb = alfa * bias[u] * target_XOR[u];
}
w1_baru = w1_lama + delta_w1; w1_lama = w1_baru;
w2_baru = w2_lama + delta_w2; w2_lama = w2_baru;
wb_baru = wb_lama + delta_wb; wb_lama = wb_baru;
if (delta_w1 > 0) cek++;
}
if (cek > 0) goto loop;
else { w1_lama = 0; w2_lama = 0; wb_lama = 0; }
v1_p = w1_baru; v2_p = w2_baru; b_P = wb_baru;
P_XOR = P_XOR + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w11.Text = Convert.ToString(w11_p);
bobot_w12.Text = Convert.ToString(w12_p);
bobot_w21.Text = Convert.ToString(w21_p);
bobot_w22.Text = Convert.ToString(w22_p);
bobot_b1.Text = Convert.ToString(b1_p);
bobot_b2.Text = Convert.ToString(b2_p);
bobot_v1.Text = Convert.ToString(v1_p);
bobot_v2.Text = Convert.ToString(v2_p);
}
//=========================================================
//X-OR Delta Rool
if (model == 5)
{
if (DR_XOR == 0)
{
keterangan.Text = Convert.ToString("Menyimpan Proses Belajar");

37
ulangi:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_DR = (x1_DR[u] * w1_lama_DR) + (x2_DR[u] *
w2_lama_DR);
if (jml_DR < teta_DR) y_DR = 0; else y_DR = 1;
dlt = target_Z1_DR[u] - y_DR;
dw1_DR = alfa_DR * x1_DR[u] * dlt;
dw2_DR = alfa_DR * x2_DR[u] * dlt;
w1_DR = w1_lama_DR + dw1_DR; w1_lama_DR = w1_DR;
w2_DR = w2_lama_DR + dw2_DR; w2_lama_DR = w2_DR;
if (dw1_DR > 0 || dw2_DR > 0 || dw1_DR < 0 || dw2_DR < 0)
cek++;
}
if (cek > 0) goto ulangi;
else { w1_lama_DR = 0.1; w2_lama_DR = 0.3; }
w11_DR = w1_DR; w12_DR = w2_DR;
for (u = 0; u < 4; u++)
{
net_DR = (x1_DR[u] * w1_DR) + (x2_DR[u] * w2_DR);
if (net_DR >= teta_DR) c = 1; else c = 0;
out_Z1_DR[u] = c;
}
//===Delta Rool mencari Z2 XOR============
ulang:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_DR = (x1_DR[u] * w1_lama_DR) + (x2_DR[u] *
w2_lama_DR);
if (jml_DR < teta_DR) y_DR = 0; else y_DR = 1;
dlt = target_Z2_DR[u] - y_DR;
dw1_DR = alfa_DR * x1_DR[u] * dlt;
dw2_DR = alfa_DR * x2_DR[u] * dlt;
w1_DR = w1_lama_DR + dw1_DR; w1_lama_DR = w1_DR;
w2_DR = w2_lama_DR + dw2_DR; w2_lama_DR = w2_DR;
if (dw1_DR > 0 || dw2_DR > 0 || dw1_DR < 0 || dw2_DR < 0)
cek++;
}
if (cek > 0) goto ulang;
else { w1_lama_DR = 0.1; w2_lama_DR = 0.3; }

38
w21_DR = w1_DR; w22_DR = w2_DR;
for (u = 0; u < 4; u++)
{
net_DR = (x1_DR[u] * w1_DR) + (x2_DR[u] * w2_DR);
if (net_DR >= teta_DR) c = 1; else c = 0;
out_Z2_DR[u] = c;
}
//==========Delta Rool mencari Y=====XOR===========
loop:
cek = 0;
for (u = 0; u < 4; u++)
{
jml_DR = (out_Z1_DR[u] * w1_lama_DR) + (out_Z2_DR[u] *
w2_lama_DR);
if (jml_DR < teta_DR) y_DR = 0; else y_DR = 1;
dlt = target_XOR_DR[u] - y_DR;
dw1_DR = alfa_DR * out_Z1_DR[u] * dlt;
dw2_DR = alfa_DR * out_Z2_DR[u] * dlt;
w1_DR = w1_lama_DR + dw1_DR; w1_lama_DR = w1_DR;
w2_DR = w2_lama_DR + dw2_DR; w2_lama_DR = w2_DR;
if (dw1_DR > 0 || dw2_DR > 0 || dw1_DR < 0 || dw2_DR < 0)
cek = cek + 1;
}
if (cek > 0) goto loop;
else { w1_lama_DR = 0.1; w2_lama_DR = 0.3; }
v1_DR = w1_DR; v2_DR = w2_DR; DR_XOR = DR_XOR + 1;
}
else keterangan.Text = Convert.ToString("Proses Belajar Sudah
Disimpan");
bobot_w11.Text = Convert.ToString(w11_DR);
bobot_w12.Text = Convert.ToString(w12_DR);
bobot_w21.Text = Convert.ToString(w21_DR);
bobot_w22.Text = Convert.ToString(w22_DR);
bobot_v1.Text = Convert.ToString(v1_DR);
bobot_v2.Text = Convert.ToString(v2_DR);
bobot_b1.Text = Convert.ToString(" ");
bobot_b2.Text = Convert.ToString(" ");
}
}
private void radioButtonX1_0_CheckedChanged(object sender, EventArgs e)
{
if (model == 2||model==4) x1 = -1;else

39
x1 = 0;
X1_0.Text = Convert.ToString(x1);
}
private void radioButtonX1_1_CheckedChanged(object sender, EventArgs e)
{
if (model == 2||model==4) x1 = 1;
else
x1 = 1;
X1_1.Text = Convert.ToString(x1);
}
private void radioButtonX2_0_CheckedChanged(object sender, EventArgs e)
{
if (model == 2||model==4) x2 = -1;
else
x2 = 0;
X2_0.Text = Convert.ToString(x2);
}
private void radioButtonX2_1_CheckedChanged(object sender, EventArgs e)
{
if (model == 2||model==4) x2 = 1;
else
x2 = 1;
X2_1.Text =Convert.ToString(x2);
}
private void radioButton_MC_CheckedChanged(object sender, EventArgs e)
{
model = 1;
}
private void radioButton_hebb_CheckedChanged(object sender, EventArgs
e)
{
model = 2;
}
private void radioButton_perceptron_CheckedChanged(object sender,
EventArgs e)
{
model = 4;
}
private void radioButton_maxnet_CheckedChanged(object sender,
EventArgs e)
{
model = 3;

40
}
private void radioButton_deltarool_CheckedChanged(object sender,
EventArgs e)
{
model = 5;
}
private void button1_Click(object sender, EventArgs e)
{
if (model == 1)
{
if (gerbang == 1||gerbang==2)
{
a = (x1 * w1) + (x2 * w2);
if (a >= T) b = 1; else b = 0;
jumlah.Text = Convert.ToString(a);
y.Text = Convert.ToString(b);
}
if (gerbang == 3)
{
jml1 = (x1 * w11) + (x2 * w21);
jml2 = (x1 * w12) + (x2 * w22);
if (jml1 >= T) z1 = 1; else z1 = 0;
if (jml2 >= T) z2 = 1; else z2 = 0;
a = (z1 * v1) + (z2 * v2);
if (a >= T) b = 1; else b = 0;
jumlah.Text = Convert.ToString(a);
y.Text = Convert.ToString(b);
}
}
//=========Hebb=====================================
if (model == 2)
{
if (gerbang == 1)
{
net = (x1 * w1_hebb_AND) + (x2 * w2_hebb_AND) +
wb_hebb_AND;
if (net >= 0) b = 1; else b = -1;
jumlah.Text = Convert.ToString(net);
y.Text = Convert.ToString(b);
}
if (gerbang == 2)
{

41
net = (x1 * w1_hebb_OR) + (x2 * w2_hebb_OR) + wb_hebb_OR;
if (net >= 0) b = 1; else b = -1;
jumlah.Text = Convert.ToString(net);
y.Text = Convert.ToString(b);
}
if (gerbang == 3)
{
if (x1 == 1 && x2 == 1)
net = (out_Z1[0] * v1_hebb) + (out_Z2[0] * v2_hebb) + b_hebb;
else
if (x1 == 1 && x2 == -1)
net = (out_Z1[1] * v1_hebb) + (out_Z2[1] * v2_hebb) + b_hebb;
else
if (x1 == -1 && x2 == 1)
net = (out_Z1[2] * v1_hebb) + (out_Z2[2] * v2_hebb) + b_hebb;
else
if (x1 == -1 && x2 == -1)
net = (out_Z1[3] * v1_hebb) + (out_Z2[3] * v2_hebb) + b_hebb;
if (net >= 0) b = 1; else b = -1;
jumlah.Text = Convert.ToString(net);
y.Text = Convert.ToString(b);
}
}
//========Max_Net================================
if (model == 3)
{
d = 0;
A_1 = double.Parse(A1.Text); i = A_1;
A_2 = double.Parse(A2.Text); j = A_2;
A_3 = double.Parse(A3.Text); k = A_3;
A_4 = double.Parse(A4.Text); l = A_4;
lagi:
a1 = A_1 - (epsilon * (A_2 + A_3 + A_4)); if (a1 <= 0) a1 = 0;
a2 = A_2 - (epsilon * (A_1 + A_3 + A_4)); if (a2 <= 0) a2 = 0;
a3 = A_3 - (epsilon * (A_2 + A_1 + A_4)); if (a3 <= 0) a3 = 0;
a4 = A_4 - (epsilon * (A_2 + A_3 + A_1)); if (a4 <= 0) a4 = 0;
A_1 = a1; A_2 = a2; A_3 = a3; A_4 = a4; d++;
if (a1 == 0 && a2 == 0 && a3 == 0)
{
OUT_Maxnet1.Text = Convert.ToString("A4");
OUT_Maxnet2.Text = Convert.ToString(l);
goto tampil;

42
}
else
if (a1 == 0 && a2 == 0 && a4 == 0)
{
OUT_Maxnet1.Text = Convert.ToString("A3");
OUT_Maxnet2.Text = Convert.ToString(k);
goto tampil;
}
else
if (a1 == 0 && a4 == 0 && a3 == 0)
{
OUT_Maxnet1.Text = Convert.ToString("A2");
OUT_Maxnet2.Text = Convert.ToString(j);
goto tampil;
}
else
if (a4 == 0 && a2 == 0 && a3 == 0)
{
OUT_Maxnet1.Text = Convert.ToString("A1");
OUT_Maxnet2.Text = Convert.ToString(i);
goto tampil;
}
else
goto lagi;
tampil:
jml_iterasi.Text = Convert.ToString(d);
end_A1.Text = Convert.ToString(a1);
end_A2.Text = Convert.ToString(a2);
end_A3.Text = Convert.ToString(a3);
end_A4.Text = Convert.ToString(a4);
}
//==================Perceptron===============================
if (model == 4)
{
if (gerbang == 1)
{
net = (x1 * w1_P_AND) + (x2 * w2_P_AND) + wb_P_AND;
if (net >= 0) b = 1; else b = -1;
jumlah.Text = Convert.ToString(net);
y.Text = Convert.ToString(b);
}
if (gerbang == 2)

43
{
net = (x1 * w1_P_OR) + (x2 * w2_P_OR) + wb_P_OR;
if (net >= 0) b = 1; else b = -1;
jumlah.Text = Convert.ToString(net);
y.Text = Convert.ToString(b);
}
if (gerbang == 3)
{
if (x1 == 1 && x2 == 1)
net = (out_Z1[0] * v1_p) + (out_Z2[0] * v2_p) + b_P;
else if (x1 == 1 && x2 == -1)
net = (out_Z1[1] * v1_p) + (out_Z2[1] * v2_p) + b_P;
else if (x1 == -1 && x2 == 1)
net = (out_Z1[2] * v1_p) + (out_Z2[2] * v2_p) + b_P;
else if (x1 == -1 && x2 == -1)
net = (out_Z1[3] * v1_p) + (out_Z2[3] * v2_p) + b_P;
if (net >= 0) b = 1; else b = -1;
jumlah.Text = Convert.ToString(net);
y.Text = Convert.ToString(b);
}
}
//==============Delta Rool============================
if(model==5)
{
if (gerbang == 1)
{
net_DR = (x1 * w1_DR_AND) + (x2 * w2_DR_AND);
if (net_DR < teta_DR) b = 0; else b = 1;
jumlah.Text = Convert.ToString(net_DR);
y.Text = Convert.ToString(b);
}
if (gerbang == 2)
{
net_DR = (x1 * w1_DR_OR) + (x2 * w2_DR_OR);
if (net_DR < teta_DR) b = 0; else b = 1;
jumlah.Text = Convert.ToString(net_DR);
y.Text = Convert.ToString(b);
}
if (gerbang == 3)
{
if (x1 == 1 && x2 == 1)
net_DR = (out_Z1_DR[0] * v1_DR) + (out_Z2_DR[0] * v2_DR);

44
else
if (x1 == 1 && x2 == 0)
net_DR = (out_Z1_DR[1] * v1_DR) + (out_Z2_DR[1] * v2_DR);
else
if (x1 == 0 && x2 == 1)
net_DR = (out_Z1_DR[2] * v1_DR) + (out_Z2_DR[2] * v2_DR);
else
if (x1 == 0 && x2 == 0)
net_DR = (out_Z1_DR[3] * v1_DR) + (out_Z2_DR[3] * v2_DR);
if (net_DR < teta_DR) b = 0; else b = 1;
jumlah.Text = Convert.ToString(net_DR);
y.Text = Convert.ToString(b);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
static string dd, bb, cc;
private void timer1_Tick(object sender, EventArgs e)
{
dd = label1.Text;
bb = dd.Substring(0, 1);
cc = dd.Substring(1, dd.Length - 1);
label1.Text = cc + bb;
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
}
private void button3_Click(object sender, EventArgs e)
{
hebb_AND = 0; hebb_OR = 0; hebb_XOR = 0; P_AND = 0; P_OR = 0;
P_XOR = 0; DR_AND = 0; DR_OR = 0; DR_XOR = 0;
}
}
}

45
D. Tampilan Saat Progam Dijalankan
1. ModelMc Culloch

46
2. Model Hebb

47
3. Model Max Net

48
4. Model Perceptron

49
5. Model Delta Rool

50
APLIKASI JARINGAN SYARAF TIRUAN
MODEL BACK PROPAGASI
UNTUK PENGENALAN POLA GERBANG

A. Arsitektur Jaringan
B1

B2

b4
W11 b1 b2 b3 b2
X1 Z1 V11
W21

W31
Y
W41
W12 V12
W22
X2 Z2

V13
W32

W42
Z2

V14

Z2

Arsitektur Jaringan Back Propagasi

B. Program Back Propagasi

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Back_Propagasi
{
public partial class Form1 : Form

51
{
double []hasil=new double[17];
double[] x1={1,1,0,0}; double[] x2={1,0,1,0};
double target1,target2,target3,target4;
double[] target = new double[4];
double[] error = new double[4];
int a,i,j;
double awal,zin1, zin2, zin3, zin4,z1,z2,z3,z4;
double []ynet=new double[4];
double []y=new double[4];
double []output=new double[4];
double err,err2,delta,dw1, dw2, dw3, dw4,db;
double deltain1, deltain2, deltain3, deltain4,delta1, delta2, delta3, delta4;
double dv1x1, dv2x1, dv3x1, dv4x1, dv1x2, dv2x2, dv3x2, dv4x2,db1, db2,
db3, db4;
double v1x1, v2x1, v3x1, v4x1, v1x2, v2x2, v3x2, v4x2, v1b, v2b, v3b,
v4b,w1, w2, w3, w4, b;
double v1x1awal, v2x1awal, v3x1awal, v4x1awal, v1x2awal, v2x2awal,
v3x2awal, v4x2awal, v1bawal, v2bawal, v3bawal, v4bawal;
double w1awal, w2awal, w3awal, w4awal, bawal,yin, yy, yout,teta, alfa,
delerr;
double x11, x12, x13, x14, x21, x22, x23, x24,inx1, inx2;

public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Random awal = new Random();
for (i = 0; i < 17; i++)
{
hasil[i] = awal.NextDouble()*(1-(-1))-1;
}
v1_x1_awal.Text = Convert.ToString(hasil[0]);
v2_x1_awal.Text = Convert.ToString(hasil[1]);
v3_x1_awal.Text = Convert.ToString(hasil[2]);
v4_x1_awal.Text = Convert.ToString(hasil[3]);
v1_x2_awal.Text = Convert.ToString(hasil[4]);
v2_x2_awal.Text = Convert.ToString(hasil[5]);
v3_x2_awal.Text = Convert.ToString(hasil[6]);
v4_x2_awal.Text = Convert.ToString(hasil[7]);

52
v1_b_awal.Text = Convert.ToString(hasil[8]);
v2_b_awal.Text = Convert.ToString(hasil[9]);
v3_b_awal.Text = Convert.ToString(hasil[10]);
v4_b_awal.Text = Convert.ToString(hasil[11]);
w1_y_awal.Text = Convert.ToString(hasil[12]);
w2_y_awal.Text = Convert.ToString(hasil[13]);
w3_y_awal.Text = Convert.ToString(hasil[14]);
w4_y_awal.Text = Convert.ToString(hasil[15]);
b_y_awal.Text = Convert.ToString(hasil[16]);
}
private void radioButton10_CheckedChanged(object sender, EventArgs e)
{
inT_1.Text = Convert.ToString(1);inT_2.Text = Convert.ToString(0);
inT_3.Text = Convert.ToString(0);inT_4.Text = Convert.ToString(0);
}
private void radioButton9_CheckedChanged(object sender, EventArgs e)
{
inT_1.Text = Convert.ToString(1); inT_2.Text = Convert.ToString(1);
inT_3.Text = Convert.ToString(1); inT_4.Text = Convert.ToString(0);
}
private void radioButton5_CheckedChanged(object sender, EventArgs e)
{
inT_1.Text = Convert.ToString(0); inT_2.Text = Convert.ToString(1);
inT_3.Text = Convert.ToString(1); inT_4.Text = Convert.ToString(1);
}
private void radioButton6_CheckedChanged(object sender, EventArgs e)
{
inT_1.Text = Convert.ToString(0); inT_2.Text = Convert.ToString(0);
inT_3.Text = Convert.ToString(0); inT_4.Text = Convert.ToString(1);
}
private void radioButton8_CheckedChanged(object sender, EventArgs e)
{
inT_1.Text = Convert.ToString(0); inT_2.Text = Convert.ToString(1);
inT_3.Text = Convert.ToString(1); inT_4.Text = Convert.ToString(0);
}
private void radioButton7_CheckedChanged(object sender, EventArgs e)
{
inT_1.Text = Convert.ToString(1); inT_2.Text = Convert.ToString(0);
inT_3.Text = Convert.ToString(0); inT_4.Text = Convert.ToString(1);
}
private void button2_Click(object sender, EventArgs e)
{

53
v1x1awal = hasil[0]; v2x1awal = hasil[1];
v3x1awal = hasil[2]; v4x1awal = hasil[3];
v1x2awal = hasil[4]; v2x2awal = hasil[5];
v3x2awal = hasil[6]; v4x2awal = hasil[7];
v1bawal = hasil[8]; v2bawal = hasil[9];
v3bawal = hasil[10]; v4bawal = hasil[11];
w1awal = hasil[12]; w2awal = hasil[13];
w3awal = hasil[14]; w4awal = hasil[15]; bawal = hasil[16];
teta = double.Parse(in_teta.Text);
alfa = double.Parse(in_alfa.Text);
delerr = double.Parse(in_targeterr.Text);
target[0] = double.Parse(inT_1.Text);
target[1] = double.Parse(inT_2.Text);
target[2] = double.Parse(inT_3.Text);
target[3] = double.Parse(inT_4.Text);

a = 0;
do
{
a++;
for (j = 0; j < 4; j++)
{
//=======Langkah 1===============
zin1 = v1bawal + x1[j] * v1x1awal + x2[j] * v1x2awal;
zin2 = v2bawal + x1[j] * v2x1awal + x2[j] * v2x2awal;
zin3 = v3bawal + x1[j] * v3x1awal + x2[j] * v3x2awal;
zin4 = v4bawal + x1[j] * v4x1awal + x2[j] * v4x2awal;
//=======Langkah 2===============
z1 = 1 / (1 + (Math.Pow(2.7, -zin1))); z2 = 1 / (1 + (Math.Pow(2.7, -
zin2)));
z3 = 1 / (1 + (Math.Pow(2.7, -zin3))); z4 = 1 / (1 + (Math.Pow(2.7, -
zin4)));
//=======Langkah 3===============
ynet[j] = bawal + (z1 * w1awal) + (z2 * w2awal) + (z3 * w3awal) +
(z4 * w4awal);
y[j] = 1 / (1 + (Math.Pow(2.7, -ynet[j])));
//=======Langkah 4===============
err = target[j] - y[j];
err2 = Math.Pow(err, 2);
error[j] = err2;
//=======Langkah 5===============

54
delta = (target[j] - y[j]) * (1 / (1 + (Math.Pow(2.7, -ynet[j])))) * (1 - (1
/ (1 + (Math.Pow(2.7, -ynet[j])))));
//=======Langkah 6===============
dw1 = alfa * delta * z1; dw2 = alfa * delta * z2;
dw3 = alfa * delta * z3; dw4 = alfa * delta * z4; db = alfa * delta;
//=======Langkah 7===============
deltain1 = delta * w1awal; deltain2 = delta * w2awal;
deltain3 = delta * w3awal; deltain4 = delta * w4awal;
//=======Langkah 8===============
delta1 = deltain1 * z1 * (1 - z1); delta2 = deltain2 * z2 * (1 - z2);
delta3 = deltain3 * z3 * (1 - z3); delta4 = deltain4 * z4 * (1 - z4);
//=======Langkah 9===============
dv1x1 = alfa * delta1 * x1[j]; dv2x1 = alfa * delta2 * x1[j];
dv3x1 = alfa * delta3 * x1[j]; dv4x1 = alfa * delta4 * x1[j];
dv1x2 = alfa * delta1 * x2[j]; dv2x2 = alfa * delta2 * x2[j];
dv3x2 = alfa * delta3 * x2[j]; dv4x2 = alfa * delta4 * x2[j];
//=======Langkah 10==============
db1 = alfa * delta1; db2 = alfa * delta2;
db3 = alfa * delta3; db4 = alfa * delta4;
//=======Langkah 11==============
v1x1 = v1x1awal + dv1x1; v2x1 = v2x1awal + dv2x1;
v3x1 = v3x1awal + dv3x1; v4x1 = v4x1awal + dv4x1;
v1x2 = v1x2awal + dv1x2; v2x2 = v2x2awal + dv2x2;
v3x2 = v3x2awal + dv3x2; v4x2 = v4x2awal + dv4x2;
v1b = v1bawal + db1; v2b = v2bawal + db2; v3b = v3bawal + db3;
v4b = v4bawal + db4;
//========Langkah 12==============
w1 = w1awal + dw1; w2 = w2awal + dw2; w3 = w3awal + dw3;
w4 = w4awal + dw4; b = bawal + db;
//================================
v1x1awal = v1x1; v2x1awal = v2x1;
v3x1awal = v3x1; v4x1awal = v4x1;
v1x2awal = v1x2; v2x2awal = v2x2;
v3x2awal = v3x2; v4x2awal = v4x2;
v1bawal = v1b; v2bawal = v2b; v3bawal = v3b; v4bawal = v4b;
w1awal = w1; w2awal = w2; w3awal = w3; w4awal = w4; bawal = b;
//================================
}
}
while (error[0]> delerr||error[1]> delerr||error[2]> delerr||error[3]> delerr);

55
//=====Pembuktian serta tampilkan bobot dan hasil================
for(j=0;j<4;j++)
{
if(y[j]>=teta)output[j]=1;else output[j]=0;
}
out_Yin1.Text = Convert.ToString(ynet[0]);
out_Y1.Text = Convert.ToString(y[0]);
out_Yout1.Text = Convert.ToString(output[0]);
out_Yin2.Text = Convert.ToString(ynet[1]);
out_Y2.Text = Convert.ToString(y[1]);
out_Yout2.Text = Convert.ToString(output[1]);
out_Yin3.Text = Convert.ToString(ynet[2]);
out_Y3.Text = Convert.ToString(y[2]);
out_Yout3.Text = Convert.ToString(output[2]);
out_Yin4.Text = Convert.ToString(ynet[3]);
out_Y4.Text = Convert.ToString(y[3]);
out_Yout4.Text = Convert.ToString(output[3]);
epoch1.Text = Convert.ToString(a); epoch2.Text = Convert.ToString(a);
epoch3.Text = Convert.ToString(a); epoch4.Text = Convert.ToString(a);
error1.Text = Convert.ToString(error[0]);
error2.Text = Convert.ToString(error[1]);
error3.Text = Convert.ToString(error[2]);
error4.Text = Convert.ToString(error[3]);
v1_x1_akhir.Text = Convert.ToString(v1x1);
v2_x1_akhir.Text = Convert.ToString(v2x1);
v3_x1_akhir.Text = Convert.ToString(v3x1);
v4_x1_akhir.Text = Convert.ToString(v4x1);
v1_x2_akhir.Text = Convert.ToString(v1x2);
v2_x2_akhir.Text = Convert.ToString(v2x2);
v3_x2_akhir.Text = Convert.ToString(v3x2);
v4_x2_akhir.Text = Convert.ToString(v4x2);
v1_b_akhir.Text = Convert.ToString(v1b);
v2_b_akhir.Text = Convert.ToString(v2b);
v3_b_akhir.Text = Convert.ToString(v3b);
v4_b_akhir.Text = Convert.ToString(v4b);
w1_y_akhir.Text = Convert.ToString(w1);
w2_y_akhir.Text = Convert.ToString(w2);
w3_y_akhir.Text = Convert.ToString(w3);
w4_y_akhir.Text = Convert.ToString(w4);
b_y_akhir.Text = Convert.ToString(b);
}

56
private void button3_Click(object sender, EventArgs e)
{
Close();
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
inx1 = 0;
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
inx1 = 1;
}
private void radioButton4_CheckedChanged(object sender, EventArgs e)
{
inx2 = 0;
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
inx2 = 1;
}
private void button4_Click(object sender, EventArgs e)
{
zin1 = v1b + inx1 * v1x1 + inx2 * v1x2;
zin2 = v2b + inx1 * v2x1 + inx2 * v2x2;
zin3 = v3b + inx1 * v3x1 + inx2 * v3x2;
zin4 = v4b + inx1 * v4x1 + inx2 * v4x2;
z1 = 1 / (1 + (Math.Pow(2.7, -zin1)));
z2 = 1 / (1 + (Math.Pow(2.7, -zin2)));
z3 = 1 / (1 + (Math.Pow(2.7, -zin3)));
z4 = 1 / (1 + (Math.Pow(2.7, -zin4)));
yin = b + w1 * z1 + w2 * z2 + w3 * z3 + w4 * z4;
yy = 1 / (1 + (Math.Pow(2.7, -yin)));
if (yy >= teta) yout = 1; else yout = 0;
out_Yin.Text = Convert.ToString(yin);
out_Y.Text = Convert.ToString(yy);
out_Yout.Text = Convert.ToString(yout);
}
}
}

57
C. Hasil Program Setelah Dijalankan

58
59
ALGORITMA GENETIKA

A. Diagram Alir Program Algoritma Genetika


Mulai

Masukan Jumlah
Populasi / Chromosome

Fungsi Fitnes / Objektif

Generasi tua / lama

Seleksi Chromosome

Cross Over

Mutasi

Generasi baru

Fungsi Fitnes / Objektif

Mampu
menyelesaikan
Tidak secara Optimal?

Ya
Individu Terbaik /
Chromosome Terbaik

Selesai

60
B. Program Algoritma Genetika

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int populasi,jml_mutasi,total_gen,acak, generasi=0;
double [,]chromosome= new double[20,20];
double[,] schromosome = new double[20, 20];
double[,] cchromosome = new double[20, 20];
double[,] co_chromosome = new double[20, 20];
double[,] coo_chromosome = new double[20, 20];
double[,] hchromosome = new double[20, 20];
int i, j,k,tercapai;
double[] a = new double[20];
double[] b = new double[20];
double[] c = new double[20];
double[] d = new double[20];
double[] FO = new double[20];
double[] fitnes = new double[20];
double[] P = new double[20];
double[] komulatif = new double[20];
double[] R = new double[20];
double[] cut_point = new double[20];
double rerataFO;
double sumFO = 0;
double sumfitnes=0;
double pc = 0.25,pm=0.1;
int mutasi,aa,bb,cek;

public Form1()
{

61
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
populasi = int.Parse(textBox1.Text);
Random random = new Random();
for (i = 0; i < populasi; i++)
{
a[i] = random.Next(0,30);
}
for (i = 0; i < populasi; i++)
{
b[i] = random.Next(0, 10);
}
for (i = 0; i < populasi; i++)
{
c[i] = random.Next(0, 10);
}
for (i = 0; i < populasi; i++)
{
d[i] = random.Next(0, 10);
}
for(i=0;i<populasi ;i++)
{
chromosome[i, 0] = a[i];
chromosome[i, 1] = b[i];
chromosome[i, 2] = c[i];
chromosome[i, 3] = d[i];
}
ch00.Text = Convert.ToString(chromosome[0, 0]);
ch01.Text = Convert.ToString(chromosome[0, 1]);
ch02.Text = Convert.ToString(chromosome[0, 2]);
ch03.Text = Convert.ToString(chromosome[0, 3]);
ch10.Text = Convert.ToString(chromosome[1, 0]);
ch11.Text = Convert.ToString(chromosome[1, 1]);
ch12.Text = Convert.ToString(chromosome[1, 2]);
ch13.Text = Convert.ToString(chromosome[1, 3]);
ch20.Text = Convert.ToString(chromosome[2, 0]);
ch21.Text = Convert.ToString(chromosome[2, 1]);
ch22.Text = Convert.ToString(chromosome[2, 2]);
ch23.Text = Convert.ToString(chromosome[2, 3]);

62
ch30.Text = Convert.ToString(chromosome[3, 0]);
ch31.Text = Convert.ToString(chromosome[3, 1]);
ch32.Text = Convert.ToString(chromosome[3, 2]);
ch33.Text = Convert.ToString(chromosome[3, 3]);
ch40.Text = Convert.ToString(chromosome[4, 0]);
ch41.Text = Convert.ToString(chromosome[4, 1]);
ch42.Text = Convert.ToString(chromosome[4, 2]);
ch43.Text = Convert.ToString(chromosome[4, 3]);
ch50.Text = Convert.ToString(chromosome[5, 0]);
ch51.Text = Convert.ToString(chromosome[5, 1]);
ch52.Text = Convert.ToString(chromosome[5, 2]);
ch53.Text = Convert.ToString(chromosome[5, 3]);
ch60.Text = Convert.ToString(chromosome[6, 0]);
ch61.Text = Convert.ToString(chromosome[6, 1]);
ch62.Text = Convert.ToString(chromosome[6, 2]);
ch63.Text = Convert.ToString(chromosome[6, 3]);
ch70.Text = Convert.ToString(chromosome[7, 0]);
ch71.Text = Convert.ToString(chromosome[7, 1]);
ch72.Text = Convert.ToString(chromosome[7, 2]);
ch73.Text = Convert.ToString(chromosome[7, 3]);
ch80.Text = Convert.ToString(chromosome[8, 0]);
ch81.Text = Convert.ToString(chromosome[8, 1]);
ch82.Text = Convert.ToString(chromosome[8, 2]);
ch83.Text = Convert.ToString(chromosome[8, 3]);
ch90.Text = Convert.ToString(chromosome[9, 0]);
ch91.Text = Convert.ToString(chromosome[9, 1]);
ch92.Text = Convert.ToString(chromosome[9, 2]);
ch93.Text = Convert.ToString(chromosome[9, 3]);
generasi = 0;
ulangi:
generasi++;
//Evaluasi chromosome=================================
for (i = 0; i < populasi; i++)
{
FO[i] = Math.Abs((chromosome[i, 0] + (2 * chromosome[i, 1]) + (3 *
chromosome[i, 2]) + (4 * chromosome[i, 3])) - 30);
}
sumFO = 0;
for (i = 0; i < populasi; i++)
{
sumFO = sumFO + FO[i];
}

63
rerataFO = sumFO / populasi;
//Seleksi
Chromosome==============================================
for (i = 0; i < populasi; i++)
{
fitnes[i] = 1 / (FO[i] + 1);
}
for (i = 0; i < populasi; i++)
{
sumfitnes = sumfitnes + fitnes[i];
}
for (i = 0; i < populasi; i++)
{
P[i] = fitnes[i] / sumfitnes;
}
for (i = 0; i < populasi; i++)
{
if(i==0)komulatif[i] = P[i];
if (i > 0) komulatif[i] = komulatif[i - 1] + P[i];
}
Random randomR = new Random();
for (i = 0; i < populasi; i++)
{
R[i] = randomR.NextDouble();
}
for (i = 0; i < populasi; i++)
{
if (R[i] < komulatif[0])
{
schromosome[i, 0] = chromosome[0, 0];
schromosome[i, 1] = chromosome[0, 1];
schromosome[i, 2] = chromosome[0, 2];
schromosome[i, 3] = chromosome[0, 3];
}else
for (j = 1; j < populasi; j++)
{
if (R[i] < komulatif[j] && R[i] > komulatif[j - 1])
{
schromosome[i, 0] = chromosome[j, 0];
schromosome[i, 1] = chromosome[j, 1];
schromosome[i, 2] = chromosome[j, 2];
schromosome[i, 3] = chromosome[j, 3];

64
}
}
}
sch00.Text = Convert.ToString(schromosome[0, 0]);
sch01.Text = Convert.ToString(schromosome[0, 1]);
sch02.Text = Convert.ToString(schromosome[0, 2]);
sch03.Text = Convert.ToString(schromosome[0, 3]);
sch10.Text = Convert.ToString(schromosome[1, 0]);
sch11.Text = Convert.ToString(schromosome[1, 1]);
sch12.Text = Convert.ToString(schromosome[1, 2]);
sch13.Text = Convert.ToString(schromosome[1, 3]);
sch20.Text = Convert.ToString(schromosome[2, 0]);
sch21.Text = Convert.ToString(schromosome[2, 1]);
sch22.Text = Convert.ToString(schromosome[2, 2]);
sch23.Text = Convert.ToString(schromosome[2, 3]);
sch30.Text = Convert.ToString(schromosome[3, 0]);
sch31.Text = Convert.ToString(schromosome[3, 1]);
sch32.Text = Convert.ToString(schromosome[3, 2]);
sch33.Text = Convert.ToString(schromosome[3, 3]);
sch40.Text = Convert.ToString(schromosome[4, 0]);
sch41.Text = Convert.ToString(schromosome[4, 1]);
sch42.Text = Convert.ToString(schromosome[4, 2]);
sch43.Text = Convert.ToString(schromosome[4, 3]);
sch50.Text = Convert.ToString(schromosome[5, 0]);
sch51.Text = Convert.ToString(schromosome[5, 1]);
sch52.Text = Convert.ToString(schromosome[5, 2]);
sch53.Text = Convert.ToString(schromosome[5, 3]);
sch60.Text = Convert.ToString(schromosome[6, 0]);
sch61.Text = Convert.ToString(schromosome[6, 1]);
sch62.Text = Convert.ToString(schromosome[6, 2]);
sch63.Text = Convert.ToString(schromosome[6, 3]);
sch70.Text = Convert.ToString(schromosome[7, 0]);
sch71.Text = Convert.ToString(schromosome[7, 1]);
sch72.Text = Convert.ToString(schromosome[7, 2]);
sch73.Text = Convert.ToString(schromosome[7, 3]);
sch80.Text = Convert.ToString(schromosome[8, 0]);
sch81.Text = Convert.ToString(schromosome[8, 1]);
sch82.Text = Convert.ToString(schromosome[8, 2]);
sch83.Text = Convert.ToString(schromosome[8, 3]);
sch90.Text = Convert.ToString(schromosome[9, 0]);
sch91.Text = Convert.ToString(schromosome[9, 1]);
sch92.Text = Convert.ToString(schromosome[9, 2]);

65
sch93.Text = Convert.ToString(schromosome[9, 3]);
//Crossover================================================
do
{
j = 0;
for (i = 0; i < populasi; i++)
{
R[i] = randomR.NextDouble();
if (R[i] < pc)
{
co_chromosome[j, 0] = schromosome[i, 0];
co_chromosome[j, 1] = schromosome[i, 1];
co_chromosome[j, 2] = schromosome[i, 2];
co_chromosome[j, 3] = schromosome[i, 3];
j=j+1;
}
}
}
while (j<(populasi/2)||j>(populasi/2));
for(i=0;i<j;i++)
{
cut_point[i]=random.Next(1,3);
}
coo_chromosome[0, 0] = co_chromosome[0, 0];
coo_chromosome[0, 1] = co_chromosome[0, 1];
coo_chromosome[0, 2] = co_chromosome[0, 2];
coo_chromosome[0, 3] = co_chromosome[0, 3];
for (i = 0; i < j; i++)
{
if (i == (j - 1))
{
if (cut_point[i] == 1)
{
co_chromosome[i, 1] = coo_chromosome[0, 1];
co_chromosome[i, 2] = coo_chromosome[0, 2];
co_chromosome[i, 3] = coo_chromosome[0, 3];
}
if (cut_point[i] == 2)
{
co_chromosome[i, 2] = coo_chromosome[0, 2];
co_chromosome[i, 3] = coo_chromosome[0, 3];
}

66
if (cut_point[i] == 3)
{
co_chromosome[i, 3] = coo_chromosome[0, 3];
}
}
if(i<(j-1))
{
if (cut_point[i] == 1)
{
co_chromosome[i, 1] = co_chromosome[(i + 1), 1];
co_chromosome[i, 2] = co_chromosome[(i + 1), 2];
co_chromosome[i, 3] = co_chromosome[(i + 1), 3];
}
if (cut_point[i] == 2)
{
co_chromosome[i, 2] = co_chromosome[(i + 1), 2];
co_chromosome[i, 3] = co_chromosome[(i + 1), 3];
}
if (cut_point[i] == 3)
{
co_chromosome[i, 3] = co_chromosome[(i + 1), 3];
}
}
}
k = 0;
for (i = 0; i < populasi; i++)
{
if (R[i] < pc)
{
chromosome[i, 0] = co_chromosome[k, 0];
chromosome[i, 1] = co_chromosome[k, 1];
chromosome[i, 2] = co_chromosome[k, 2];
chromosome[i, 3] = co_chromosome[k, 3];
k = k + 1;
}
else
{
chromosome[i, 0] = schromosome[i, 0];
chromosome[i, 1] = schromosome[i, 1];
chromosome[i, 2] = schromosome[i, 2];
chromosome[i, 3] = schromosome[i, 3];
}

67
}
coch00.Text = Convert.ToString(chromosome[0, 0]);
coch01.Text = Convert.ToString(chromosome[0, 1]);
coch02.Text = Convert.ToString(chromosome[0, 2]);
coch03.Text = Convert.ToString(chromosome[0, 3]);
coch10.Text = Convert.ToString(chromosome[1, 0]);
coch11.Text = Convert.ToString(chromosome[1, 1]);
coch12.Text = Convert.ToString(chromosome[1, 2]);
coch13.Text = Convert.ToString(chromosome[1, 3]);
coch20.Text = Convert.ToString(chromosome[2, 0]);
coch21.Text = Convert.ToString(chromosome[2, 1]);
coch22.Text = Convert.ToString(chromosome[2, 2]);
coch23.Text = Convert.ToString(chromosome[2, 3]);
coch30.Text = Convert.ToString(chromosome[3, 0]);
coch31.Text = Convert.ToString(chromosome[3, 1]);
coch32.Text = Convert.ToString(chromosome[3, 2]);
coch33.Text = Convert.ToString(chromosome[3, 3]);
coch40.Text = Convert.ToString(chromosome[4, 0]);
coch41.Text = Convert.ToString(chromosome[4, 1]);
coch42.Text = Convert.ToString(chromosome[4, 2]);
coch43.Text = Convert.ToString(chromosome[4, 3]);
coch50.Text = Convert.ToString(chromosome[5, 0]);
coch51.Text = Convert.ToString(chromosome[5, 1]);
coch52.Text = Convert.ToString(chromosome[5, 2]);
coch53.Text = Convert.ToString(chromosome[5, 3]);
coch60.Text = Convert.ToString(chromosome[6, 0]);
coch61.Text = Convert.ToString(chromosome[6, 1]);
coch62.Text = Convert.ToString(chromosome[6, 2]);
coch63.Text = Convert.ToString(chromosome[6, 3]);
coch70.Text = Convert.ToString(chromosome[7, 0]);
coch71.Text = Convert.ToString(chromosome[7, 1]);
coch72.Text = Convert.ToString(chromosome[7, 2]);
coch73.Text = Convert.ToString(chromosome[7, 3]);
coch80.Text = Convert.ToString(chromosome[8, 0]);
coch81.Text = Convert.ToString(chromosome[8, 1]);
coch82.Text = Convert.ToString(chromosome[8, 2]);
coch83.Text = Convert.ToString(chromosome[8, 3]);
coch90.Text = Convert.ToString(chromosome[9, 0]);
coch91.Text = Convert.ToString(chromosome[9, 1]);
coch92.Text = Convert.ToString(chromosome[9, 2]);
coch93.Text = Convert.ToString(chromosome[9, 3]);
//Mutasi===================================================

68
total_gen = 4 * populasi;
jml_mutasi = 10*total_gen/100;
for(i=0;i<jml_mutasi;i++)
{
mutasi=random.Next(1,total_gen);
aa = mutasi / 4;
bb = mutasi % 4;
if (bb == 0)
{
acak = random.Next(0, 10);
chromosome[(aa-1), 3] = acak;
}
else if (bb == 1)
{
acak = random.Next(0, 30);
chromosome[aa , 0] = acak;
}
else
{
acak = random.Next(0, 10);
chromosome[aa, (bb-1)] = acak;
}
}
j=1;
for (i = 0; i < populasi; i++)
{
FO[i] = Math.Abs((chromosome[i, 0] + (2 * chromosome[i, 1]) + (3 *
chromosome[i, 2]) + (4 * chromosome[i, 3])) - 30);
if (FO[i] == 0)
{
hchromosome[j, 0] = chromosome[i, 0];
hchromosome[j, 1] = chromosome[i, 1];
hchromosome[j, 2] = chromosome[i, 2];
hchromosome[j, 3] = chromosome[i, 3];
j++;
tercapai = i+1;
}
}
sumFO = 0;
for (i = 0; i < populasi; i++)
{
sumFO = sumFO + FO[i];

69
}
rerataFO = sumFO / populasi;
if (j == 1) goto ulangi;
mch00.Text = Convert.ToString(chromosome[0, 0]);
mch01.Text = Convert.ToString(chromosome[0, 1]);
mch02.Text = Convert.ToString(chromosome[0, 2]);
mch03.Text = Convert.ToString(chromosome[0, 3]);
mch10.Text = Convert.ToString(chromosome[1, 0]);
mch11.Text = Convert.ToString(chromosome[1, 1]);
mch12.Text = Convert.ToString(chromosome[1, 2]);
mch13.Text = Convert.ToString(chromosome[1, 3]);
mch20.Text = Convert.ToString(chromosome[2, 0]);
mch21.Text = Convert.ToString(chromosome[2, 1]);
mch22.Text = Convert.ToString(chromosome[2, 2]);
mch23.Text = Convert.ToString(chromosome[2, 3]);
mch30.Text = Convert.ToString(chromosome[3, 0]);
mch31.Text = Convert.ToString(chromosome[3, 1]);
mch32.Text = Convert.ToString(chromosome[3, 2]);
mch33.Text = Convert.ToString(chromosome[3, 3]);
mch40.Text = Convert.ToString(chromosome[4, 0]);
mch41.Text = Convert.ToString(chromosome[4, 1]);
mch42.Text = Convert.ToString(chromosome[4, 2]);
mch43.Text = Convert.ToString(chromosome[4, 3]);
mch50.Text = Convert.ToString(chromosome[5, 0]);
mch51.Text = Convert.ToString(chromosome[5, 1]);
mch52.Text = Convert.ToString(chromosome[5, 2]);
mch53.Text = Convert.ToString(chromosome[5, 3]);
mch60.Text = Convert.ToString(chromosome[6, 0]);
mch61.Text = Convert.ToString(chromosome[6, 1]);
mch62.Text = Convert.ToString(chromosome[6, 2]);
mch63.Text = Convert.ToString(chromosome[6, 3]);
mch70.Text = Convert.ToString(chromosome[7, 0]);
mch71.Text = Convert.ToString(chromosome[7, 1]);
mch72.Text = Convert.ToString(chromosome[7, 2]);
mch73.Text = Convert.ToString(chromosome[7, 3]);
mch80.Text = Convert.ToString(chromosome[8, 0]);
mch81.Text = Convert.ToString(chromosome[8, 1]);
mch82.Text = Convert.ToString(chromosome[8, 2]);
mch83.Text = Convert.ToString(chromosome[8, 3]);
mch90.Text = Convert.ToString(chromosome[9, 0]);
mch91.Text = Convert.ToString(chromosome[9, 1]);
mch92.Text = Convert.ToString(chromosome[9, 2]);

70
mch93.Text = Convert.ToString(chromosome[9, 3]);
hch0.Text = Convert.ToString(hchromosome[(j-1), 0]);
hch1.Text = Convert.ToString(hchromosome[(j - 1), 1]);
hch2.Text = Convert.ToString(hchromosome[(j - 1), 2]);
hch3.Text = Convert.ToString(hchromosome[(j - 1), 3]);
FO1.Text = Convert.ToString(FO[0]);
FO2.Text = Convert.ToString(FO[1]);
FO3.Text = Convert.ToString(FO[2]);
FO4.Text = Convert.ToString(FO[3]);
FO5.Text = Convert.ToString(FO[4]);
FO6.Text = Convert.ToString(FO[5]);
FO7.Text = Convert.ToString(FO[6]);
FO8.Text = Convert.ToString(FO[7]);
FO9.Text = Convert.ToString(FO[8]);
FO10.Text = Convert.ToString(FO[9]);
textBox4.Text = Convert.ToString(generasi);
textBox2.Text = Convert.ToString(tercapai);
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
}
static string ii, jj, kk;
private void timer1_Tick_1(object sender, EventArgs e)
{
ii = label37.Text;
jj = ii.Substring(0, 1);
kk = ii.Substring(1, ii.Length - 1);
label37.Text = kk + jj;
}
}
}

71
C. Hasil Program Setelah Dijalankan

72
73
74
75
BEBERAPA APLIKASI JARINGAN SYARAF TIRUAN

A. Aplikasi Pengenalan Ucapan Dengan Jaringan Syaraf Tiruan Propagasi


Balik Untuk Pengendalian Robot Bergerak
Pengenalan ucapan dengan jaringan syaraf tiruan dapat dipahami dan
dimengerti melalui beberapa metode ekstraksi ciri, diantaranya dengan metode
LPC dan transformasi Fourier. Linear Predictive Coding adalah salah satu alat
dalam pemrosesan atau analisa sinyal untuk memperoleh fitur atau ciri unik
dari tiap pola suara. Sedangkan Transformasi Fourier digunakan untuk
memperjelas ciri tiap pola karena dapat memberikan informasi-informasi yang
disajikan dalam ranah frekuensi baik yang bersifat diskret maupun kontinu.
JST (Jaringan Syaraf Tiruan) banyak digunakan untuk aplikasi pengenalan
pola (pattern recognition). Kemampuan untuk pembelajaran dari data
pelatihan dan generalisasi ke situasi/kondisi yang baru adalah alasan mendasar
mengapa JST banyak digunakan.
Hasil yang di harapkan adalah suatu sistem kendali robot yang efektif
hanya dengan menggunakan suara manusia. Suara manusia yang masuk akan
dikenali oleh JST dan diubah menjadi suatu karakter ASCII yang dapat
dikenali oleh robot kemudian dikirimkan melalui komunikasi serial ke robot.
Dalam aplikasi ini pengenalan ucapan meliputi lima kata, diantaranya maju,
mundur, kanan, kiri dan stop. Mula-mula sinyal suara direkam dalam bentuk
file *.wav. Kemudian sinyal suara analog dicuplik menjadi sinyal digital
dengan kecepatan cuplik 8000 Hz. Untuk proses ekstraksi parameter suara
digunakan metode Linear Predictive Coding (LPC) untuk mendapatkan
koefisien cepstral. Koefisien cepstral LPC ini ditransformasikan ke dalam
domain frekuensi dengan beberapa titik pada Fast Fourier Transform (FFT),
yaitu 32, 64, 128, dan 512 point. Selanjutnya dari data tersebut diambil
setengahnya saja yang sudah mewakili representasi frekuensi dari sinyal
tersebut. Data numeris tersebut dilatih dengan Jaringan Syaraf Tiruan untuk
dikenali.
Metoda pembelajaran yang digunakan adalah Back Propagation. Dari
hasil pembelajaran akan didapatkan bobot jaringan yang telah berubah.
Jaringan diuji dengan memberikan masukkan berupa data pengujian. Hasil

76
pengujian menunjukkan bahwa pengenalan jaringan terhadap data baru lebih
rendah terhadap data latihan. Dari beberapa variasi pengujian diperoleh
jaringan terbaik net9 dengan prosentase pengenalan suara dari responden di
dalam database sebesar 86 %, dan prosentase pengenalan suara dari responden
di luar database sebesar 66,67 %.

B. Aplikasi Jaringan Saraf Tiruan Pada Kontrol Kecepatan Motor


Perkembangan teknologi industri telah membawa teknologi
pengendalian atau pengaturan pada suatu sistem yang mempunyai kemampuan
dalam hal kecerdasan. Kemampuan dalam hal kecerdasan ini dapat
diimplementasikan dengan beberapa cara antara lain dengan Jaringan Saraf
Tiruan (JST), Fuzzy Logic dan Neuro Fuzzy. Kontrol untuk motor DC,
dengan menggunakan JST, dengan struktur multilayer perceptron, dan dengan
metode pelatihan backpropagation. Perencanaan yang dilakukan terdiri dari
dua macam, yaitu perangkat keras dan perangkat lunak. Perangkat keras terdiri
dari perangkat komputer, rangkaian interface Digital to Analog Converter
(DAC), rangkaian Pulse Width Modulation(PWM), rangkaian tachometer,
sensor dan motor DC. Sedangkan perangkat lunak terdiri dari perangkat lunak
emulasi JST pada PC, dan perangkat lunak untuk tachometer. Pengujian
pengendalian kecepatan motor ini dilakukan dengan meng- input-kan
kecepatan motor yang diinginkan melalui PC. Pengendali dapat
mengendalikan kecepatan motor dengan baik dan dapat bertahan pada waktu
yang lama.

77
BEBERAPA APLIKASI ALGORITMA GENETIKA

A. Implementasi Algoritma Genetika pada Mikrokontroler MCS51Untuk


Mencari Rute Terpendek
Aplikasi yang dipilih untuk percobaan adalah mencari rute terpendek
yang menghubungkan suatu tempat asal dan tujuan. Semua proses algoritma
genetika seperti membangkitkan populasi awal, evaluasi, seleksi, crossover
dan mutasi, dilakukan oleh mikrokontroler MCS51. Jenis kromosom yang
digunakan dalam sistem ini adalah bit string. Metode seleksi yang digunakan
adalah roulette wheel danelitsm. Sebuah program bantuan yang beroperasi di
komputer, digunakan untuk membuat peta jalan, men-download ke
mikrokontroler MCS51 semua informasi yang dibutuhkan. Pengujian telah
dilakukan dengan simulasi pada program dan dengan menerapkan pada
mikrokontroler untuk menentukan rute terpendek dari suatu lokasi menuju ke
lokasi lain. Dari hasil pengujian terlihat bahwaimplementasi algoritma
genetika pada mikrokontroler dapat berjalan dengan baik dan mampu
menentukan ruteterpendek yang dapat ditempuh dengan bervariasi model peta.

B. Implementasi Algoritma Genetika Untuk Optimasi Penggunaan Lahan


Pertanian
Indonesia memiliki dua musim, yaitu musim penghujan dan musim kemarau.
Karena pengaruh dua musim yang dimiliki wilayah Indonesia, petani
umumnya mengolah lahan pertaniannya menjadi dua musim tanam, yaitu
musim tanam padi saat penghujan dan musim tanam polikultur (menanam
lebih dari satu tanaman) saat kemarau. Sistem polikultur ini bertujuan untuk
meminimalisasi gagal panen dan mengurangi resiko kerugian apabila salah
satu komoditi harganya menurun. Pada saat menerapkan sistem pertanian
polikultur, petani sering dihadapkan pada permasalahan mendasar, yaitu
bagaimana menentukan proporsi dalam pemanfaatan lahan pertanian sehingga
menghasilkan keuntungan yang maksimal dengan mengalokasikan luas lahan
dan modal yang dimiliki.
Algoritma genetika merupakan salah satu algoritma yang bersifat
heuristic dan dapat menyelesaikan permasalahan multi objectiv, sehingga

78
dapat diterapkan untuk mencari solusi optimal dari permasalahan optimasi
penggunaan lahan pertanian ini. Pencarian solusi dilakukan dengan
mengkombinasikan kromosom kemudian diproses dengan operator genetika
(seleksi, crossover, dan mutasi) dengan menginisialisasi parameter genetika
(ukuran populasi, crossover rate, mutation rate, dan jumlah generasi). Pada
penelitian ini, menggunakan representasi kromosom real coded dengan
reproduksi extended intermediate crossover dan random mutation. Dari hasil
pengujian, didapatkan hasil terbaik dengan nilai fitness tertinggi yang
mendekati solusi optimal pada ukuran populasi 125, jumlah generasi 400, nilai
probabilitas crossover 0,4 dan probabilitas mutasi 0,6. Seleksi yang lebih baik
adalah seleksi elitism.

79

Anda mungkin juga menyukai