Algoritma Program Fuzzy Logic (Bagian Defuzzifikasi metode COA)

Diposting pada

Defuzzifikasi adalah proses mendapatkan keluaran fuzy yang berupa himpunan fuzzy menjadi nilai crisp.Pada sistem Inferensi Mamdani terdapat beberapa metode untuk defuzzifikasi, namun disini yang akan dibahas adalah defuzzifikasi menggunakan metode center of area (COA).
Rumusnya sebagai berikut:

Misalkan dari evaluasi aturan didapatkan hasil komposisi aturan ux=1, sehingga didapatkan daerah hasil seperti gambar dibawah:

Maka proses defuzzifikasi menggunakan metode COA adalah sebagai berikut:
untuk memudahkan perhitungan kita bagi menjadi 3 daerah (daerah 1, 2,3 )
selanjutnya kita hitung momen untuk masing-masing daerah sebagai berikut:

 hasil defuzzifikasi dapat dihitung sebagai jumlah momen dibagi jumlah luasan:

Pada kenyataanya nilai dari komposisi aturan tidak selalu 1, dan daerah output memiliki titik-titik perpotongan. sehingga untuk membuat program defuzifikasi kita harus memeperhitungkan juga titik-titik perpotongan tersebut. Ilustrasinya sebagai berikut:

Misalkan kita akan mencari momen dan luas pada daerah MF2.
Terlebih dahulu kita hitung selisih daerah-daerahnya agar memudahkan program selanjutnya.
Contohnya sebagai berikut:
d1=b-a;
d2=c-b;
d3=d-c;
Kemudian kita cari titik perpotongan antara daerah yang dicari (MF2) dengan daerah sebelumnya (MF1) dan sesudahnya (MF3).
Untuk memudahkan perhitungan kita bagi kedalam 5 daerah sesuai bentuknya (daerah 1,2,3,4,5).
Dalam hal ini kita kasih nama perpotongan antara MF1 dan MF2 sebagai n1, sedangkan perpotongan antara MF2 dan MF3 kita sebut saja n2.
Titik x1 adalah perpotongan antara daerah 2 dan 3, sedangkan x2 adalah perpotongan antara daerah 3 dan 4.
Singkatnya cara mencari titik-titik x1, n1, x2 dan n2 adalah kebalikan dari mencari derajat keanggotaan.
Untuk menghitung nya secara program algoritma nyasebagai berikut:
x1=(ux1*b)-(ux2*a)+a;
x2=d-((ux1*d)-(ux1*c));
if(ux2>=ux1){
n1=(ux1*(b-a))+a;
}else{n1=d_1-(ux2*(d_1-c_1));}
if(ux2>=ux3){
n2=d-(ux2*(d-c));
}else{n2=(ux1*(b_2-a_2)+a_2);}

Nilai n1, dan n2 adalah titik perpotongan dengan fungsi keanggotaan sebelum dan sesudahnya. sehingga momen area yang dihitung adalah diantara n1 n2. karena momen sebelum n1 dan setelah n2 bukan merupakan daerah yang dihitung saat ini. Begitupun untuk perhitungan luasnya. Formula nya sama seperti yang telah dijelaskan sebelumnya. misal untuk momen daerah ke 1:
karena daerah ke 1 berentuk trapesium maka:


Jika diterjemahkan ke dalam program maka kurang lebih seperti ini:
if(d1==0){M1=0;L1=0;}else{
if(x1>=n1){
A1=(x1-n1)*(mx+mx_1)*0.5;
M1=((((1/d1)/3)*pow(x1,3))-((a/d1)/2)*pow(x1,2))-((((1/d1)/3)*pow(n1,3))-((a/d1)/2)*pow(n1,2));
}else{M1=0; L1=0;}
}

keterangan:
bagian if(d1==0){M1=0;L1=0;}…. digunakan untuk menghindari pembagian dengan 0
bagian if(x1>=n1)…. digunakan agar nilai yang kurang dari n1 tidak dihitung momennya
Untuk M2, M3,….. dan A2, A3 ….. dan seterusnya prosesnya hampir sama.
Kurang lebih code nya akan seperti berikut:
if(x1>=n1){
A2=ux2*(b-x1);
M2=(ux2*0.5)*pow(b,2);
M2=M2-(ux2*0.5)*pow(x1,2);
}else{M2=(ux2*0.5)*pow(b,2);
M2=M2-(ux2*0.5)*pow(n1,2);
A2=mx*(b-n1);}
M3=(ux2*0.5)*pow(c,2);
M3=M3-(ux2*0.5)*pow(b,2);
A3=(c-b)*ux2;
if(n2>=x2){
M4=(ux2*0.5)*pow(x2,2);
M4=M4-(ux2*0.5)*pow(c,2);
A4=(x2-c)*ux2;
}else{
M4=(ux2*0.5)*pow(n2,2);
M4=M4-(ux2*0.5)*pow(c,2);
A4=(n2-c)*ux2;
}
if(d3==0){M5=0; A5=0;}else{
if(n2>=x2){
M5=(((d/d3)*0.5)*pow(n2,2))-(((1/d3)/3)*pow(n2,3));
M5=M5-(((d/d3)*0.5)*pow(x2,2)-(((1/d3)/3)*pow(x2,3)));
A5=(mx2+mx3)*(n2-x2)*0.5;}else{M5=0;
A5=0;}
}

kemudian kita jumlahkan semua momen dan luasanya:
luas=A1+A2+A3+A4+A5;
moment=M1+M2+M3+M4+M5;
lakuakan perhitungan untuk setiap fungsi keanggotaan output.

hasil defuzzifikasi dapat dihitung sebagai :
defuzzifikasi=jumlah momen / jumlah luas.

Sekian tulisan kali ini, selanjutnya kita akan menguji programnya dan membandingkannya dengan hasil pada fuzzy toolbox matlab.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *