Tutorial Membuat Fuzzy Logic Menggunakan Python Menggunakan Fuzzy Mamdani ...

Tutorial Membuat Fuzzy Logic Menggunakan Python Menggunakan Fuzzy Mamdani ...


Sumber : - Tutorial Code (mradityae.blogspot.com)

PERHATIKAN SCRIPT DIBAWAH INI !!!! 

.


 Fuzzy Mamdani (artificial intelligence)

Menggunakan bahasa scripting python
sumber = http://hobbycoding.web.id/source-code-fuzzy-logic-pemberian-beasiswa-dengan-bahasa-c/

ipkBurukmin = 0
ipkBurukmax = 2.75

ipkCukupmin = 2
ipkCukupmax = 3.25

ipkBagusmin = 2.75
ipkBagusmax = 4.05

gajiKecilmin = 0
gajiKecilmax = 3

gajiSedangmin = 1
gajiSedangmax = 6

gajiBesarmin = 4
gajiBesarmax = 12

gajiSangatBesarmin = 7
gajiSangatBesarmax = 1000

"""
gambar untuk memperjelas fungsi derajatKeanggotaanSegitiga
            /|
          /  |
        /    |
       ----------
       a     b   c
"""
def inRange(minimal,maximal,input):
    minimal = min(minimal, maximal)
    maximal = max(minimal, maximal)

    #print minimal
    #print maximal
 
    if((input> minimal) and (input < maximal)):
        return 1
    else:
        return 0

