Anda di halaman 1dari 4

Contoh Penerapan Fuzzy Logic - Metode Tsukamoto menggunakan Matlab

Bagi anda yang mempelajari tentang Artificial Intelligence pada pokok bahasan Fuzzy Logic, ada tiga metode yang sering digunakan dalam menyelesaikan masalah dengan menggunakan konsep fuzzy logic, yaitu: (1) Metode Tsukamoto; (2) Metode Mamdani; (3) Metode Sugeno. Pada kesempatan ini, saya akan menerapkan metode Tsukamoto untuk menyelesaikan sebuah contoh masalah sederhana menggunakan aplikasi Matlab. Sebagaimana kita ketahui bahwa Matlab tidak menyediakan metode ini (Tsukamoto) pada toolbox fuzzy, maka kita akan mencobanya dengan koding. Prosedur Fuzzy Logic: 1. 2. 3. 4. Fuzzifikasi; Pembentukan Rule Mesin Inferensi Defuzzifikasi

Membuat fungsi untuk fuzzifikasi Buatlah sebuah fungsi di Matlab, misalnya diberi nama "Fuzzifikasi.m". Fungsi ini saya buat karena metode Tsukamoto tidak didukung oleh Matlab dan untuk digunakan dalam menyelesaikan prosedur fuzzifikasi. Berikut ini adalah kodingnya.
function [fuzzy] = Fuzzifikasi(crispX, maxX, minX, apa) switch apa case 'turun' fuzzy = (maxX-crispX)/(maxX-minX); case 'naik' fuzzy = (crispX-minX)/(maxX-minX); case 'turunS' fuzzy = 2*((maxX-crispX)/(maxX-minX))^2; case 'naikS' fuzzy = 1-2*((maxX-crispX)/(maxX-minX))^2; otherwise fuzzy = 0.0; end end

Membuat Fungsi untuk Pembentukan Rule dan Mesin Inferensi Buatlah lagi sebuah fungsi di Matlab, misalnya diberi nama "RuleDanMesinInferensi.m". Fungsi ini saya buat karena metode Tsukamoto tidak didukung oleh Matlab dan untuk digunakan dalam menyelesaikan prosedur pembentukan rule dan mesin inferensi. Berikut ini adalah kodingnya.
function [crispX, fuzzyX] = RuleDanMesinInferensi(fuzzyTemp1, fuzzyTemp2, minX, maxX, apa, operatorX) if (fuzzyTemp1 > 0) && (fuzzyTemp2 > 0) switch operatorX case 'AND' if fuzzyTemp1 < fuzzyTemp2 fuzzyX = fuzzyTemp1;

else fuzzyX = fuzzyTemp2; end case 'OR' if fuzzyTemp1 > fuzzyTemp2 fuzzyX = fuzzyTemp1; else fuzzyX = fuzzyTemp2; end end switch apa case 'turun' crispX = maxX-((maxX-minX)*fuzzyX); % fuzzyX=(Max-crispX)/(Max-Min) case 'naik' crispX = minX+((maxX-minX)*fuzzyX); % fuzzyX=(crispX-Min)/(Max-Min) end else fuzzyX = 0.0; crispX = 0; end end

