Arkadaşlar ben bulanık mantığın ne olduğunu biliyorum.
Ama arkadaşın soru soruş tarzından ben herhalde PIC programlamayı öğrenmek istiyor ama yanlış bir konu başlığı altına yazdı diye düşünmüştüm.
Bulanık mantık uygulamaları tüm programlama dilleri ile yazılabilir.
Bulanık mantık uygulamaları geliştirmek için hangi kütüphaneler kullanılabilir diye sorulursa Python'un Skfuzzy kütüphanesine bakabilirler.
Örneğin bir yerlere yemek yemeğe gittiniz. Bahşiş vereceksiniz. Vereceğiniz bahşiş miktarının bulanık mantıkla nasıl tasarlanacağı burada basit bir uygulamayla anlatılıyor.
https://bit.ly/3jL0QOV
Bulanık mantık ilk kez sanırım bu kitabı okurken karşıma çıkmıştı.
http://www.ai-junkie.com/books/toc_pgaibe.html
Bu kitapta Madenci Bob ve karısı Elisa'nın maceraları anlatılıyor. Madenci Bob madenden altın topluyor, yemek yiyor, odun kesiyor. Karısı da bir şeyler yapıyor. Tüm bunlar ilk başta konsolda yapay zekayla tasarlanıyor.
Sonra kitabın ileriki aşamalarında A* vs gibi arama algoritmaları anlatılıyor. Hatta adamlar bu kitabı çalışırken örneğin yol üzerinde trafik levhalarına vs. toslamayın gibisinden bir uyarı yazmışlardı. Çok ilginç geldi.
Daha da ileriki aşamalarda kuşların hareketlerinin modellenmesi ("steering behaviours for autonomous characters") ve FIFA benzeri 2D bir oyunun nasıl yapılacağı anlatılıyor.
Güzel kitap ama ortanın üzeri bir C++ bilgisi gerektiriyor. Görsel uygulamaların geliştirilmesi için win32api kullanmış.
Örneğin kitabın kaynak kodundan sadeleştirilmiş bir örnek. C++'nin şablon olanaklarını kullanan bu kodu okuyabiliyorsanız sıkıntı yok.
C++:
#include <vector>
#include <list>
#include <cassert>
#include "Vector2D.h"
#include "DugumTurKisaltmalari.h"
template <class dugum_turu, class kenar_turu>
class SeyrekGrafik
{
public:
typedef kenar_turu KenarTuru;
typedef dugum_turu DugumTuru;
typedef std::vector <dugum_turu> Dugumler;
typedef std::list <kenar_turu> KenarListe;
typedef std::vector <KenarListe> Kenarlar;
typedef typename KenarListe::const_iterator GecerliKenar;
typedef typename KenarListe::iterator Gecerlikenar;
private:
// bu grafiği oluşturan düğümler
Dugumler dugumler_;
// bitişik kenar listesinden oluşan bir vektör topluluğu
// ( her düğümün sıra numarası bu düğümle bağlantılı bir
// kenar listesi ile ilişkili)
Kenarlar kenarlar_;
// grafiğimiz yönlü mu?
bool yonluGrafikMi_;
int sonrakiDugumNo_;
// Eğer grafikte bir kenar yoksa true döndürür. Kenar
// eklerden bir kenarın birden fazla oluşturulmasını
// engellemek için kullanılır
bool kenarTekMi (int nerden, int nereye) const;
// Grafikteki tüm kenarları gezer ve geçersiz olan
// kenarları kaldirir
void gecersizKenarlariYokEt ();
public:
SeyrekGrafik (bool yonluGrafikMi)
: sonrakiDugumNo_ (0),
yonluGrafikMi_ (yonluGrafikMi)
{}
// Belirtilen sıradaki düğümü öğrenir
const DugumTuru & dugumOgren (int no) const;
// const olmayan versiyonu
DugumTuru & dugumOgren (int no);
const KenarTuru & kenarOgren (int nerden, int nereye) const;
/*
[...]
*/
};