def fuzzyRules(ipk,gaji):
    global nilaikelulusanrendah
    global nilaikelulusantinggi

    nilaikelulusanrendah = 0
    nilaikelulusantinggi = 0

    ipkBuruk = inRange(ipkBurukmin, ipkBurukmax, ipk)
    ipkCukup = inRange(ipkCukupmin, ipkCukupmax, ipk)
    ipkBagus = inRange(ipkBagusmin, ipkBagusmax, ipk)

    gajiKecil = inRange(gajiKecilmin, gajiKecilmax, gaji)
    gajiSedang = inRange(gajiSedangmin, gajiSedangmax, gaji)
    gajiBesar = inRange(gajiBesarmin, gajiBesarmax, gaji)
    gajiSangatBesar = inRange(gajiSangatBesarmin, gajiSangatBesarmax, gaji)

    nkrendah_array = []
    nktinggi_array = []

    if ipkBuruk == 1 and gajiKecil == 1:
        print "Rule 1 : IPK Buruk dan Gaji Kecil"
        derajatkelulusanrendah = min(derajatipkburuk, derajatgajikecil)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = derajatkelulusanrendah
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)

    if ipkBuruk == 1 and gajiSedang == 1:
        print "Rule 2 : IPK Buruk dan Gaji Sedang"
        derajatkelulusanrendah = min(derajatipkburuk, derajatgajisedang)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = min(derajatipkburuk, derajatgajisedang)
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)

    if ipkBuruk == 1 and gajiBesar == 1:
        print "Rule 3 : IPK Buruk dan Gaji besar"
        derajatkelulusanrendah = min(derajatipkburuk, derajatgajibesar)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = derajatkelulusanrendah
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)

    if ipkBuruk == 1 and gajiSangatBesar == 1:
        print "Rule 4 : IPK Buruk dan Gaji sangatbesar"
        derajatkelulusanrendah = min(derajatipkburuk, derajatgajisangatbesar)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = derajatkelulusanrendah
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)
 
    if ipkCukup == 1 and gajiKecil == 1:
        print "Rule 5 : IPK Cukup dan Gaji Kecil"
        derajatkelulusantinggi = min(derajatipkcukup, derajatgajikecil)
        print "Derajat Kelulusan Tinggi ",derajatkelulusantinggi
        nilaikelulusantinggi = derajatkelulusantinggi
        nktinggi = nktinggi_array.append(nilaikelulusantinggi)

    if ipkCukup == 1 and gajiSedang == 1:
        print "Rule 6 : IPK Cukup dan Gaji Sedang"
        derajatkelulusanrendah = min(derajatipkcukup, derajatgajisedang)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = derajatkelulusanrendah
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)

    if ipkCukup == 1 and gajiBesar == 1:
        print "Rule 7 : IPK Cukup dan Gaji Besar"
        derajatkelulusanrendah = min(derajatipkcukup, derajatgajibesar)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = derajatkelulusanrendah
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)

    if ipkCukup == 1 and gajiSangatBesar == 1:
        print "Rule 8 : IPK Cukup dan Gaji Sangat Besar"
        derajatkelulusanrendah = min(derajatipkcukup, derajatgajisangatbesar)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = derajatkelulusanrendah
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)

    if ipkBagus == 1 and gajiKecil == 1:
        print "Rule 9 : IPK Bagus dan Gaji Kecil"
        derajatkelulusantinggi = min(derajatipkbagus, derajatgajikecil)
        print "Derajat Kelulusan Tinggi ",derajatkelulusantinggi
        nilaikelulusantinggi = derajatkelulusantinggi
        nktinggi = nktinggi_array.append(nilaikelulusantinggi)

    if ipkBagus == 1 and gajiSedang == 1:
        print "Rule 10 : IPK Bagus dan Gaji Sedang"
        derajatkelulusantinggi = min(derajatipkbagus, derajatgajisedang)
        print "Derajat Kelulusan Tinggi ",derajatkelulusantinggi
        nilaikelulusantinggi = derajatkelulusantinggi
        nktinggi = nktinggi_array.append(nilaikelulusantinggi)

    if ipkBagus == 1 and gajiBesar == 1:
        print "Rule 11 : IPK Bagus dan Gaji Besar"
        derajatkelulusantinggi = min(derajatipkbagus, derajatgajibesar)
        print "Derajat Kelulusan Tinggi ",derajatkelulusantinggi
        nilaikelulusantinggi = derajatkelulusantinggi
        nktinggi = nktinggi_array.append(nilaikelulusantinggi)

    if ipkBagus == 1 and gajiSangatBesar == 1:
        print "Rule 12 : IPK Bagus dan Gaji Sangat Besar"
        derajatkelulusanrendah = min(derajatipkbagus, derajatgajisangatbesar)
        print "Derajat Kelulusan Rendah ",derajatkelulusanrendah
        nilaikelulusanrendah = min(derajatipkbagus, derajatgajisangatbesar)
        nkrendah = nkrendah_array.append(nilaikelulusanrendah)

 
    if nilaikelulusantinggi == 0:
        nilaikelulusantinggi = 0
    else:
        nilaikelulusantinggi = max(nktinggi_array)

    if nilaikelulusanrendah == 0:
        nilaikelulusanrendah = 0
    else:
        nilaikelulusanrendah = max(nkrendah_array)
 
    print
    print "Nilai Kelulusan Rendah : ",nilaikelulusanrendah
    print "Nilai Kelulusan Tinggi : ",nilaikelulusantinggi

def centroidMethod(nilaikelulusanrendah, nilaikelulusantinggi):
 
    global hasil
    hasil =  (((10+20+30+40+50+60)*nilaikelulusanrendah)+((70+80+90+100)*nilaikelulusantinggi))/((6*nilaikelulusanrendah)+(4*nilaikelulusantinggi))
    print "Nilai Kelulusan : ",hasil
    return hasil

def fungsiKeanggotaanSegitiga(a, b, c, x):

    if ((x>a) and (x<b)):
        derajatKeanggotaan = (x-a)/(b-a)

    elif (x==b):
        derajatKeanggotaan = 1

    elif ((x>b) and (x<c)):
 
        derajatKeanggotaan = -((x-c)/(c-b))
 
    else:
        derajatKeanggotaan = 0
 
    return derajatKeanggotaan

"""
gambar untuk fungsi derajat KeanggotaanTrapesium
        -------
      / |      |
    /   |      |
  -------------------
  a     b      c     d
"""