Contoh Kasus Buatlah sebuah script di Matlab, misalnya diberi nama "TsukamotoFuzzyLogic.m" kemudian silahkan simak keterangan-keterangan pada koding berikut ini.
%TINGGI BADAN --> Pendek - Sedang - Tinggi x=0:0.1:200; y1=trapmf(x,[0 0 100 140]); y2=trimf(x,[125 150 175]); y3=trimf(x,[160 200 200]); figure(1); plot(x,y1,x,y2,x,y3); %Fuzzifikasi: crisp=165; [fuzzyPendek] = Fuzzifikasi(0,0,0,'-'); %karena 165 gak menyentuh golongan pendek max=175; min=150; [fuzzySedang] = Fuzzifikasi(crisp,max,min,'turun'); %panggil function Fuzzifikasi max=200; min=160; [fuzzyTinggi] = Fuzzifikasi(crisp,max,min,'naik'); %title n label title('TINGGI BADAN'); xlabel('Y1=Pendek(100-140); Y2=Sedang(125-175); Y3=Tinggi(160-200)'); ylabel('FUZZY'); %teks teksPendek = ['Pendek[165]=',num2str(fuzzyPendek)]; teksSedang = ['Sedang[165]=',num2str(fuzzySedang)]; teksTinggi = ['Tinggi[165]=',num2str(fuzzyTinggi)]; text(110,0.8,teksPendek); text(crisp,fuzzySedang,teksSedang); text(crisp,fuzzyTinggi,teksTinggi); grid; %BERAT BADAN --> Ringan - Normal - Berat x = 0:0.1:100; y1 = trapmf(x,[0 0 10 50]); y2 = trimf(x,[25 50 75]); y3 = trapmf(x,[50 90 100 100]); figure(2); plot(x,y1,x,y2,x,y3); %Fuzzifikasi: crisp=55; [fuzzyRingan] = Fuzzifikasi(0,0,0,'-'); %karena 50 gak menyentuh golongan Ringan max=75; min=50; [fuzzyNormal] = Fuzzifikasi(crisp,max,min,'turun'); max=90; min=50; [fuzzyBerat] = Fuzzifikasi(crisp,max,min,'naik'); %titel n label title('BERAT BADAN'); xlabel('Y1=Ringan(10-50); Y2=Normal(25-75); Y3=Berat(50-90)'); ylabel('FUZZY'); teksRingan = ['Ringan[55]=',num2str(fuzzyRingan)]; teksNormal = ['Normal[55]=',num2str(fuzzyNormal)]; teksBerat = ['Berat[55]=',num2str(fuzzyBerat)]; text(10,0.8,teksRingan); text(crisp,fuzzyNormal,teksNormal); text(crisp,fuzzyBerat,teksBerat); grid; %IDEAL BADAN --> Kurus - Ideal - Gemuk x = 0:0.1:10; y1 = trimf(x,[0 1.5 3]); y2 = trimf(x,[3 5 7]); y3 = trimf(x,[7 8.5 10]); figure(3); plot(x,y1,x,y2,x,y3); %Fuzzifikasi Tinggi Badan: crisp=165; [fuzzyPendek] = Fuzzifikasi(0,0,0,'-'); max=175; min=150; [fuzzySedang] = Fuzzifikasi(crisp,max,min,'turun'); max=200; min=160; [fuzzyTinggi] = Fuzzifikasi(crisp,max,min,'naik'); %Fuzzifikasi Berat Badan: crisp=55; [fuzzyRingan] = Fuzzifikasi(0,0,0,'-'); max=75; min=50; [fuzzyNormal] = Fuzzifikasi(crisp,max,min,'turun'); max=90; min=50; [fuzzyBerat] = Fuzzifikasi(crisp,max,min,'naik'); %Pembentukan Rule dan Mesin Inferensi %Diketahui: minKurusNaik = 0; maxKurusNaik = 1.5; minKurusTurun = 1.5; maxKurusTurun = 3;

