Bulanık Mantık #4: Bulanık Sistem Uygulaması

Ahmet Ataşoğlu
6 min readAug 19, 2019

Önceki yazılarda basit bir bulanık sistem oluşturmak için gerekli olan tasarım parametrelerinden bahsettik. Bu yazıda, tasarım zincirinin son halkası olan durulaştırma yönteminden bahsedeceğiz. Yazının sonunda ise klasik bir bulanık mantık problemini, şimdiye dek incelediğimiz yöntemlerle çözmeye çalışacağız.

Durulaştırma

Bulanık sisteme girilen değerlerin; oluşturduğumuz kural ve bilgilerin süzgecinden geçmeden evvel, cebirsel dünyadan bulanık mantık dünyasına geçiş yapabilmesi için, bulanıklaştırma denilen bir işlemden geçirildiğine değindik. Burada tam olarak; bildiğimiz aralıktaki giriş değerleri, 0 ve 1 aralığındaki bulanık değerlere (üyelik fonksiyonlarının yardımıyla) ölçekleniyor. Sonrasında oluşturulan kurallar ve bu kurallara göre çalışan çıkarım birimleri, bulanık değerleri referans alarak işlemlerini gerçekleştiriyor. Üretilen çıkış değeri buraya kadar bulanık değer olarak geldiği için durulaştırılması gerekiyor.

Bahsedeceğimiz durulaştırma yöntemlerini uygulamak, çıkarım yönteminden tamamen bağımsız bir süreç olmayabilir. Örn. Sugeno çıkarım yönteminde: çıkış için oluşturulan fonksiyonlar, istenilen aralıkta değerler verecek şekilde tasarlanmışsa; bu durumda çıkarım biriminden alınan çıktılar duru değerler olacaktır ve ekstra bir durulaştırma işlemine gerek kalmayacaktır.

Literatürde önerilen çok sayıda durulaştırma yöntemi bulunmaktadır. Bunlardan en çok kullanılanları inceleyelim.

1. Ağırlık Merkezi

Özellikle Mamdani çıkarım yönteminde tercih edilen ve sıkça kullanılan durulaştırma yöntemlerinden birisidir. Tetiklenen kurallardan gelen üyelik değerlerinin, bulanık çıkış kümeleri üzerinde kestiği alanlar toplanır. Daha sonra bu alanların geometrik ağırlık merkezi aşağıdaki formül (Formül 1) ile hesaplanır. Ortaya çıkan değer, artık durulaşmış çıkış değerdir.

Formül 1. Ağırlık merkezinin hesaplanması

2. Ağırlıklı Ortalama

Simetrik üyelik fonksiyonuna sahip çıkış kümelerinde uygulanan bir yöntemdir. Ağırlıklı ortalama yönteminde her bir kuraldan alınan üyelik değeri, bu değerin çıkış kümesi üzerinde kestiği alanla çarpılır. Bu çarpımların toplamının; bütün kurallardan alınan üyelik değerlerinin toplamına oranı bize ağırlıklı ortalamayı vermektedir. Aşağıdaki formülde (Formül 2) belirtilmiştir.

Formül 2. Ağırlık ortalama değeri ile durulaştırma. n, toplam kural sayıdır.

3. Alan Merkezi

Bulanık çıkış kümeleri üzerinde kesilen alanlarda, en büyük üyelik değerini veren çıkış değerleri için aşağıdaki formül (Formül 3) uygulanır. Ortaya çıkan değere alan merkezi denilmektedir. Ağırlıklı ortalamaya benzer bir yöntemdir. Fakat bu yöntemde alan hesaplamaya gerek kalmaz.

Formül 3. Alan merkezi. n, toplam kural sayısıdır.

4. En Büyüklerin En Küçüğü ve En Büyüğü

Tüm bulanık çıkış kümelerinin birleşiminde belirlenen en küçük ya da en büyük değerlerin seçilmesi yöntemidir. Doğrudan çıkış aralığı üzerinde, üyelik derecesine göre bir değer seçildiği için; matematiksel işleme gereksinim duyulmaz. (Şekil 1)

5. En Büyüklerin Ortalaması

4. yönteme benzer bir yöntemdir. Burada da, en büyük üyelik değerini veren çıkış değerlerinin ortalaması hesaplanır. (Şekil 1)

Şekil 1. Durulaştırma yöntemleri. Y ekseni, çıkış değerler için istenen aralığı tutan eksendir.