def fungsiKeanggotaanTrapesium(a,b,c,d,x):

    if ((x>a) and (x<b)):
        derajatKeanggotaan = (x-a)/(b-a)
 
    elif ((x>=b) and (x<=c)):
        derajatKeanggotaan = 1
 
    elif ((x>c) and (x<d)):
        derajatKeanggotaan = -((x-d)/(d-c))

    else:
        derajatKeanggotaan = 0
 
    return derajatKeanggotaan

def derajatIpk(ipk):

    global derajatipkburuk
    global derajatipkcukup
    global derajatipkbagus

    derajatipkburuk = fungsiKeanggotaanTrapesium(ipkBurukmin,ipkBurukmin,2,ipkBurukmax,ipk)
    derajatipkcukup = fungsiKeanggotaanSegitiga(ipkCukupmin,2.75,ipkCukupmax,ipk)
    derajatipkbagus = fungsiKeanggotaanTrapesium(ipkBagusmin,3.25,ipkBagusmax,ipkBagusmax,ipk)

    print "Derajat IPK Buruk : ",derajatipkburuk
    print "Derajat IPK Cukup : ",derajatipkcukup
    print "Derajat IPK Bagus : ",derajatipkbagus

def derajatGaji(gaji):

    global derajatgajikecil
    global derajatgajisedang
    global derajatgajibesar
    global derajatgajisangatbesar
    global derajatgajibesar

    derajatgajikecil = fungsiKeanggotaanTrapesium(gajiKecilmin,gajiKecilmin,1,gajiKecilmax,gaji)
    derajatgajisedang = fungsiKeanggotaanTrapesium(gajiSedangmin,3,4,gajiSedangmax,gaji)
    derajatgajibesar = fungsiKeanggotaanTrapesium(gajiBesarmin,6,7,gajiBesarmax,gaji)
    derajatgajisangatbesar = fungsiKeanggotaanTrapesium(gajiSangatBesarmin,12,gajiSangatBesarmax,gajiSangatBesarmax,gaji)

    print "Derajat Gaji Kecil        : ",derajatgajikecil
    print "Derajat Gaji Sedang       : ",derajatgajisedang
    print "Derajat Gaji besar        : ",derajatgajibesar
    print "Derajat Gaji Sangat Besar : ",derajatgajisangatbesar

def main():

    from time import time
 
    data = []
    n = int(input("Masukkan jumlah data : "))
 
    for i in range(1, n+1):
     
        ipk = float(raw_input("Masukkan IPK Anda : "))
        gaji = float(raw_input("Masukkan gaji anda : "))
        t0 = time()
     
        print "\n==========  PROSES FUZZYFICATION   ==========\n"
        print "\n========== Derajat Keanggotaan IPK ==========\n"
        dIpk = derajatIpk(ipk)
     
        print "\n========== Derajat Keanggotaan Gaji ==========\n"
        dGaji = derajatGaji(gaji)
     
        print "\n========== PROSES INTERFERENCES ==========\n"
        fuzzyRules(ipk, gaji)
     
        print "\n========== PROSES DEFUZZYFICATION ==========\n"
     
        DEFUZZYFICATION = centroidMethod(nilaikelulusanrendah,nilaikelulusantinggi)
        print DEFUZZYFICATION
        DEFUZZY = data.append(DEFUZZYFICATION)
        t1 = time() - t0
        print "Waktu Eksekusi Fuzzy = ",t1
 
    print data
    print "data paling besar adalah : ",max(data)
    return 0

 
if __name__ == "__main__":
    main()

Tidak ada komentar:

Posting Komentar

Cara Mengatasi ILLEGAL SOFTWARE CorelDraw X7 Dan X8

  Cara Mengatasi ILLEGAL SOFTWARE CorelDraw X7 Dan X8 Goliketrik.com  - Coreldraw adalah salah satu aplikasi desain grafis berbasis vector y...