انجمن سایت کلیدستان


رتبه موضوع:
  • 1 رای - 1 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نوشتن سینتکس قانون فازی در این حالت خاص با کدنویسی، چه طور???

نوشتن سینتکس قانون فازی در این حالت خاص با کدنویسی، چه طور???

#6
یکی از مثالای خود نرم افزار متلب رو براتون اینجا می نویسم و توضیح میدم (البته چند خط کد بهش اضافه کردم) :

کد:
clear all
close all
clc

a=newfis('tipper');

a=addvar(a,'input','service',[0 10]);
a=addmf(a,'input',1,'poor','gaussmf',[1.5 0]);
a=addmf(a,'input',1,'good','gaussmf',[1.5 5]);
a=addmf(a,'input',1,'excellent','gaussmf',[1.5 10]);
plotmf(a,'input',1)

a=addvar(a,'input','food',[0 10]);
a=addmf(a,'input',2,'rancid','trapmf',[-2 0 1 3]);
a=addmf(a,'input',2,'delicious','trapmf',[7 9 10 12]);
figure
plotmf(a,'input',2)

a=addvar(a,'output','tip',[0 30]);
a=addmf(a,'output',1,'cheap','trimf',[0 5 10]);
a=addmf(a,'output',1,'average','trimf',[10 15 20]);
a=addmf(a,'output',1,'generous','trimf',[20 25 30]);
figure
plotmf(a,'output',1)

ruleList=[ ...
1 1 1 1 2
2 0 2 1 1
3 2 3 1 2 ];
a=addrule(a,ruleList);

out=evalfis([1 1],a)

ابتدا با دستور newfis ، یک fis با نام tipper ساخته ایم . سپس با دستور addvar ، اولین ورودی را با نام service و با محدوده 0 تا 10 تعریف کرده ایم . در سه خط بعد ، با دستور addmf ، سه تابع عضویت برای ورودی شماره اول تعریف کرده ایم . با دستور plotmf می توانیم توابع عضویت را مشاهده کنیم که برای ورودی اول به صورت عکس زیر می باشد (روی عکس کلیک کنید تا آن را در اندازه اصلی ببینید) :

   

این بار با دستور addvar ، ورودی دوم را با نام food و با محدوده 0 تا 10 تعریف کرده ایم . سپس دو بار از دستور addmf استفاده کرده ایم تا دو تابع عضویت برای ورودی دوم تعریف کنیم . سپس با دستور plotmf ، توابع عضویت را برای ورودی دوم رسم کرده ایم که نتیجه به صورت عکس زیر می باشد :

   

در مرحله بعد ، با دستور addvar ، خروجی (تنها یک خروجی) را تعریف کرده ایم . این خروجی با نام tip و دارای محدوده 0 تا 30 می باشد . با دستور addmf ، سه تابع عضویت برای خروجی تعریف کرده ایم . این بار از دستور plotmf برای رسم توابع عضویت خروجی استفاده کرده ایم که نتیجه به صورت زیر می باشد :

   

ruleList شامل قوانینی است که تعریف می کنیم . با دستور addrule ، این قوانین را به قوانین fis اضافه می کنیم . قوانین هم به صورت اعداد 5 تایی هست که 2 عدد اول مربوط به مقدار 2 ورودی ، عدد سوم مربوط به مقدار خروجی ، عدد چهارم مربوط به وزن (weight) در نظر گرفته شده برای قانون و عدد چهارم هم مشخص می کند که قانون به صورت AND می باشد یا OR (عدد 1 برای AND و عدد 2 برای OR) .
در انتها نیز با دستور evalfis ، مقدار دو ورودی را تعیین می کنیم تا ببینیم خروجی دارای چه مقداری می باشد . نتیجه خروجی به صورت زیر است :

کد:
out =

    5.5375

امیدوارم این مطالب مفید بوده باشه . coffee
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ


پیام‌های این موضوع
RE: نوشتن سینتکس قانون فازی در این حالت خاص با کدنویسی، چه طور??? - توسط admin - ۱۳۹۲/۰۱/۲۰, ۱۰:۳۱ ب.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان