Anda di halaman 1dari 10

LAPORAN UJIAN TENGAH SEMESTER

KENDALI CERDAS

DHANI WAHYU EKAPUTRA


4211501003

PRODI TEKNIK MEKATRONIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI BATAM
DASAR TEORI
Fuzzy Logic
Teori himpunan logika samar dikembangkan oleh Prof. Lofti Zadeh pada tahun 1965.
Zadeh berpendapat bahwa logika benar dan salah dalam logika konvensional tidak
dapat mengatasi masalah gradasi yang berada pada dunia nyata. Untuk mengatasi
masalah gradasi yang tidak terhingga tersebut, Zadeh mengembangkan sebuah
himpunan fuzzy. Tidak seperti logika boolean, logika fuzzy mempunyai nilai yang
kontinue. Samar dinyatakan dalam derajat dari suatu keanggotaan dan derajat dari
kebenaran. Oleh sebab itu sesuatu dapat dikatakan sebagian benar dan sebagian salah
pada waktu yang sama (Kusumadewi, 2004).
Himpunan Fuzzy (Fuzzy Set)
Himpunan fuzzy (fuzzy set) adalah sekumpulan obyek x dimana masing-masing
obyek memiliki nilai keanggotaan (membership function) “µ” atau disebut juga
dengan nilai kebenaran. Jika X adalah sekumpulan obyek dan anggotanya dinyatakan
dengan x maka himpunan fuzzy dari A di dalam X adalah himpunan dengan sepasang
anggota atau dapat dinyatakan dengan (Kusumadewi, 2004).
𝐴 = { A (𝑥) | 𝑥 ∶ 𝑥 ∈ X, 𝐴(𝑥) ∈ [0,1] ∈ ℜ}
Contoh, jika A = “bilangan yang mendekati 10” dimana :
A = (x, A(x)) | A(x ) = (1+(x-10)2 ) -1 
A = (0, 0.01),…,(5, 0.04),…,(10, 1),…,(15, 0.04),…
Maka grafik yang mewakili nilai A(x) adalah :

Gambar 2.1. Grafik himpunan fuzzy untuk bilangan yang mendekati 10


Terkadang kemiripan antara keanggotaan fuzzy dengan probabilitas menimbulkan
kerancuan. Keduanya memiliki nilai pada interval [0,1]. Namun interpretasi nilainya
sangat berbeda antara kasus-kasus tersebut. Keanggotaan fuzzy memberikan suatu
ukuran terhadap pendapat atau keputusan, sedangkan probabilitas mengindikasikan
proporsi terhadap keseringan suatu hasil bernilai benar dalam jangka panjang.
Misalnya, jika nilai keanggotaan suatu himpunan fuzzy MUDA adalah 0,9 maka tidak
perlu dipermasalahkan berapa seringnya nilai itu diulang secara individual untuk
mengharapkan suatu hasil yang hampir muda. Dilain pihak, nilai probabilitas 0,9
muda berarti 10 % dari himpunan tersebut tidak muda.

Himpunan fuzzy memiliki 2 atribut, yaitu :


1. Linguistik, yaitu penamaan suatu grup yang memiliki suatu keadaan atau kondisi
tertentu dengan menggunakan bahasa alami, seperti : MUDA, PAROBAYA,
TUA.
2. Numeris, yaitu suatu nilai (angka) yang menunjukkan ukuran dari suatu variabel
seperti : 5, 10, 15 dan sebagainya.
Ada beberapa hal yang perlu diketahui dalam memahami sistem fuzzy, yaitu :
1. Variabel fuzzy Variabel fuzzy merupakan variabel yang hendak dibahas dalam
suatu sistem fuzzy. Contoh: umur, temperatur, permintaan, dan lain-lain.
2. Himpunan fuzzy Himpunan fuzzy merupakan suatu grup yang memiliki suatu
kondisi atau keadaan tertentu dalam suatu variabel fuzzy. Contoh: Variabel
temperature terbagi menjadi 5 himpunan fuzzy, yaitu: DINGIN, SEJUK,
NORMAL, HANGAT dan PANAS. Gambar 2.2.

Gambar 2.2. Himpunan fuzzy pada variabel temperature


3. Semesta Pembicaraan Semesta pembicaraan adalah keseluruhan nilai yang
diperbolehkan untuk dioperasikan dalam suatu variabel fuzzy. Semesta
pembicaraan merupakan himpunan bilangan real yang senantiasa naik
(bertambah) secara monoton dari kiri ke kanan atau sebaliknya. Nilai semesta
pembicaraan dapat berupa bilangan positif maupun negatif. Contoh semesta
pembicaraan: a. Semesta pembicaraan untuk variabel umur: [0 +∞] b. Semesta
pembicaraan untuk variabel temperatur: [0 40]
4. Domain Domain himpunan fuzzy adalah keseluruhan nilai yang diizinkan dan
boleh dioperasikan dalam suatu himpunan fuzzy. Semesti halnya semesta
pembicaraan, domain merupakan himpunan bilangan real yang senantiasa naik
(bertambah) secara monoton dari kiri ke kanan. Nilai domain dapat berupa
bilangan positif maupun negatif. Contoh domain himpunan fuzzy: a. DINGIN =
[0, 20] b. SEJUK = [15, 25] c. NORMAL = [20, 30] d. HANGAT = [25, 35] e.
PANAS = [30, 40]
SOURCE CODE
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace _4211501003_DHANIWAHYUEKAPUTRA

