celalakcelikk / To-Give-A-Score-To-The-Teacher-With-The-Student-s-Grade-And-Grade-Average-With-Fuzzy-Logic

0-100 arasında öğrenci notu ve 0-100 arasında sınıfın ortalama notu alınarak 0-10 arasında öğretmene puan verilmesidir. Örnek olarak Öğrencinin notu 50 olsun, sınıfın ortalaması 23 olsun. Öğretmenin puanı 3.5 oluyor. Üçgen üyelik fonksiyonu kullandım. Bulanık çıkarım yöntemi olarak Mamdani(Max-min) yöntemini kullandım. Durulama fonksiyonu olarak Mean of Maximum kullandım.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

To Give A Score To The Teacher With The Student's Grade And Grade Average With Fuzzy Logic

0-100 arasında öğrenci notu ve 0-100 arasında sınıfın ortalama notu alınarak 0-10 arasında öğretmene puan verilmesidir. Örnek olarak Öğrencinin notu 50 olsun, sınıfın ortalaması 23 olsun. Öğretmenin puanı 3.5 oluyor. Üçgen üyelik fonksiyonu kullandım. Bulanık çıkarım yöntemi olarak Mamdani(Max-min) yöntemini kullandım. Durulama fonksiyonu olarak Mean of Maximum kullandım.

Projede Kullanılan IDE'ler ve İndirme Linki

Projenin Çalışması İçin Gerekli Kütüphaler ve İndirme Linkleri

  • Scikit Fuzzy
    • pip install scikit-fuzzy
  • Matplotlib
    • pip install matplotlib
  • Numpy
    • Python programlama dili kurduğunuzda otomatik olarak numpy kütüphaneside yükler.

Projenin Çalışma Adımları

Problemin Girdileri

Girdi değerlerimiz öğrenci notu ve sınıfın ortalama notudur.

    Öğrencinin Not Aralıkları:
  • İyi: 50-100-100
    • Python Kodu: ogrenci_iyi=fuzz.trimf(ogrenci,[50,100,100])
  • Orta: 30-50-70
    • Python Kodu: ogrenci_orta=fuzz.trimf(ogrenci,[30,50,70])
  • Kötü: 0-0-50
    • Python Kodu: ogrenci_orta=fuzz.trimf(ogrenci,[0,0,50])
    Sınıfın Not Ortalaması Puan Aralıkları:
  • İyi: 50-100-100
    • Python Kodu: sinif_ort_iyi=fuzz.trimf(sinif_ort,[50,100,100])
  • Orta: 30-50-70
    • Python Kodu: sinif_ort_orta=fuzz.trimf(sinif_ort,[30,50,70])
  • Kötü: 0-0-50
    • Python Kodu: sinif_ort_kotu=fuzz.trimf(sinif_ort,[0,0,50])

Problemin Çıktısı

Çıktımız öğretmenin puan bilgisidir.

    Öğretmenin Puan Aralıkları:
  • Çok İyi:8-10-10
    • Python Kodu: hocanin_notu_cok_iyi=fuzz.trimf(hocanin_notu,[8,10,10])
  • İyi:6.5-7.5-8.5
    • Python Kodu: hocanin_notu_iyi=fuzz.trimf(hocanin_notu,[6.5,7.5,8.5])
  • Orta:4-5.5-7
    • Python Kodu: hocanin_notu_orta=fuzz.trimf(hocanin_notu,[4,5.5,7])
  • Kötü: 2-3.5-5
    • Python Kodu: hocanin_notu_kotu=fuzz.trimf(hocanin_notu,[2,3.5,5])
  • Çok kötü: 0-0-2.5
    • Python Kodu: hocanin_notu_cok_kotu=fuzz.trimf(hocanin_notu,[0,0,2.5])

Bulanık Sistem Tasarımı

Aşağıdaki resimde görüldüğü gibi öğrenicinin not aralıkları ile sınıfın not aralıkları, hocaya verilecek olan puan aralıklarını sözel olarak yazılıp tablo halinde oluşturuldu.

Giriş ve Çıkış Değer Aralıklarının Tanımlanması

  • Öğrencinin notu= 0 ile 100 arasında belirlendi.
    • Python Kodu: ogrenci= np.arange(0,101,0.1)
  • Sınıfın not ortalaması=0 ile 100 arasında belirlendi.
    • Python Kodu: sinif_ort=np.arange(0,101,0.1)
  • Öğretmenin puanı=0 ile 10 arasında belirlendi.
    • Python Kodu: hocanin_notu=np.arange(0,11,0.1)

Bulandırma

Aşağıdaki resimde görüldüğü gibi gerçek hayatta olması çok zor olan öğretmen puan aralıklarını çıkarıp sistemi bulanıklaştırıldı ve tablo halinde oluşturuldu.

Üyelik İşlemleri

