آموزش منطق فازی در متلب
منطق فازی در متلب چیست؟ منظور از منطق فازی استدلال علمی مسائل بر اساس ساختار اندیشه واقعی یک انسان است. نام اولیه این شیوه نظریه ابهام بوده که توسط فردی به نام مکس بلکه مطرح شد. عبارت منطق فازی در فرهنگ لغات به شرایط نامعلوم و غیر قطعی اطلاق میشود. این نظریه ادعا دارد ابهام در ماهیت علم است. حال این که منطق فازی در متلب چگونه پیادهسازی میشود را در ادامه مقاله خواهیم آموخت.
ساختار منطق فازی در متلب
ساختار منطق فازی در متلب را میتوانید در تصویر زیر ببینید. در ادامه هرکدام از بخشهایی که در تصویر وجود دارد را توضیح میدهیم.
- قوانین: تمام قواعد و شرایطی که به صورت «اگر… آنگاه» توسط شما تعیین میشوند در این قسمت قرار دارند. کم و زیاد کردن این قوانین امکان پذیر است. البته تجربه نسان میدهد بهترین پاسخ باید با کمترین قوانین ممکن دریافت شود.
- فازی سازی: در این مرحله ورودیها به اطلاعات قابل استفاده در منطق فازی تبدیل میشود. یعنی اعداد قطعی به اعداد فازی تغییر شکل میدهند؛ زیرا منطق فازی با اعداد قطعی کار نمیکند.
- موتور استنتاج: این بخش در تصویر هوش نامیده شده است که ما آن را مغز نیز میخوانیم. در این مرحله میزان انطباق ورودیهای با قوانین سنجیده میشود. درصد این انطباق نزدیکی پاسخ دریافتی به منطق اندیشه انسان را نشان میدهد.
- برگردان از فازی: این قسمت را فازی زدایی نیز مینامیم. در این مرحله اعداد فازی مجدداً به اعداد قطعی تبدیل شده و به عنوان خروجی نمایش داده میشوند. هدف از این تبدیل قابل درک بودن برای انسان است.
در ادامه منطق فازی را با جزئیات بیشتری مورد بررسی قرار خواهیم داد.
ویژگیهای منطق فازی در متلب
از جمله ویژگیهای اساسی منطق فازی در متلب میتوان به موارد زیر اشاره نمود. البته این موارد تنها قابلیتهای اساسی منطق فازی در متلب محسوب میشوند.
- انعطافپذیری بالا در پیادهسازی
- سادگی پیادهسازی الگوریتمهای یادگیری ماشین
- امکان تولید دو پاسخ متفاوت برای یک مسئله
- قابلیت حل مسئله با پاسخ تقریبی یا غیر قطعی
- امکان استفاده از شرطها و قیدهای منعطف
- امکان فرایندی سازی استنتاج
- امکان تولید توابع غیرخطی با پیچیدگیهای دلخواه
- وجود وابستگیهای میان مدلهای ایجاد شده
پیشنهاد مطالعه: بررسی کاربردهای متلب در مهندسی مخابرات
منطق فازی در متلب
متلب یک امکان عالی برای پیاده سازی منطق فازی ارائه میدهد و آن فراهم شدن یک محیط گرافیکی برای این منظور است. برای دسترسی به این محیط گرافیکی میتوانید در خط فرمان این نرمافزار کلمه Fuzzy را تایپ کنید.
با تایپ این کلید واژه و زدن Enter صفحه زیر باز میشود. این پنجره تولباکس فازی در متلب نیز نام دارد. در ادامه این بخش با آموزش تولباکس فازی در متلب همراه شما عزیزان خواهیم بود.
این محیط دارای سه بخش است. بخش اول ورودی یا Input1 نام دارد. دلیل وجود عدد در نام این بخش این است که میتوانیم به روشی که در تصویر بعدی میبینید تعداد ورودیها را افزایش دهیم. هر ورودی جدید یک شماره افزایش پیدا میکند.
بخش دوم نیز مربوط به الگوریتم یا سیستم تصمیم گیری است که قصد داریم استفاده کنیم. یعنی همان قواعد و شرایطی که برای فازی سازی به کار میگیریم. به صورت پیش فرض الگوریتم یا سیستم ممدانی mamdani در این بخش نمایش داده میشود که میتوانید با توجه به نیاز خود آن را تغییر دهید. دستورات فازی اطلاعات خود را از این بخش دریافت میکنند. بخش سوم نیز شامل المان خروجی میشود. یعنی ورودی وارد قسمت میانی که هوش است شده و پس از پردازش به بخش خروجی میرود تا عملیات دفازی روی آن انجام پذیرد.
برای اضافه کردن خروجی یا Output نیز میتوانید طبق تصویر زیر عمل کنید. نام گذاری این بخش نیز از قواعدی که برای ورودی توضیح دادیم تبعیت میکند.
با کلیک روی قسمتهای هرکدام از ورودی و خروجی میتوانیم نام آنها را تغییر دهیم.
برای تعییر نام خروجی هم به همین منوال عمل کنید. یعنی روی خروجی مورد نظر کلیک کرده و در کادر مشخص شده در تصویر نام جدید را برای آن مینویسیم.
جهت تغییر اسم بخش میانی باید پروژه را ذخیره کنیم. برای این کار از منوی فایل گزینه مربوطه را میزنیم.
با کلیک روی این گزینه یک صفحه ذخیره سازی مانند هر برنامه دیگری باز میشود که باید یک نام برای آن تعیین و دکمه OK را بزنیم تا در قالب یک فایک ذخیره شود. در هنگام ذخیره هر نامی برای فایل در نظر بگیریم همان نام در قسمت میانی نمایش داده خواهد شد.
اگر به کادر موجود در سمت چپ پنجره دقت کنید ۵ گزینه خواهید دید. گزینههای اول و دوم از بالا مربوط به ورودیها هستند. با این گزینهها منطقهای AND، OR، و NOT را روی ورودی اعمال میکنند. گزینه سوم که Implication نام دارد مربوط به بخش میانی رابط گرافیکی ما یا همان مغز سیستم است. در این بخش الگوریتم فازی سازی را مشخس میکنیم. دو گزینه آخر نیز متدهای قابل تنظیم برای خروجی را در بر میگیرند. این متدها همان الگورتیمهای دفازی هستند.
این محیط گرافیکی که تولباکس منطق فازی در متلب نام دارد ابزارهای مهمی را در اختیار کاربر قرار میدهد. این ابزارها شامل المانهای گرافیکی، بلوک سیمولینک جهت تحلیل و شبیهساز سیستمها بر پایه منطق فازی میشوند. ویژگیهای کلی این ابزارها به شرح زیر هستند.
- واسطه گرافیکی خاص جهت ایجاد سیستمهای استنتاجی فازی
- قابلیت مشاهده و تحلیل نتایج دریافتی
- قابلیت پشتیبانی از مدارهای منطقی مانند AND، OR و NOT
- پشتیبانی از توابع عضویت سیستمهای استنتاجی فازی
- پشتیبانی پیش فرض از سیستمهای استنتاجی ممدانی و سوگنو
- امکان اعمال الگوریتمهای استنتاجی و غیر استنتاجی به صورت سفارشی
- شکل دهی خودکار به توابع عضویت
- پشتیبانی از تکنیکهای آموزش تطبیقی عصبی و خوشهبندی فازی
- امکان تعبیه سیستم استنتاج در مدل سیمولینک
سیستم استنتاج ممدانی چیست؟
حال که با پیاده سازی منطق فازی در متلب و رابط گرافیکی آن آشنا شدیم، بیایید در مورد مغز سیستم صحبت کنیم. مغز یا هوش سیستم همان الگوریتمی است که منطق فازی طبق آن عمل میکند. چون سیستم ممدانی پیش فرض نرمافزار است، با آن شروع کردیم.
ممدانی و اسیلیان افرادی هستند که این سیستم را در سال ۱۹۷۵ طراحی کردند. این سیستم به طور گستردهای در سیستمهای پشتیبانی تصمیم در هوش مصنوعی و یادگیری ماشین استفاده میشود؛ زیرا طبیعت بصری و تفسیری دارد. دیاگرام کلی سیستم استنتاج فازی ممدانی به شکل زیر است.
سیستم استنتاج تاکاگی سوگنو چیست؟
در سال ۱۹۸۵ سیستم استنتاج دیگری با نام تاکاگی سوگنو طراحی شد که بیشتر به نام سوگنو معروف است. طراحان این الگوریتم، تاکاگی و میشو سوگنو بودند. این تکنیک بیشتر در سیستمهای کنترلی که محاسبات ریاضی پیچیدهتری دارند استفاده میشود. شکل بعدی نشان دهنده دیاگرام سیستم استنتاجی تاکاگی سوگنو در منطق فازی است.
غیر فازیسازی چیست؟
تا اینجا در مورد فازی سازی صحبت کردیم و گفتیم که منظور از این عبارت شرایط نامعلوم است. اما اگر بخواهیم به شرایط معلوم یا قطعی برسیم باید عملیات غیرفازیسازی را انجام دهیم. این کلید واژه در منابع مختلف فازی زدایی یا DFuzyy نیز نامیده میشود. در واقع به تبدیل اعداد فازی را به اعداد قطعی، فازی زدایی میگوییم. روشهای دفازی عبارتاند از:
- Centroid Of Area (COA) یا مركز ثقل ناحيه
- Bisecter Of Area (BOA) یا نيمساز ناحيه
- Mean Of Maximum (MOM)یا ميانگين ماكزیمم
- Smallest Of Maximum (SOM) یا بيشترین ماكزیمم
- Largest Of Maximum (LOM) یا کوچکترین ماكزیمم
- Weighted Average (WM) یا ميانگين وزنی
- Weighted Sum (WS)یا مجموع وزنی
میان موارد معرفی شده گزینهای COA و WM کاربرد گستردهتری دارند.
پیشنهاد مطالعه: کتاب آموزش سیمولینک متلب برای افراد مبتدی و حرفهای
مقایسه سیستمهای استنتاج فازی ممدانی و سوگنو
الگوریتم ممدانی یک ساختار منطقی نسبتاً ساده را ارائه میدهد. در حالی که الگوریتم سوگنو برای سیستمهایی که نیاز به محاسبات نسبتاً پیچیده ریاضی دارند مناسب است. مقایسه کلی این دو الگوریتم را در جدول زیر مشاهده میکنیم.
ممدانی | سوگنو |
خروجی قوانین آن تابع عضویت است. | خروجی قوانین آن تابع عضویت نیست. |
خروجی توزیع شده دارد. | خروجی آن توزیع شده نبوده بلکه ترکیبی ریاضی از قدرت قوانین است. |
سطح خروجی آن پیوسته نیست. | سطح خروجی پیوسته دارد. |
به صورت MISO و MIMO است. | فقط به صورت MISO است. |
دارای قدرت بیانی و تفسیر قوانین است. | قدرت تفسیری پایینی دارد. |
انواع دفازی سازی SOM، COA، BOA، MOM و LOM را پشتیبانی میکند. | انواع دفازی سازی WS و WA را پشتیبانی میکند. |
انعطافپذیری پایینی در طراحی سیستم دارد. | انعطافپذیری بالایی در طراحی سیستم دارد. |
آموزش ANFIS در متلب
برای پیاده سازی منطق فازی در متلب معمولاً از سیستمهای استنتاج فازی معروف به نامهای ممدانی و تاکاگی سوگنو استفاده میشود. سیستم دیگری هم وجود دارد که ساختار ANFIS مینامیم. این الگوریتم بسیار شبیه سیستمهای استنتاج فازی عمل میکند. این روش از زیر شاخههای الگوریتم شبکه عصبی محسوب میشود؛ بنابراین در آموزش شبکه عصبی در متلب بیشتر این نام را خواهید شنید.
ANFIS مخفف شده عبارت adaptive network-based fuzzy inference system است. این سیستم یک شبکه تطبیق پذیر و قابل آموزش محسوب میشود. بهعنوان مثال فرض کنید روابط منطقی زیر را داریم.
در این رابطه دو ورودی x و y به یک خروجی z ختم میشوند. سیستم ANFIS این رابطه به شکل زیر خواهد بود.
بنابراین در لایه اول ورودیها از توابع عضویت عبور میکنند.
لایههای ۲ تا ۴ نیز عملیاتی هستند که قرار است روی ورودیها انجام شوند. در نهایت در لایه ۵ خروجی را داریم. این الگوریتم معادل سیستم استنتاج فازی سوگنو است.
دستورات منطق فازی در متلب
تمام دستورات منطق فازی در متلب را میتوانید از جدول زیر استخراج کنید. دستورات منطق فازی در متلب تقریبا تمام نیازهای شما را براورده خواهند کرد.
ردیف | کد | توضیحات |
۱ | Fuzzy | جهت فراخوانی محیط گرافیکی پیادهسازی منطق فازی |
۲ | Anfisedit | فراخوانی محیط پیاده سازی شبکه عصبی ANFIS |
۳ | Findcluster | فراخوانی محیط ادیتور به منظور دسته بندی فازی |
۴ | Mfedit | فراخوانی ادیتور توابع عضویت ورودی و خروجی |
۵ | Surfview | مشاهده سطح قوانین خروجی کنترلرهای فازی |
۶ | Ruleview | مشاهده سطح قوانین کنترلرهای فازی |
۷ | Ruleedit | کد تغییر قوانین فازی کنترلرها |
۸ | Dsigmf | کد ساخت توابع عضویت مرکب از اختلاف بین ۲ تابع عضویت حلقوی |
۹ | Plotmf | با کاربرد ترسیم توابع عضویت با دریافت مقادیر ورودی |
۱۰ | Plotfis | با کاربرد ترسیم نتایج خروجی توابع عضویت |
۱۱ | Sigmf | نمایش تابع عضویت سیگما شکل |
۱۲ | Psigmf | نمایش توابع عضویت ساخته شده از ترکیب ۲ تابع عضویت هلالی شکل |
۱۳ | Pimf | نمایش توابع عضویت ساخته شده پی شکل |
۱۴ | Gbellmf | نمایش توابع عضویت ساخته شده زنگوله شکل عمومی |
۱۵ | Gaussmf | نمایش توابع عضویت ساخته شده منحنی گوسینی |
۱۶ | gauss2mf | نمایش توابع عضویت ترکیب شده گوسین |
۱۷ | Evalfis | دریافت خروجی از سیستم استنتاج فازی |
۱۸ | Defuzz | نمایش تابع عضویت حقیقی شده |
۱۹ | Addvar | افزودن متغیر به سیستم استنتاج فازی |
۲۰ | Addrule | افزودن قوانین به سیستم استنتاج فازی |
۲۱ | Addmf | افزودن توابع عضویت به سیستم استنتاج فازی |
۲۲ | Zmf | نمایش تابع عضویت Z شکل |
۲۳ | Trimf | نمایش تابع عضویت مثلثی شکل |
۲۴ | Trapmf | نمایش تابع عضویت ذوزنقهای شکل |
۲۵ | Smf | نمایش تابع عضویت S شکل |
۲۶ | Readfis | فراخوانی از کردن سیستم استنتاج فازی از طریق فایل |
۲۷ | Parsrule | نمایش قوانین فازی تجزیه شده |
۲۸ | Newfis | ایجاد سیستم استنتاج فازی جدید |
۲۹ | mf2mf | نمایش تابع عضویت بین پارامترهای ترجمه شده فازی |
۳۰ | Getfis | نمایش خصوصیات سیستم فازی |
۳۱ | Gensurf | نمایش سطح خروجی سیستم استنتاج فازی |
۳۲ | Evalmf | ارزیابی تابع عضویت عمومی |
۳۳ | Fcm | دسته بندی C-means فازی |
۳۴ | Anfis | ورود به محیط ادیتور فازی عصبی تنها از موتور استنتاج سوگنو |
۳۵ | Writefis | ذخیره سیستم استنتاج فازی در فایل |
۳۶ | Showrule | نمایش قوانین سیستم استنتاج فازی |
۳۷ | Showfis | نمایش حاشیه در سیستم استنتاج فازی |
۳۸ | Setfis | تنظیم خواص سیستم فازی |
۳۹ | Rmvar | حذف متغیر از سیستم استنتاج فازی |
۴۰ | Rmmf | حذف توابع عضویت از سیستم استنتاج فازی |
۴۱ | genfis1 | ساختن ساختار سیستم استنتاج فازی با استفاده از دادههای شبکه بندی شده |
۴۲ | genfis2 | ساختن ساختار سیستم استنتاج فازی با استفاده از دادههای کلاسبندی کاهشی |
۴۳ | genfis3 | ساختن ساختار سیستم استنتاج فازی با استفاده از دادههای کلاسبندی روش FCM |
۴۴ | Subclust | پیدا کردن مراکز دستهها با دستهبندی کاهشی دادهها |
۴۵ | Fuzblock | کتابخانه شبیهسازی منطق فازی |
۴۶ | Sffis | صفحه کدنویسی سیستم فازی برای پیکربندی شبیهسازی آموزش متلب آسان |
سخن پایانی
منطق فازی یکی از علوم مورد استفاده در مباحث علمی مانند هوش مصنوعی و یادگیری ماشین محسوب میشود. این الگوریتم توسط دکتر لطفی زاده بهینه سازی شده است. پیادهسازی منطق فازی در متلب با توجه به محیط گرافیکی که در اختیار کاربرد قرار میگیرید بسیار ساده شده. در این مطلب سعی کردیم یک راهنمای جامع در مورد کار با منطق فازی در متلب ارائه دهیم. برای کسب اطلاعات بیشتر در این مورد میتوانید از فیلمهای آموزش متلب که در مکتب خونه وجود دارند استفاده کنید.