{
public partial class Form1 : Form
{
double ds, dm, dl, dv;
double sl, sm, sh;
double d, s;

double s_l, m_l, l_l, v_l; // rule


double s_m, m_m, l_m, v_m; // rule
double s_h, m_h, l_h, v_h; // rule

double nobreak1, nobreak2;


double soft1, soft2;
double moderate1, moderate2;
double hard1, hard2;

double atas, bawah, output;

double[] def = new double[101];


double[] defNobreak = new double[101];
double[] defSoft = new double[101];
double[] defModerate = new double[101];
double[] defHard = new double[101];

public Form1()
{
InitializeComponent();
}
void distance()
{
if (d > 0 && d <= 5)
{
ds = 1;
dm = 0;
dl = 0;
dv = 0;
}

if (d > 5 && d <= 10)


{
ds = (10 - d) / (10 - 5);

if (d > 5 && d <= 7.5)


{
dm = 2 * ((d - 5) / (10 - 5) * (d - 5) / (10 - 5));
}
else if (d > 7.5 && d <= 10)
{
dm = 1 - (2 * ((10 - d) / (10 - 5) * (10 - d) / (10 - 5)));
}
dl = 0;
dv = 0;
}

if (d > 10 && d <= 15)


{
dl = (d - 10) / (15 - 10);

if (d > 10 && d <= 12.5)


{
dm = 1 - (2 * ((10 - d) / (10 - 15) * (10 - d) / (10 - 15)));
}
if (d > 12.5 && d <= 15)
{
dm = 2 * ((d - 15) / (10 - 15) * (d - 15) / (10 - 15));
}
ds = 0;
dv = 0;
}
if (d > 15 && d <= 20)
{
dl = (20 - d) / (20 - 15);
dv = (d - 15) / (20 - 15);

ds = 0;
dm = 0;
}
if (d >= 20)
{
dv = 1;
ds = 0;
dm = 0;
dl = 0;
}
}

void speed()
{
if (s > 0 && s <= 35)
{
sl = 1;
sm = 0;
sh = 0;
}
if (s > 35 && s <= 65)
{
sl = (65 - s) / (65 - 35);

if (s > 35 && s <= 50)


{
sm = 2 * ((s - 35) / (65 - 35) * (s - 35) / (65 - 35));
}
if (s >= 50 && s <= 65)
{
sm = 1 - 2 * ((65 - s) / (65 - 35) * (65 - s) / (65 - 35));
}
sh = 0;
}
if (s > 65 && s <= 100)
{
sh = (s - 65) / (100 - 65);

if (s >= 65 && s <= 82.5)


{
sm = 1 - 2 * ((s - 65) / (100 - 65) * (s - 65) / (100 - 65));
}
if (s >= 82.5 && s <= 100)
{
sm = 2 * ((100 - s) / (100 - 65) * (100 - s) / (100 - 65));
}
sl = 0;
}
if (s >= 90)
{
sl = 0;
sm = 0;
sh = 1;
}
}

void rule()
{
s_l = Math.Min(ds, sl); // moderate
m_l = Math.Min(dm, sl); // soft
l_l = Math.Min(dl, sl); // no brake
v_l = Math.Min(dv, sl); // no brake

s_m = Math.Min(ds, sm); // hard


m_m = Math.Min(dm, sm); // moderate
l_m = Math.Min(dl, sm); // soft
v_m = Math.Min(dv, sm); // no brake

s_h = Math.Min(ds, sh); // hard


m_h = Math.Min(dm, sh); // hard
l_h = Math.Min(dl, sh); // moderate
v_h = Math.Min(dv, sh); // soft

nobreak2 = 0;
soft2 = 0;
moderate2 = 0;
hard2 = 0;

nobreak1 = Math.Max(l_l, v_l);


nobreak2 = Math.Max(nobreak1, v_m); // nobreak value

soft1 = Math.Max(m_l, l_m);


soft2 = Math.Max(soft1, v_h); // soft value

moderate1 = Math.Max(s_l, m_m);


moderate2 = Math.Max(moderate1, l_h); // moderate value

hard1 = Math.Max(s_m, s_h);


hard2 = Math.Max(hard1, m_h); // hard value
}

void defuzzyfication()
{
rule();
atas = 0;
bawah = 0;

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


{
double a = Convert.ToDouble(i);

if (i <= 25)
{
defNobreak[i] = 1;
defSoft[i] = 0;
defModerate[i] = 0;
defHard[i] = 0;

chart1.Series["NoBreak"].Points.AddXY(i, defNobreak[i]);
chart1.Series["Soft"].Points.AddXY(i, defSoft[i]);
chart1.Series["Moderate"].Points.AddXY(i, defModerate[i]);
chart1.Series["Hard"].Points.AddXY(i, defHard[i]);

if (defNobreak[i] > nobreak2)


{
defNobreak[i] = nobreak2;
}
def[i] = defNobreak[i];
}

if (i > 25 && i <= 50 )


{
defNobreak[i] = ((50 - a) / (50 - 25));
defSoft[i] = ((a - 25) / (50 - 25));
defModerate[i] = 0;
defHard[i] = 0;

chart1.Series["NoBreak"].Points.AddXY(i, defNobreak[i]);
chart1.Series["Soft"].Points.AddXY(i, defSoft[i]);
chart1.Series["Moderate"].Points.AddXY(i, defModerate[i]);
chart1.Series["Hard"].Points.AddXY(i, defHard[i]);

if (defNobreak[i] > nobreak2)


{
defNobreak[i] = nobreak2;
}
if (defSoft[i] > soft2)
{
defSoft[i] = soft2;
}
def[i] = Math.Max(defNobreak[i], defSoft[i]);
}
if (i > 50 && i <= 75)
{
defSoft[i] = ((75 - a) / (75 - 50));
defModerate[i] = ((a - 50) / (75 - 50));
defNobreak[i] = 0;
defHard[i] = 0;

chart1.Series["NoBreak"].Points.AddXY(i, defNobreak[i]);
chart1.Series["Soft"].Points.AddXY(i, defSoft[i]);
chart1.Series["Moderate"].Points.AddXY(i, defModerate[i]);
chart1.Series["Hard"].Points.AddXY(i, defHard[i]);

if (defSoft[i] > soft2)


{
defSoft[i] = soft2;
}
if (defModerate[i] > moderate2)
{
defModerate[i] = moderate2;
}
def[i] = Math.Max(defSoft[i], defModerate[i]);
}
if (i > 75 && i < 100)
{

defModerate[i] = ((100 - a) / (100 - 75));


defHard[i] = ((a - 75) / (100 - 75));
defNobreak[i] = 0;
defSoft[i] = 0;
chart1.Series["NoBreak"].Points.AddXY(i, defNobreak[i]);
chart1.Series["Soft"].Points.AddXY(i, defSoft[i]);
chart1.Series["Moderate"].Points.AddXY(i, defModerate[i]);
chart1.Series["Hard"].Points.AddXY(i, defHard[i]);

if (defModerate[i] > moderate2)


{
defModerate[i] = moderate2;
}
if (defHard[i] > hard2)
{
defHard[i] = hard2;
}
def[i] = Math.Max(defModerate[i], defHard[i]);
}
if (i >= 100 )
{
defNobreak[i] = 0;
defSoft[i] = 0;
defModerate[i] = 0;
defHard[i] = 1;

chart1.Series["NoBreak"].Points.AddXY(i, defNobreak[i]);
chart1.Series["Soft"].Points.AddXY(i, defSoft[i]);
chart1.Series["Moderate"].Points.AddXY(i, defModerate[i]);
chart1.Series["Hard"].Points.AddXY(i, defHard[i]);

if (defHard[i] > hard2)


{
defHard[i] = hard2;
}
def[i] = defHard[i];
}
atas = atas + (def[i] * i);
bawah = bawah + def[i];
output = atas / bawah;
chart1.Series["Hasil"].Points.AddXY(i, def[i]);
}
}

private void button1_Click(object sender, EventArgs e)


{
d = Convert.ToDouble(textBox1.Text);
s = Convert.ToDouble(textBox2.Text);

distance();
speed();
rule();

textBox3.Text = ds.ToString();
textBox4.Text = dm.ToString();
textBox5.Text = dl.ToString();
textBox6.Text = dv.ToString();

textBox8.Text = sl.ToString();
textBox9.Text = sm.ToString();
textBox10.Text = sh.ToString();

textBox13.Text = nobreak2.ToString();
textBox14.Text = soft2.ToString();
textBox15.Text = moderate2.ToString();
textBox16.Text = hard2.ToString();
}

private void button2_Click(object sender, EventArgs e)


{
chart1.Series["NoBreak"].Points.Clear();
chart1.Series["Soft"].Points.Clear();
chart1.Series["Moderate"].Points.Clear();
chart1.Series["Hard"].Points.Clear();
chart1.Series["Hasil"].Points.Clear();
defuzzyfication();
}

private void button3_Click(object sender, EventArgs e)


{
textBox7.Text = output.ToString();
}
}
}

HASIL
SOURCE
http://repository.usu.ac.id/bitstream/handle/123456789/18098/Chapter
%20II.pdf;jsessionid=A24DBF571AC3A77AE2CED24BA0A23CA0?sequence=4

Anda mungkin juga menyukai