PDA

View Full Version : متلب-FIS



el_abdollahi
سه شنبه 10 آذر 1388, 10:17 صبح
با سلام

من میخوام توی متلب از fis برای استنتاج فازی استفاده کنم. بدین صورت که اول محدوده طبقات رو بهش بدم و بعد هم یک عدد بهش بدم و اون بگه که توی کدوم طبقه قرار داره؟

میشه من رو راهنمایی کنید.
مچکرم

rivaaaldo
چهارشنبه 11 آذر 1388, 23:12 عصر
سلام

اول تو خط فرمان بنویسید Fuzzy

بعد با توجه به تعداد ورودی سیستمتون از edit>add input اضافه کنید
بعد هر کدوم را انتخاب کنین و از view>edit membership رو بزنین و تابع عضویت و بازه رو انتخاب کنین.
بعد برای وارد کردن قوانین view>edit rule را انتخاب و قوانبن را وارد کنین.
و در اخر برای دیدن نتیجه view>view rule ویا view>surface رو انتخاب کنین.

el_abdollahi
پنج شنبه 12 آذر 1388, 17:06 عصر
با سلام
با تشکر فراوان به خاطر راهنماییتون

من میخوام میزان شباهت دو کلمه رو به وسیله این تابع به دست بیارم.
دو معیار واسه شباهت کلمات دارم.
یکی شباهت از نظر املایی
و یکی از نظر آوایی

پس من دو ورودی دارم، هر کدوم در بازه 0 تا یک

خوب، بعد از تعیین ورودی ها باید بازه طبقات هر کدوم رو تعیین کنم. که این کار رو به وسیله تابع عضویت باید بکنم؟
مثلا
mf1 در بازه 0 تا 0.3
mf2 در بازه 0.2 تا 0.5
؟
میشه درباره ویژگی های Type و Params برام توضیح بدین که چه کاری انجام میدن؟

بعد از اینکه محدوده طبقات هر دو ورودی رو مشخص کردم، نوبت به تعیین قوانین میرسه؟

If (levDis is mf1) and (Soundex is mf1) then (output1 is mf1) (1)
این یکی میگه اگه هر دو ورودی توی بازه mf1 بود پس خروجی هم بازه mf1 میشه.
با این یکی مشکلی ندارم ولی این قانون رو چه کار کنم؟
If (levDis is mf1) and (Soundex is mf2) then

خروجی این قانون باید کدوم طبقه باشه؟
میشه به من در این مورد کمک کنید؟

در ضمن من از اصلا از صحت مطالبی که بالا نوشتم مطمئن نیستم. میشه اشتباهاتم رو بهم بگین؟

و یه سوال مهم دیگه
چه طوری از این فایل استفاده کنم؟
با تشکر

el_abdollahi

rivaaaldo
شنبه 14 آذر 1388, 12:33 عصر
سلام
خواهش میکنم

ببینید شما الان 2 ورودی دارین

یکی شباهت از نظر املایی
و یکی از نظر آوایی


قدم بعدی شما پیدا کردن مجموعه های فازی برای ورودی ها هست(مقادیر)
باید مشخص کنید که فرضا اگر میزان شباهت دو کلمه خوب یا کم یا زیاد یا ...بود مقدار عضویتش چند باشه
در حقیقت باید برای هر کدام از ورودی ها تون توابع عضویت رو تعریف کنین که این توابع عضویت میتونن ذوزنقه ای یا گوسی یا.... باشن

بعد خروجی رو مشخص کنین که در نهایت وضعیت 2 کلمه چط.ر هست(مثل بالا)

بعد قوانین که قوانین تشکیل شده از ترکیبی از مقادیری که به عنوان مجموعه فازی برای 2 ورودی تعریف کردین و خروجی...
مشخص کردن طبقات کاملا تجربی هست و باید توسط فرد خبره صورت بگیره..

تا همبجا رو داشته باشید فعلا..

el_abdollahi
شنبه 14 آذر 1388, 12:57 عصر
سلام
منظور از تابع عضویت یعنی اینکه
یه mf تعریف کنم واسه خیلی کم از 0 تا 0.3
یه mf دیگه واسه کم از 0.2 تا 0.5؟
یعنی این؟

مثل اینکه واسه قوانین خودم باید تصمیم بگیرم. نه؟ چون این پروژه من هست. و من باید نقش خبره رو هم بازی کنم.:لبخند:
میشه بگین واسه خبره بودن باید چه نکاتی رو مد نظر داشت؟

با تشکر

rivaaaldo
دوشنبه 16 آذر 1388, 00:07 صبح
بله یعنی همین..

باید میزان مهمی هر فاکتور رو درنظر بگیرید و کاری کنید تاثیرش بیشتر بشه..

el_abdollahi
دوشنبه 16 آذر 1388, 16:22 عصر
با سلام