Üçgen üyelik fonksiyonunu kullanıldı çünkü daha verimli sonuçlar alındı.

  • Öğrencinin üyelik fonksiyonları:
    • Python Kodu: ogrenci_kotu=fuzz.trimf(ogrenci,[0,0,50])
    • Python Kodu: ogrenci_orta=fuzz.trimf(ogrenci,[30,50,70])
    • Python Kodu: ogrenci_iyi=fuzz.trimf(ogrenci,[50,100,100])
  • Sınıfın not ortalaması üyelik fonksiyonları:
    • Python Kodu: sinif_ort_kotu=fuzz.trimf(sinif_ort,[0,0,50])
    • Python Kodu: sinif_ort_orta=fuzz.trimf(sinif_ort,[30,50,70])
    • Python Kodu: sinif_ort_iyi=fuzz.trimf(sinif_ort,[50,100,100])
  • Öğretmenin puanı üyelik fonksiyonları:
    • Python Kodu: hocanin_notu_cok_kotu=fuzz.trimf(hocanin_notu,[0,0,2.5])
    • Python Kodu: hocanin_notu_kotu=fuzz.trimf(hocanin_notu,[2,3.5,5])
    • Python Kodu: hocanin_notu_orta=fuzz.trimf(hocanin_notu,[4,5.5,7])
    • Python Kodu: hocanin_notu_iyi=fuzz.trimf(hocanin_notu,[6.5,7.5,8.5])
    • Python Kodu: hocanin_notu_cok_iyi=fuzz.trimf(hocanin_notu,[8,10,10])

Grafiksel gösterimi aşağıdaki gibidir.

Bulanık Çıkarım Yöntemi

Mamdani bulanık çıkarım tiplerinden max-min çıkarımı kullandım. Sonuçlar daha verimli oldu.

Bulanık Kuralların Belirlenmesi

  • Kural-1
    • Öğrencinin notu kötü ve sınıfın ortalama notu kötü = Öğretmenin puanı çok kötü
    • Python Kodu: Kural1= np.fmin(ogr_kotu,sinif_kotu)
      Kontrol_kural1=np.fmin(Kural1,hocanin_notu_cok_kotu)
  • Kural-2
    • Öğrencinin notu orta ve sınıfın ortalama notu kötü = Öğretmenin puanı kötü
    • Python Kodu: Kural2= np.fmin(ogr_orta,sinif_kotu)
      Kontrol_kural2=np.fmin(Kural2,hocanin_notu_kotu)
  • Kural-3
    • Öğrencinin notu iyi ve sınıfın ortalama notu iyi = Öğretmenin puanı çok iyi
    • Python Kodu: Kural3= np.fmin(ogr_iyi,sinif_iyi)
      Kontrol_kural3=np.fmin(Kural3,hocanin_notu_cok_iyi)
  • Kural-4
    • Öğrencinin notu orta ve sınıfın ortalama notu orta = Öğretmenin puanı orta
    • Python Kodu: Kural4= np.fmin(ogr_orta,sinif_orta)
      Kontrol_kural4=np.fmin(Kural4,hocanin_notu_orta)
  • Kural-5
    • Öğrencinin notu iyi ve sınıfın ortalama notu orta = Öğretmenin puanı iyi
    • Python Kodu: Kural5= np.fmin(ogr_iyi,sinif_orta)
      Kontrol_kural5=np.fmin(Kural5,hocanin_notu_iyi)
  • Kural-6
    • Öğrencinin notu orta ve sınıfın ortalama notu iyi = Öğretmenin puanı iyi
    • Python Kodu: Kural6= np.fmin(ogr_orta,sinif_iyi)
      Kontrol_kural6=np.fmin(Kural6,hocanin_notu_iyi)
  • Python Kodu: ctr0=np.zeros_like(hocanin_notu)
  • Python Kodu: c1=np.fmax(Kontrol_kural1,Kontrol_kural2)
  • Python Kodu: c2=np.fmax(Kontrol_kural3,Kontrol_kural4)
  • Python Kodu: c3=np.fmax(Kontrol_kural5,Kontrol_kural6)
  • Python Kodu: c4=np.fmax(c2,c3)
  • Python Kodu: toplanan_kurallar= np.fmax(c1,c4)

Durulama

  • Durulama yöntemlerinden Mean of Maximum – En Büyük Üyelik dereceli elemaların orta noktası yöntemi kullandım çünkü diğer yöntemlere göre daha optimum sonuçlar alındı.
    • Python Kodu: durulama_islemi= fuzz.defuzz(hocanin_notu,toplanan_kurallar,'mom')

Sistem Üzerinde Oluşturulan Çıktı

Girdiler

Sonuç

About

0-100 arasında öğrenci notu ve 0-100 arasında sınıfın ortalama notu alınarak 0-10 arasında öğretmene puan verilmesidir. Örnek olarak Öğrencinin notu 50 olsun, sınıfın ortalaması 23 olsun. Öğretmenin puanı 3.5 oluyor. Üçgen üyelik fonksiyonu kullandım. Bulanık çıkarım yöntemi olarak Mamdani(Max-min) yöntemini kullandım. Durulama fonksiyonu olarak Mean of Maximum kullandım.


Languages

Language:Python 100.0%