Uygulama: Çamaşır Makinesi Tasarımı

Görsel: kaynak

Bulanık mantığın sıkça kullanıldığı alanlardan birisi de kontrol sistemleridir. Her koşulda “A girdisine karşılık B çıktısını üret” gibi tam tanımlı ve bütün ihtimalleri değerlendiren tasarımlar mümkün olmadığı için, sistem için gözetilen kriterlere uyacak ve her girdi için en makul çıktıyı üretebilecek sistemlere ihtiyaç duyulur. İnsan mantığının çalışmasını referans alarak çıktılar üretebilen bulanık mantık da, doğal olarak, bu konuda iyi bir alternatif olarak karşımıza çıkar.

Çamaşır makinesi tasarımı, bulanık mantık anlatımında sıkça verilen bir örnektir. Bu tasarım problemi, aslında en basit anlamda bir optimizasyon (iyileme) problemidir. Çünkü geliştiriciden beklenen; kirli çamaşır miktarı ve suyun sertlik derecesine göre, makinenin devir sayısını ideal bir değerde tutarak verimliliğin sağlanmasıdır. Problemin giriş-çıkışlarının farklı olduğu çeşitli versiyonları da bulunmaktadır.

Problemimizi çözümlemeye; girişleri ve çıkışı belirleyerek başlayalım.

  • Girişler: Çamaşır miktarı (kg), sertlik derecesi (ASD)
  • Çıkış: Yıkama devri (rpm)

Not: Sertlik birimi olarak Amerikan Sertlik Derecesi (ASD) esas alınmıştır.

Adım 1: Bulanık kümelerin oluşturulması

Belirlediğimiz giriş ve çıkış değerleri için, dilsel değerleri belirten bulanık kümeleri aşağıdaki gibi oluşturalım:

  • Sertlik: Yumuşak, Az Yumuşak, Az Sert, Sert
  • Çamaşır: Az, Normal, Çok
  • Devir: Hassas, Hafif, Normal, Güçlü

Adım 2: Üyelik fonksiyonlarının oluşturulması

Belirtilen bulanık kümeler için üçgen ve yamuk üyelik fonksiyonları kullanarak, aşağıdaki grafikleri oluşturalım.

Şekil 2. Sertlik için üyelik fonksiyonları.
Şekil 3. Çamaşır miktarı için üyelik fonksiyoları.
Şekil 3. Devir sayısı için üyelik fonksiyonları.

Daha önce de belirttiğimiz gibi; dilsel değerler için aralıkların belirlenmesi, sistemi tanımlayan uzmanların bilgi ve tecrübelerine göre değişebilir.

Adım 3: Kuralların oluşturulması

Sistemimizin kural tabanı için, aşağıdaki kuralları belirleyelim:

  • Kural 1: EĞER sertlik YUMUŞAK VE çamaşır AZ İSE, O HALDE devir HASSASTIR.
  • Kural 2: EĞER su AZ YUMUŞAK VE çamaşır NORMAL İSE, O HALDE devir HAFİFTİR.
  • Kural 3: EĞER su AZ SERT VEYA çamaşır NORMAL İSE, O HALDE devir NORMALDİR.
  • Kural 4: EĞER su SERT VEYA çamaşır ÇOK İSE, O HALDE devir GÜÇLÜDÜR.

Görüldüğü gibi, her bir çıkış değeri için birer kural üretilmiştir. Tercih edilirse, aynı çıkış değerleri için birden fazla kural da üretilebilir. Fakat çözümü olabildiğince basit tutmak için gerek duyulmamıştır.

Adım 4: Giriş değerlerinin alınması ve bulanıklaştırılması

Problemimiz için tanımlanan giriş değerleri şu şekilde olsun:

  • Sertlik: 8 ASD
  • Çamaşır miktarı: 4.5 kg

Bulanıklaştırma işlemine geçelim ve giriş değerlerini, üyelik fonksiyonlarını kullanarak, bulanık değerlere dönüştürelim. Sertlik değeri için:

  1. µYumuşak(8) = 0
  2. µAzYumuşak(8) = 0.5
  3. µAzSert(8) = 0.5
  4. µSert(8) = 0

8 ASD’lik sertlik değerinin, Az Yumuşak ve Az Sert bulanık kümelerine eşit derecede dahil olduğu görülüyor.

Çamaşır miktarı için:

  1. µAz(4.5) = 0
  2. µNormal(4.5) =0.25
  3. µÇok(4.5) = 0.75

Bulunan değerler, grafikler üzerinden çıkarılacak doğru denklemleriyle kolaylıkla hesaplanabilir.

Adım 5: Tetiklenen kuralların tespit edilmesi

Dikkat ettiyseniz, 1. ve 2. kuralda olgular ‘ve’ bağlacı ile bağlanmışken; diğer kurallarda ‘veya’ bağlacı kullanılmıştır. Bu da, kurallardan çıkarılacak sonuçlar için, ve bağlacı yerine min; veya bağlacı yerine ise max operatörünün kullanılması gerektiği anlamına gelir. Üyelik değerlerini, kuralların ifade ettiği olgulara göre, ilgili operatörlere uygularsak;

  • Kural 1: min(0, 0) = 0
  • Kural 2: min(0.5, 0.25) =0.25
  • Kural 3: max(0.5, 0.25) = 0.5
  • Kural 4: max(0, 0.75) = 0.75

Sonuçlarını elde ederiz. Bu durumda, 1. kural haricindeki tüm kuralların tetiklendiğini söyleyebiliriz.

Adım 6: Çıkarımın gerçeklenmesi

Çıkarım yöntemi olarak Mamdani çıkarımını tercih edebiliriz. Hatırladığınız gibi Mamdani çıkarımını; tetiklenen kurallardan gelen üyelik değerlerinin, çıkış kümeleri üzerinde kestiği bölgelerin hesaplanmasını öneren yöntem olarak belirtmiştik. O halde; kurallardan gelen değerlerin, işaret ettikleri çıkış kümelerine göre y-ekseninde (üyelik değerleri ekseni) keseceği değerler şu şekilde olacaktır (ÇK: Çıkış Kümesi):

  • Hassas ÇK için: 0 (Kural1)
  • Hafif ÇK için: 0.25 (Kural 2)
  • Normal ÇK için: 0.5 (Kural 3)
  • Güçlü ÇK için: 0.75 (Kural 4)

Çıkan sonuç aşağıdaki gibi (Şekil 4) olacaktır:

Şekil 4. Mamdani çıkarımı sonucunda ortaya çıkan alanlar.

Adım 7: Durulaştırma

Durulaştırma için alan merkezi yöntemini kullanalım. Öncelikle her bir kuraldan gelen çıkış değeri için; Şekil 4.te gösterilen, üyelik fonksiyonlarını kestiği minimum ve maksimum çıkış değerlerini, ardından bu değerlerin ortalamasını hesaplayalım:

  • Hassas ÇK için: min = 0, max = 0, ortalama = 0
  • Hafif ÇK için: min = 450, max = 750, ortalama = 600
  • Normal ÇK için: min = 700, max = 900, ortalama = 800
  • Güçlü ÇK için: min = 950, max = 1200, ortalama = 1075

Ortalamaları Formül 3.e göre üyelik dereceleri ile çarpıp toplarsak:

  • 600 * 0.25 + 800 * 0.5 + 1075 * 0.75 = 1356.25

değeri hesaplanır. Son olarak; elde ettiğimiz toplamı, üyelik derecelerinin toplamına bölerek durulaştırılmış değeri bulalım:

  • Kural değerleri toplamı: 0.25 + 0.5 + 0.75 = 1.5
  • Alan merkezi = 1356.25 / 1.5 = 904,16

Alan merkezi olarak hesapladığımız değer, aynı zamanda durulaştırılmış değerdir. Yani, (belirttiğimiz giriş değerleri olan) 4,5 kg’lık çamaşır ve 8 ASD sertliğe sahip yıkama suyu için, tasarladığımız bulanık sistemin bize önerdiği devir sayısı yaklaşık 904 rpm’dir. Kullanılan durulaştırma yöntemine göre, farklı sonuçlar ortaya çıkabileceğini belirtelim.

Sonuç

Literatürde sıkça geçen çamaşır makinesi tasarımı üzerinden; basit bir bulanık sistem oluşturmayı ve bu bağlamda, bir optimizasyon problemini çözümlemeyi tecrübe ettik. Sonraki yazılarda, çeşitli örnekleri Python üzerinden gelişmiş modüller ile çözümlemeyi deneyeceğiz.

--

--