من فایل FISام رو ساختم. و مثل اینکه تازه مشکل اصلی من داره خودش رو نشون میده.
چه جوری میتونم به این فایل ورودی بدم و خروجی بگیرم؟

تازه من میخوام این کار رو با C# انجام بدم.
اصلا میشه؟
مثل اینکه میشه با برنامه هایی که m فایل هستند توی دات نت کار کرد و یا اگه بشه فایل رو تبدیل به exe یا dll کرد هم خوبه. ولی چه جوری؟
من با فایل FIS چه کاری میتونم بکنم؟

با تشکر

rivaaaldo
پنج شنبه 26 آذر 1388, 19:38 عصر
بله میشه از تو C# مطلب رو فراخوانی کرد و خروجی گرفت.

باید یک

Type objFactoryType;
تعریف کرد و از اون استفاده کرد.

m_sana
دوشنبه 16 آبان 1390, 17:57 عصر
سلام یک سوال در مورد FIS در متلب دارم.من 4 تا SUb-fis و یک FIS اصلی به همراه rule های آنها در متلب تعریف کردم و الان میخواهم کدی را در متلب بنویسم که بر اساس این کد خروجی های این 4 تا sub-fis که دارم ورودی fis اصلی من باشه. ممنون میشم اگر کمکم کنید که این کد را چگونه بنویسم ؟

torisoft
چهارشنبه 18 آبان 1390, 17:30 عصر
سلام یک سوال در مورد FIS در متلب دارم.من 4 تا SUb-fis و یک FIS اصلی به همراه rule های آنها در متلب تعریف کردم و الان میخواهم کدی را در متلب بنویسم که بر اساس این کد خروجی های این 4 تا sub-fis که دارم ورودی fis اصلی من باشه. ممنون میشم اگر کمکم کنید که این کد را چگونه بنویسم ؟

دوست عزیز مسئله رو خیلی پیچ نده برا خودت. همونطور که ورودی برای SUB-FIS ها در نظر میگیری خروجی اینها رو به همون صورت بده به FIS اصلیت.

موفق باشید

m_sana
پنج شنبه 19 آبان 1390, 10:00 صبح
سلام ممنون از توجهتون من همین کاری که گفتید انجام دادم ولی استادم آن رو قبول نکرده.من میخواهم یک ارتباطی بین FIS ها وجود داشته باشد.
در واقع من یک کد می خوام به متلب بدم و بگم خروجی sub-fis ها ورودی fis اصلی باشه. تا وقتی عددی را در یک sub-fis تغییر میدم که موجب تغییر در عدد خروجی آن میشه این تغییر روی FIS اصلیم هم خودشو نشون بده یعنی من به خودم عددهایFIS اصلیم رو تغییر ندم و اعداد آن بر اساس آنچه در خروجی sub fis هام هست تغییر کنه.
باز هم ممنون

torisoft
شنبه 21 آبان 1390, 17:08 عصر
سلام ممنون از توجهتون من همین کاری که گفتید انجام دادم ولی استادم آن رو قبول نکرده.من میخواهم یک ارتباطی بین FIS ها وجود داشته باشد.
در واقع من یک کد می خوام به متلب بدم و بگم خروجی sub-fis ها ورودی fis اصلی باشه. تا وقتی عددی را در یک sub-fis تغییر میدم که موجب تغییر در عدد خروجی آن میشه این تغییر روی FIS اصلیم هم خودشو نشون بده یعنی من به خودم عددهایFIS اصلیم رو تغییر ندم و اعداد آن بر اساس آنچه در خروجی sub fis هام هست تغییر کنه.
باز هم ممنون

خوب ببین شما کاری که در پست قبلی گفتم رو انجام بده با این تفاوت که شما فازی رو بصورت کد ( یا اصطلاحا Command) بنویس نه در محیط FIS اینجوری شما هر و قت دادهات تغییر کنن خروجی اصلیت هم تغییر میکنن.

موفق باشید

m_sana
شنبه 28 آبان 1390, 19:26 عصر
خیلی ممنونم دوست عزیز از این همه توجه و کمکتون

من زیاد با نرم افزار متلب آشنایی ندارم و فقط به دلیل پایان نامم مجبور شدم که از این نرم افزار استفاده کنم. اینکه به صورت command بنویسم یعنی در محیط m-file یک Fis جدید ایجاد کنم و برای آن newfis,addvar,addmf,addrule تعریف کنم؟ من از تو اینترنت یک فایلی را پیدا کردم که نوشته چطوری یک FIsجدید ایجاد کنیم ولی وقتی همین کد ها را در متلب می گذارم Error میده آیا من هم باید همین شکل بنویسم؟
اگر بیشتر کمکم کنید خیلی ممنون میشم چون من این کد ها رو با توجه به داده هایی که دارم تغییر دادم ولی به من جوابی نمیده و error های مختلف میده.
a = newfis('fis1.fis'); %create a new FIS file in "work" folder

