Python ile Bulanık Kontrol Örneği

görsel: kaynak

Problem

Açısal ivme — yer değiştirme ilişkisi.
  • Öncelikle giriş ve çıkışları belirleyelim. Kontrol sistemimizi belirli bir adım sayısı boyunca, sürekli çevrim halinde çalıştıracağız ve her çevrimde oluşan hatayı gözlemleyeceğiz. Bunun için bir hata girişi oluşturacağız. Hatanın önceki hataya göre negatif veya pozitif değişimi, bize hatanın yönünü — bir başka deyişle, helikopter istediğimiz irtifaya yakınsıyor mu ıraksıyor mu bilgisini —vereceğinden bu bilgiye de ihtiyacımız var. Dolayısıyla hata değişimini de giriş olarak alacağız. Çıkış ise helikopteri yükseltecek ivme olacak.
  • Scikit-Fuzzy modülü ile Hata (err), Hata değişimi (derr) ve açısal ivme (acc) giriş-çıkışlarını şekildeki oluşturduk. Scikit-Fuzzy’nin control sınıfı ile girişler Antecedent, çıkış ise Consequent komutuyla oluşturulabilmektedir. İlk parametre tanım aralığı, ikinci parametre ise giriş veya çıkışın ismidir. Bu uygulamada tanım aralıkları farazi olarak belirlenmiştir. Dolayısıyla sisteme uygun, daha iyi bir tanımlama ile kontrol sisteminin göstereceği başarı arttırılabilir.
  • Giriş-çıkışlara ait bulanık kümeleri ve üyelik fonksiyonlarını şekildeki gibi oluşturduk. Çıkış kümeleri için yamuk üyelik fonksiyonunu, diğer kümeler içinse üçgen üyelik fonksiyonu kullandık. Hata ve hata değişimi kümelerine ait dilsel değerler: Neg (negatif), Zer (sıfır) ve Pos (pozitif) şeklindedir. Çıkış içinse: Low (düşük) ve Hig (yüksek) şeklindedir. Kümelerin grafiği şu şekildedir:
Hata’ya ait bulanık kümeler.
Hatanın Değişimi’ne ait bulanık kümeler.
İvme’ye ait bulanık küme.
  • Son olarak bulanık kontrol sisteminin kurallarını oluşturalım:
  • Scikit-Fuzzy’nin Rule sınıfıyla kurallar kolaylıkla oluşturulabilmektedir. İlk parametre giriş kümelerinden oluşan önermeyi, ikinci parametre ise çıkış kümesini almaktadır. Şekildeki gibi birden fazla giriş kümesini aynı önermede kullanmak için, mantıksal operatörler kullanılabilir. Kuralları oluşturduktan sonra, ControlSystem sınıfına oluşturduğumuz kuralları şekildeki gibi veriyoruz.
  • Bu aşamayla bulanık kontrol tasarımımızı sonlandırdık. Artık sistemi simüle etmeye geçebiliriz. Simülasyon için gerekli nesneyi üretelim ve parametrelerimizi oluşturalım:
  • altitude_sim, oluşturduğumuz bulanık kontrol sistemini tutmaktadır. Ulaşmak istediğimiz irtifayı (ref) 50 m olarak belirledik. Helikopterin ilk yüksekliği (h0) 0 m, çevrim sayısı (step) 30, önceki hata (last_error) 0 ve sistem modelini (sys_model) de şekildeki gibi tanımladık. Çevrim sayısı kadar dönecek bir döngü oluşturalım ve simülasyonu başlatalım:
  • output listesi, helikopterin yeni irtifasını her adımda eklediğimiz listedir. Her çevrimde hatayı ve hata değişimi hesaplıyor, ardından bulanık kontrole giriş değerleri olarak veriyoruz. compute fonksiyonu ile bulanık sistemi çalıştırıp, çıkışı hesaplattıktan sonra x değişkenine şekildeki gibi çıkış değerini atıyoruz. Kontrol sisteminin hesapladığı ivmeyi sistem modeline verip, helikopterin yer değiştirmesini hesaplıyoruz. Ve bu hesapladığımız değere de helikopterin son irtifasını ekleyerek output listesine ekliyoruz.
  • Elde edilen sonuç şu şekildedir:

Son olarak

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Ahmet Ataşoğlu

Ahmet Ataşoğlu

More from Medium

Ruining Animals

THE POWER OF WORDS

Hussain Manawer: Sad and Beautiful story — Bangladesh Weekly

Hussain Manawer: Sad and Beautiful story — Bangladesh Weekly