minIdealNaik = 3; maxIdealNaik = 5; minIdealTurun = 5; maxIdealTurun = 7; minGemukNaik = 7; maxGemukNaik = 8.5; minGemukTurun = 8.5; maxGemukTurun = 10; %IF TinggiBadan is Tinggi AND BeratBadan is Ringan THEN IdealBadan is Kurus [crispKurus1, fuzzyKurus1] = RuleDanMesinInferensi(fuzzyTinggi, fuzzyRingan, minKurusNaik, maxKurusNaik, 'naik', 'AND'); %Hitung sj dulu yg naik if (crispKurus1 > minKurusTurun) || (crispKurus1 < maxKurusTurun) %Cari antara naik atau turun [crispKurus1, fuzzyKurus1] = RuleDanMesinInferensi(fuzzyTinggi, fuzzyRingan, minKurusTurun, maxKurusTurun, 'turun', 'AND'); end %IF TinggiBadan is Tinggi AND BeratBadan is Normal THEN IdealBadan is Kurus [crispKurus2, fuzzyKurus2] = RuleDanMesinInferensi(fuzzyTinggi, fuzzyNormal, minKurusNaik, maxKurusNaik, 'naik', 'AND'); if (crispKurus2 > minKurusTurun) || (crispKurus2 < maxKurusTurun) [crispKurus2, fuzzyKurus2] = RuleDanMesinInferensi(fuzzyTinggi, fuzzyNormal, minKurusTurun, maxKurusTurun, 'turun', 'AND'); end %IF TinggiBadan is Sedang AND BeratBadan is Ringan THEN IdealBadan is Kurus [crispKurus3, fuzzyKurus3] = RuleDanMesinInferensi(fuzzySedang, fuzzyRingan, minKurusNaik, maxKurusNaik, 'naik', 'AND'); if (crispKurus3 > minKurusTurun) || (crispKurus3 < maxKurusTurun) [crispKurus3, fuzzyKurus3] = RuleDanMesinInferensi(fuzzySedang, fuzzyRingan, minKurusTurun, maxKurusTurun, 'turun', 'AND'); end %IF TinggiBadan is Pendek AND BeratBadan is Ringan THEN IdealBadan is Ideal [crispIdeal1, fuzzyIdeal1] = RuleDanMesinInferensi(fuzzyPendek, fuzzyRingan, minIdealNaik, maxIdealNaik, 'naik', 'AND'); if (crispIdeal1 > minIdealTurun) || (crispIdeal1 < maxIdealTurun) [crispIdeal1, fuzzyIdeal1] = RuleDanMesinInferensi(fuzzyPendek, fuzzyRingan, minIdealTurun, maxIdealTurun, 'turun', 'AND'); end %IF TinggiBadan is Sedang AND BeratBadan is Normal THEN IdealBadan is Ideal [crispIdeal2, fuzzyIdeal2] = RuleDanMesinInferensi(fuzzySedang, fuzzyNormal, minIdealNaik, maxIdealNaik, 'naik', 'AND'); if (crispIdeal2 > minIdealTurun) || (crispIdeal2 < maxIdealTurun) [crispIdeal2, fuzzyIdeal2] = RuleDanMesinInferensi(fuzzySedang, fuzzyNormal, minIdealTurun, maxIdealTurun, 'turun', 'AND'); end %IF TinggiBadan is Tinggi AND BeratBadan is Berat THEN IdealBadan is Ideal [crispIdeal3, fuzzyIdeal3] = RuleDanMesinInferensi(fuzzyTinggi, fuzzyBerat, minIdealNaik, maxIdealNaik, 'naik', 'AND'); if (crispIdeal3 > minIdealTurun) || (crispIdeal3 < maxIdealTurun) [crispIdeal3, fuzzyIdeal3] = RuleDanMesinInferensi(fuzzyTinggi, fuzzyBerat, minIdealTurun, maxIdealTurun, 'turun', 'AND'); end %IF TinggiBadan is Pendek AND BeratBadan is Berat THEN IdealBadan is Gemuk [crispGemuk1, fuzzyGemuk1] = RuleDanMesinInferensi(fuzzyPendek, fuzzyBerat, minGemukNaik, maxGemukNaik, 'naik', 'AND'); if (crispGemuk1 > minGemukTurun) || (crispGemuk1 < maxGemukTurun) [crispGemuk1, fuzzyGemuk1] = RuleDanMesinInferensi(fuzzyPendek, fuzzyBerat, minGemukTurun, maxGemukTurun, 'turun', 'AND'); end %IF TinggiBadan is Pendek AND BeratBadan is Normal THEN IdealBadan is Gemuk [crispGemuk2, fuzzyGemuk2] = RuleDanMesinInferensi(fuzzyPendek, fuzzyNormal, minGemukNaik, maxGemukNaik, 'naik', 'AND'); if (crispGemuk2 > minGemukTurun) || (crispGemuk2 < maxGemukTurun) [crispGemuk2, fuzzyGemuk2] = RuleDanMesinInferensi(fuzzyPendek, fuzzyNormal, minGemukTurun, maxGemukTurun, 'turun', 'AND'); end %IF TinggiBadan is Sedang AND BeratBadan is Berat THEN IdealBadan is Gemuk [crispGemuk3, fuzzyGemuk3] = RuleDanMesinInferensi(fuzzySedang, fuzzyBerat, minGemukNaik, maxGemukNaik, 'naik', 'AND'); if (crispGemuk3 > minGemukTurun) || (crispGemuk3 < maxGemukTurun) [crispGemuk3, fuzzyGemuk3] = RuleDanMesinInferensi(fuzzySedang, fuzzyBerat, minGemukTurun, maxGemukTurun, 'turun', 'AND'); end %Label xlabel('Y1=Kurus(0-3); Y2=Ideal(3-7); Y3=Gemuk(7-10)'); ylabel('FUZZY'); if (crispKurus1 ~= 0) && (fuzzyKurus1 ~= 0.0) teks1 = ['Kurus[',num2str(crispKurus1),']=',num2str(fuzzyKurus1)]; text(crispKurus1,fuzzyKurus1,teks1); end if (crispKurus2 ~= 0) && (fuzzyKurus2 ~= 0.0) teks2 = ['Kurus[',num2str(crispKurus2),']=',num2str(fuzzyKurus2)]; text(crispKurus2,fuzzyKurus2,teks2);

