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.
Penyusun
ii
DAFTAR ISI
iii
BEBERAPA APLIKASI JARINGAN SYARAF TIRUAN ............................ 76
A. Aplikasi Pengenalan Ucapan Dengan Jaringan Syaraf Tiruan Propagasi Balik
Untuk Pengendalian Robot Bergerak .................................................................... 76
iv
APLIKASI FUZZY UNTUK PENGATURAN LAMPU LALU LINTAS
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);
}
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);
}
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();
}
}
}
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
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
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
}
}
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
1
0 1
1
X1 Z1
1
-1
Y
1
-1 0 1
X2 Z2 1
1
1
0 1
b1
b
W11
X1 Z1
V1
X1 W12
W1
Y
Y
W2 W21
X2 V2
X2 Z2
W22
b b2
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)
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
Wi dan bi ketemu?
Tidak
Ya
Tampilkan bobot
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
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
Masukan Jumlah
Populasi / Chromosome
Seleksi Chromosome
Cross Over
Mutasi
Generasi baru
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();
}
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
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 %.
77
BEBERAPA APLIKASI ALGORITMA GENETIKA
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