Rabu, 02 Januari 2013

Aplikasi Dengan Metode Fuzzy Tsukamoto

Aplikasi Dengan Metode Fuzzy Tsukamoto

 SUMBER : http://dlaboratory.wordpress.com/2012/04/13/aplikasi-dengan-metode-fuzzy-tsukamoto/

Tugas, tugas dan tugas :( Kira-kira sampai kapan ya tugas itu berakhir untuk mahasiswa :D . Kali ini saya coba share sebagian source code hasil dari tugas kuliah yang sudah terselesaikan (Tapi sebenarnya masih harus dipresentasikan tanggal 7 Mei sih) :D . Sesuai dengan judul posting ini tugas yang diberikan adalah tugas membuat aplikasi dengan menggunakan metode Fuzzy Tsukamoto Berdasarkan suatu Kasus. Kasus itu yang saya jadikan acuan, lihat disini untuk mengetahui serperti apa kasusnya (Program : 1). Aplikasi yang dibuat menggunakan Visual Basic.

Berikut langkah-langkahnya
Pasang 8 TextBox dan 16 ComboBox, Berikut Setting untuk propertiesnya

[TextBox]
{Text1}
Nama : Variabel
Index : 0
{Text2}
Nama : Variabel
Index : 1
Atur nama Text3 sampai Text6 menjadi “Variabel” dan atur indexnya menjadi berurutan mulai dari 2-5
[ComboBox]
{Combo1}
Nama : Pembayaran
Index : 0
Lakukan hal sama dengan TextBox, Untuk 3 ComboBox berikutnya. Hanya Saja Nama = “Pembayaran” dan Index mulai dari 1-3
{Combo5}
Nama : Operator
Index : 0
Lakukan Hal yang sama dengan ComboBox1 – ComboBox4 hanya saja nama = “Operator”
{Combo9}
Nama : Pelayanan
Index : 0
Lakukan Hal yang sama dengan ComboBox5 – ComboBox8 hanya saja nama = “Pelayanan”
{Combo13}
Nama : Tips
Index : 0
Lakukan Hal yang sama dengan ComboBox9 – ComboBox12 hanya saja nama = “Tips”
Tambahkan Label dan ComboBox
Ketikkan kode berikut. Kode berikut merupakan fungsi nantinya yang akan digunakan sebagai aturan fuzzy (rule).

01'SETTING VARIABEL KEANGGOTAAN DAN OPERATOR
02Private Sub AddRule()
03    Dim a As Long, b As Long, c As Long, d As Long
04    For a = Pembayaran.LBound To Pembayaran.UBound
05        Pembayaran(a).AddItem "SEDIKIT"
06        Pembayaran(a).AddItem "BANYAK"
07    Next
08    For b = Operator.LBound To Operator.UBound
09        Operator(b).AddItem "AND"
10        Operator(b).AddItem "OR"
11    Next
12    For c = Pelayanan.LBound To Pelayanan.UBound
13        Pelayanan(c).AddItem "CEPAT"
14        Pelayanan(c).AddItem "LAMA"
15    Next
16    For d = Tips.LBound To Tips.UBound
17        Tips(d).AddItem "SEDIKIT"
18        Tips(d).AddItem "BANYAK"
19    Next
20End Sub
Langkah selanjutnya ketikkan kode berikut. Kode ini merupakan fungsi untuk menghitung derajat keanggotaan dari masing-masing variabel

01'MENGHITUNG DERAJAT KEANGGOTAAN DARI MASING-MASING VARIABEL
02Private Function setDerajatKeanggotaan() As String
03    Dim a As Long, b As Long, c As Single, d As Single, MBayar As String, MPelayanan As String
04    Dim Sedikit As Long, Banyak As Long
05    Dim Cepat As Long, Lama As Long
06    a = Val(Nilai(0).Text)
07    b = Val(Nilai(1).Text)
08    Sedikit = Val(Variabel(0).Text)
09    Banyak = Val(Variabel(1).Text)
10    Cepat = Val(Variabel(2).Text)
11    Lama = Val(Variabel(3).Text)
12     
13    If a <= Sedikit Then
14        c = 1
15    ElseIf Sedikit <= a <= Banyak Then
16        c = (Banyak - a) / (Banyak - Sedikit)
17    ElseIf a >= Banyak Then
18        c = 0
19    End If
20    MBayar = c
21    If a <= Sedikit Then
22        c = 0
23    ElseIf Sedikit <= a <= Banyak Then
24        c = (a - Sedikit) / (Banyak - Sedikit)
25    ElseIf a >= Banyak Then
26        c = 1
27    End If
28    MBayar = MBayar & "|" & c
29     
30       
31    If b <= Cepat Then
32        d = 1
33    ElseIf Cepat <= b <= Lama Then
34        d = (Lama - b) / (Lama - Cepat)
35    ElseIf b >= Lama Then
36        d = 0
37    End If
38    MPelayanan = d
39     
40    If b <= Cepat Then
41        d = 0
42    ElseIf Cepat <= b <= Lama Then
43        d = (b - Cepat) / (Lama - Cepat)
44    ElseIf b >= Lama Then
45        d = 1
46    End If
47    MPelayanan = MPelayanan & "|" & d
48     
49    setDerajatKeanggotaan = MBayar & "#" & MPelayanan
50End Function
Selanjutnya ketikkan kode berikut. Fungsi ini berfungsi untuk mencari Alpha Predikat dan nilai Z dari rule yang ditentukan

01'PROSES UNTUK RULE
02Private Function setProsesRule() As String
03    Dim Pisah
04    Dim MBayar
05    Dim MPelayanan
06    Dim NilaiAlpha
07    Dim a As Long, b As Long, c As Single, d As Single, AlphaPredikat As String, NilaiZ As String
08    Pisah = Split(setDerajatKeanggotaan, "#")
09    MBayar = Split(Pisah(0), "|")
10    MPelayanan = Split(Pisah(1), "|")
11     
12    For a = Pembayaran.LBound To Pembayaran.UBound
13        Select Case Operator(a).ListIndex
14        Case 0
15            If MBayar(Pembayaran(a).ListIndex) >= MPelayanan(Pelayanan(a).ListIndex) Then
16                c = MPelayanan(Pelayanan(a).ListIndex)
17            Else
18                c = MBayar(Pembayaran(a).ListIndex)
19            End If
20        Case 1
21            If MBayar(Pembayaran(a).ListIndex) <= MPelayanan(Pelayanan(a).ListIndex) Then
22                c = MPelayanan(Pelayanan(a).ListIndex)
23            Else
24                c = MBayar(Pembayaran(a).ListIndex)
25            End If
26        End Select
27        If a <> 3 Then
28            AlphaPredikat = AlphaPredikat & c & "|"
29        Else
30            AlphaPredikat = AlphaPredikat & c
31        End If
32    Next a
33     
34    'Menentukan Nilai Z
35    NilaiAlpha = Split(AlphaPredikat, "|")
36    For b = Tips.LBound To Tips.UBound
37        Select Case Tips(b).ListIndex
38        Case 0
39            d = Val(Variabel(5).Text) - (NilaiAlpha(b) * (Val(Variabel(5).Text) - Val(Variabel(4).Text)))
40        Case 1
41            d = (NilaiAlpha(b) * (Val(Variabel(5).Text) - Val(Variabel(4).Text))) + Val(Variabel(4).Text)
42        End Select
43        If b <> 3 Then
44            NilaiZ = NilaiZ & d & "|"
45        Else
46            NilaiZ = NilaiZ & d
47        End If
48    Next b
49     
50    setProsesRule = AlphaPredikat & "#" & NilaiZ
51End Function
Berikut ini merupakan fungsi untuk menghitung nilai Z akhir

01Private Function HasilAkhir() As Integer
02    Dim NilaiZ
03    Dim AlfaPredikat
04    Dim Potong
05    Dim Alpha As Single
06    Dim Sigma As Single
07    Dim a As Long, b As Long
08    Potong = Split(setProsesRule, "#")
09    AlfaPredikat = Split(Potong(0), "|")
10    NilaiZ = Split(Potong(1), "|")
11    Alfa = 0
12    Sigma = 0
13    For a = LBound(NilaiZ) To UBound(NilaiZ)
14        Sigma = Sigma + (NilaiZ(a) * AlfaPredikat(a))
15    Next a
16    For b = LBound(AlfaPredikat) To UBound(AlfaPredikat)
17        Alpha = Alpha + AlfaPredikat(b)
18    Next b
19     
20    HasilAkhir = Sigma / Alpha
21End Function
kode-kode tadi masih belum terpanggil. kode untuk memanggilnya adalah sebagai berikut

1Private Sub Form_Load()
2    call AddRule
3End Sub
4 
5Private Sub Command1_Click()
6    Label1.Caption = Format(HasilAkhir, "#,###")
7End Sub

3 komentar:

boleh donk minta filex aja gan yang baik..

http://rainbowcodec.blogspot.com/2015/05/metode-fuzzy-tsukamoto-vbnet-2012-dan.html

cek gan mana tau bermanfaat :D

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More