end if (crispKurus3 ~= 0) && (fuzzyKurus3 ~= 0.0) teks3 = ['Kurus[',num2str(crispKurus3),']=',num2str(fuzzyKurus3)]; text(crispKurus3,fuzzyKurus3,teks3); end if (crispIdeal1 ~= 0) && (fuzzyIdeal1 ~= 0.0) teks4 = ['Ideal[',num2str(crispIdeal1),']=',num2str(fuzzyIdeal1)]; text(crispIdeal1,fuzzyIdeal1,teks4); end if (crispIdeal2 ~= 0) && (fuzzyIdeal2 ~= 0.0) teks5 = ['Ideal[',num2str(crispIdeal2),']=',num2str(fuzzyIdeal2)]; text(crispIdeal2,fuzzyIdeal2,teks5); end if (crispIdeal3 ~= 0) && (fuzzyIdeal3 ~= 0.0) teks6 = ['Ideal[',num2str(crispIdeal3),']=',num2str(fuzzyIdeal3)]; text(crispIdeal3,fuzzyIdeal3,teks6); end if (crispGemuk1 ~= 0) && (fuzzyGemuk1 ~= 0.0) teks7 = ['Gemuk[',num2str(crispGemuk1),']=',num2str(fuzzyGemuk1)]; text(crispGemuk1,fuzzyGemuk1,teks7); end if (crispGemuk2 ~= 0) && (fuzzyGemuk2 ~= 0.0) teks8 = ['Gemuk[',num2str(crispGemuk2),']=',num2str(fuzzyGemuk2)]; text(crispGemuk2,fuzzyGemuk2,teks8); end if (crispGemuk3 ~= 0) && (fuzzyGemuk3 ~= 0.0) teks9 = ['Gemuk[',num2str(crispGemuk3),']=',num2str(fuzzyGemuk3)]; text(crispGemuk3,fuzzyGemuk3,teks9); end %Defuzzifikasi Z = ((fuzzyKurus1*crispKurus1)+(fuzzyKurus2*crispKurus2)+(fuzzyKurus3*crispKurus3)+(fuzzyIdeal1*crispIdeal1 )+(fuzzyIdeal2*crispIdeal2)+(fuzzyIdeal3*crispIdeal3)+(fuzzyGemuk1*crispGemuk1)+(fuzzyGemuk2*crispGemuk 2)+(fuzzyGemuk3*crispGemuk3))/(fuzzyKurus1+fuzzyKurus2+fuzzyKurus3+fuzzyIdeal1+fuzzyIdeal2+fuzzyIdeal3+ fuzzyGemuk1+fuzzyGemuk2+fuzzyGemuk3); teksTSUKAMOTO = ['TSUKAMOTO [Z] = ',num2str(Z)]; title({'IDEAL BADAN',teksTSUKAMOTO}); grid;

Saat script tersebut dijalankan, maka akan tampil hasil seperti pada gambar berikut.

Posted 24th June 2012 by Azminuddin Azis Location: Semarang, Indonesia Labels: Artificial Intelligence

Anda mungkin juga menyukai