Algoritma Program Fuzzy Logic (Bagian Fuzzifikasi)
Fuzzifikasi adalah proses memetakan nilai crisp ke dalam himpunan fuzzy dan menentukan derajat keanggotaannya dalam himpunan. Untuk mendapatkan derajat keanggotaan dapat dilakukan dengan pendekatan fungsi. Terdapat beberapa bentuk fungsi keanggotaan diantaranya:
1. representasi linier naik
2. representasi linier turun
3. representasi segitiga
4. representasi trapesium
Untuk pemrograman ini diasumsikan bahwa bentuk fungsi keanggotaan nya adalah trapesium. Dengan mengubah nilai-nilainya pada program maka dapat menghasilkan bentuk lainnya. Sehingga program lebih fleksible tanpa harus mendefinisikan untuk masing-masing bentuk fungsi nya. Ilustrasi nya adalah sebagai berikut:
untuk memasukan nilai a, b, c, d seperti pada gambar, maka nilai disimpan pada sebuah array.
formatnya : float nama_fungsi[ ]={a,b,c,d};
dan untuk hasil perhitungan derajat keanggotaannya kita simpan dalam array juga. Misalkan terdapat 3 fungsi keanggotaansuhu: "DINGIN"," HANGAT", "PANAS"
kita simpan kedalam array dengan nama "suhu" dengan tipe data float maka:
float suhu[3]; // suhu[0]=derajat keanggotaan dingin
//suhu[1]= derajat keanggotaan hangat
//suhu[2]=derajat keanggotaan panas
float dingin[ ]={a,b,c,d};
Untuk mengambil nilai a,b,c,d dari fungsi keanggotaan "dingin" adalah sebagai berikut:
dingin[0]; //untuk nilai a
dingin[1]; //untuk nilai b
dingin[2]; //untuk nilai c
dingin[3]; //untuk nilai d
misalkan untuk fungsi keanggotaan "dingin":
float dingin[ ] ={10,15,20,25};
untuk bentuk segitiga hanya akan ada 3 nilai, karena nilai b akan sama dengan nilai c. contohnya:
float dingin[ ]={10,15,15,20}
sedangkan untuk representasi linier turun dan linier naik adalah sebgai berikut:
linier turun: float dingin[ ]={10,10,10,15};
linier naik: float dingin[ ]={15,20,20,20};
setelah memasukan nilainya maka kita dapat menghitung derajat keangottan nya. Rumus untuk mencari derajat keanggotaan dari fungsi keanggotaan trapesium seperti terlihat pada gambar 1 adalah sebagai berikut:
dimana μ[x] adalah derajat keanggotaan dan x adalah nilai yang dicari derajat keanggotaannya.
sehingga jika diterjemahkan kea dalam algoritma program menajadi:
if((a<=x)and(x<=b)){
if(a!=b){ux=(x-a)/(b-a);}
}else if ((b<=x)and(x<=c)){ux=1;}
else if((c<=x)and(x<=d)){
if(c!=d){ux=(d-x)/(d-c);}}
else if((a=b)and(x<=b)){ ux=1;}
else if((c=d)and(x>=c)){ux=1;}
else{ux=0;}
algoritma di atas dapat dibuat sebagai sebuah fungsi program untuk mencari derajat keanggotaan. misal kita kasih nama fungsi tersebut sebagai "derajatkeanggotaan();".
Sehingga kita hanya perlu mengubah parameter x, a, b, c, dand saja kemudian memanggil fungsi nya misalkan:
x=25;
a= dingin[0];
b=dingin[1];
c=dingin[2];
d=dingin[3];
derajatkeanggotaan();
suhu[0]=ux; //memasukan nilai derajat keanggotaan suhu[0] (dingin) dengan derajat keanggotaan hasil perhitungan
Sekian postingan kali ini selanjutnya kita mencoba membuat rule base nya.
1. representasi linier naik
2. representasi linier turun
3. representasi segitiga
4. representasi trapesium
Untuk pemrograman ini diasumsikan bahwa bentuk fungsi keanggotaan nya adalah trapesium. Dengan mengubah nilai-nilainya pada program maka dapat menghasilkan bentuk lainnya. Sehingga program lebih fleksible tanpa harus mendefinisikan untuk masing-masing bentuk fungsi nya. Ilustrasi nya adalah sebagai berikut:
Gambar 1 fungsi keanggotaan Trapesium |
formatnya : float nama_fungsi[ ]={a,b,c,d};
dan untuk hasil perhitungan derajat keanggotaannya kita simpan dalam array juga. Misalkan terdapat 3 fungsi keanggotaansuhu: "DINGIN"," HANGAT", "PANAS"
kita simpan kedalam array dengan nama "suhu" dengan tipe data float maka:
float suhu[3]; // suhu[0]=derajat keanggotaan dingin
//suhu[1]= derajat keanggotaan hangat
//suhu[2]=derajat keanggotaan panas
float dingin[ ]={a,b,c,d};
Untuk mengambil nilai a,b,c,d dari fungsi keanggotaan "dingin" adalah sebagai berikut:
dingin[0]; //untuk nilai a
dingin[1]; //untuk nilai b
dingin[2]; //untuk nilai c
dingin[3]; //untuk nilai d
misalkan untuk fungsi keanggotaan "dingin":
float dingin[ ] ={10,15,20,25};
untuk bentuk segitiga hanya akan ada 3 nilai, karena nilai b akan sama dengan nilai c. contohnya:
float dingin[ ]={10,15,15,20}
sedangkan untuk representasi linier turun dan linier naik adalah sebgai berikut:
linier turun: float dingin[ ]={10,10,10,15};
linier naik: float dingin[ ]={15,20,20,20};
setelah memasukan nilainya maka kita dapat menghitung derajat keangottan nya. Rumus untuk mencari derajat keanggotaan dari fungsi keanggotaan trapesium seperti terlihat pada gambar 1 adalah sebagai berikut:
dimana μ[x] adalah derajat keanggotaan dan x adalah nilai yang dicari derajat keanggotaannya.
sehingga jika diterjemahkan kea dalam algoritma program menajadi:
if((a<=x)and(x<=b)){
if(a!=b){ux=(x-a)/(b-a);}
}else if ((b<=x)and(x<=c)){ux=1;}
else if((c<=x)and(x<=d)){
if(c!=d){ux=(d-x)/(d-c);}}
else if((a=b)and(x<=b)){ ux=1;}
else if((c=d)and(x>=c)){ux=1;}
else{ux=0;}
algoritma di atas dapat dibuat sebagai sebuah fungsi program untuk mencari derajat keanggotaan. misal kita kasih nama fungsi tersebut sebagai "derajatkeanggotaan();".
Sehingga kita hanya perlu mengubah parameter x, a, b, c, dand saja kemudian memanggil fungsi nya misalkan:
x=25;
a= dingin[0];
b=dingin[1];
c=dingin[2];
d=dingin[3];
derajatkeanggotaan();
suhu[0]=ux; //memasukan nilai derajat keanggotaan suhu[0] (dingin) dengan derajat keanggotaan hasil perhitungan
Sekian postingan kali ini selanjutnya kita mencoba membuat rule base nya.
Bagikan Ke:
Komentar
Posting Komentar
berkomentarlah dengan bijak