%add and input variable 'x' into the FIS
a = addvar(a, 'input', 'x', [2 9]);

%remove the 3 MFs created by default when we add an input variable
a = rmmf(a, 'input', 1, 'mf1', 1);
a = rmmf(a, 'input', 1, 'mf2', 1);
a = rmmf(a, 'input', 1, 'mf3', 1);

%add 2 MFs into the variable x
a = addmf(a, 'input', 1, 'A1', 'trimf', [2 5 8]);
a = addmf(a, 'input', 1, 'A2', 'trimf', [3 6 9]);

%add and input variable 'x' into the FIS
a = addvar(a, 'input', 'y', [4 11]);

%remove the 3 MFs created by default when we add an input variable
a = rmmf(a, 'input', 2, 'mf1', 1);
a = rmmf(a, 'input', 2, 'mf2', 1);
a = rmmf(a, 'input', 2, 'mf3', 1);

%add 2 MFs into the variable y
a = addmf(a, 'input', 2, 'B1', 'trimf', [5 8 11]);
a = addmf(a, 'input', 2, 'B2', 'trimf', [4 7 10]);

%add and output variable 'y' into the FIS
a = addvar(a, 'output', 'z', [1 9]);

%remove the 3 MFs created by default when we add an output variable
a = rmmf(a, 'output', 1, 'mf1', 1);
a = rmmf(a, 'output', 1, 'mf2', 1);
a = rmmf(a, 'output', 1, 'mf3', 1);

%add 2 MFs into the variable x
a = addmf(a, 'output', 1, 'C1', 'trimf', [1 4 7]);
a = addmf(a, 'output', 1, 'C2', 'trimf', [3 6 9]);

%1 rule is defined and added into FIS
rule = [1 1 1 1 1];
a = addrule(a, rule);

%The 1st '1' is mean that the 1st MF of 1st input variable will be use in this rule, in this case, A1 will be use
%You can put '2' if you want to use 2nd MF of 1st input variable, use '0' if you do not wise the rule involve with 1st input variable

%The 2nd '1' is mean that the 1st MF of 2nd input variable will be use in this rule, in this case, B1 will be use
%You can put '2' if you want to use 2nd MF of 1st input variable, use '0' if you do not wise the rule involve with 2nd input variable

%The 3rd '1' is mean that the 1st MF of output variable will be use in this rule, in this case, C1 will be use
%You can put '2' if you want to use 2nd MF of output variable

%The 4th '1' is mean that this rule is create and Enable, use '0' to to create the rule but Disable it.

%The 5th '1' is mean that the relationship between MF of 1st input variable and MF 2nd input variable is "AND"
%Use '2' is you want it to be "OR"

%Conclusion, this will add a fule, if x is A1 and y is B1 Then z is C1

writefis(a, 'fis1.fis');

disp('A new FIS is created and save as \work\fis1.fis');
disp('Type "Fuzzy fis1.fis" in console window to see the new FIS created');
disp('End of the program mfile1.m');

torisoft
سه شنبه 01 آذر 1390, 08:29 صبح
خیلی ممنونم دوست عزیز از این همه توجه و کمکتون

من زیاد با نرم افزار متلب آشنایی ندارم و فقط به دلیل پایان نامم مجبور شدم که از این نرم افزار استفاده کنم. اینکه به صورت command بنویسم یعنی در محیط m-file یک Fis جدید ایجاد کنم و برای آن newfis,addvar,addmf,addrule تعریف کنم؟ من از تو اینترنت یک فایلی را پیدا کردم که نوشته چطوری یک FIsجدید ایجاد کنیم ولی وقتی همین کد ها را در متلب می گذارم Error میده آیا من هم باید همین شکل بنویسم؟
اگر بیشتر کمکم کنید خیلی ممنون میشم چون من این کد ها رو با توجه به داده هایی که دارم تغییر دادم ولی به من جوابی نمیده و error های مختلف میده.


همین طور که نوشتی درسته. اما باید ببینم چه خطائی میده. بعضی اوقات دستورات در ورژن های متفاوت متلب تغییر میکنن.

honey66
یک شنبه 02 اسفند 1394, 12:29 عصر
سلام
.ممنون میشم راهنماییم کنید یا اگه کسی رو می شناسید که وارد هست بهم معرفی کنید؟ من چند تا subfis دارم که خروجی ان ها ورودی fis اصلی هست ولی نمی دونم چه جوری باید از خروجی اونها به عنوان ورودی استفاده کنم؟ یعنی چه جوری فراخوانی کنم و کدش چه جوریه؟ ممنون میشم راهنمایی بفرمایید.