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.
- Proje Python 3 ile yazılmıştır.
- Anaconda & Spyder
- İndirme Linki: https://www.anaconda.com/distribution/
- PyCharm
- İndirme Linki: https://www.jetbrains.com/pycharm/download/#section=windows
- Scikit Fuzzy
pip install scikit-fuzzy
- Matplotlib
pip install matplotlib
- Numpy
- Python programlama dili kurduğunuzda otomatik olarak numpy kütüphaneside yükler.
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])
- Python Kodu:
-
Orta: 30-50-70
- Python Kodu:
ogrenci_orta=fuzz.trimf(ogrenci,[30,50,70])
- Python Kodu:
-
Kötü: 0-0-50
- Python Kodu:
ogrenci_orta=fuzz.trimf(ogrenci,[0,0,50])
- Python Kodu:
-
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])
- Python Kodu:
-
Orta: 30-50-70
- Python Kodu:
sinif_ort_orta=fuzz.trimf(sinif_ort,[30,50,70])
- Python Kodu:
-
Kötü: 0-0-50
- Python Kodu:
sinif_ort_kotu=fuzz.trimf(sinif_ort,[0,0,50])
- Python Kodu:
Çı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])
- Python Kodu:
-
İyi:6.5-7.5-8.5
- Python Kodu:
hocanin_notu_iyi=fuzz.trimf(hocanin_notu,[6.5,7.5,8.5])
- Python Kodu:
-
Orta:4-5.5-7
- Python Kodu:
hocanin_notu_orta=fuzz.trimf(hocanin_notu,[4,5.5,7])
- Python Kodu:
-
Kötü: 2-3.5-5
- Python Kodu:
hocanin_notu_kotu=fuzz.trimf(hocanin_notu,[2,3.5,5])
- Python Kodu:
-
Çok kötü: 0-0-2.5
- Python Kodu:
hocanin_notu_cok_kotu=fuzz.trimf(hocanin_notu,[0,0,2.5])
- Python Kodu:
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.
-
Öğrencinin notu= 0 ile 100 arasında belirlendi.
- Python Kodu:
ogrenci= np.arange(0,101,0.1)
- Python Kodu:
-
Sınıfın not ortalaması=0 ile 100 arasında belirlendi.
- Python Kodu:
sinif_ort=np.arange(0,101,0.1)
- Python Kodu:
-
Öğretmenin puanı=0 ile 10 arasında belirlendi.
- Python Kodu:
hocanin_notu=np.arange(0,11,0.1)
- Python Kodu:
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.
Üç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])
- Python Kodu:
-
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])
- Python Kodu:
-
Öğ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])
- Python Kodu:
Grafiksel gösterimi aşağıdaki gibidir.
Mamdani bulanık çıkarım tiplerinden max-min çıkarımı kullandım. Sonuçlar daha verimli oldu.
-
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 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')
- Python Kodu: