منطق فازی شکلی از منطق چند ارزشی است که در آن مقدار صدق متغیرها ممکن است هر عدد واقعی بین 0 و 1 باشد. این منطق برای مدیریت مفهوم صدق جزئی به کار می رود، جایی که مقدار صدق ممکن است بین کاملاً درست و کاملاً نادرست باشد. در مقابل، در منطق بولی، مقادیر صدق متغیرها ممکن است فقط مقادیر صحیح 0 یا 1 باشد.

اصطلاح منطق فازی با پیشنهاد نظریه مجموعه فازی در سال 1965 توسط ریاضیدان ایرانی آذربایجانی لطفی زاده معرفی شد. با این حال، منطق فازی از دهه 1920 به عنوان منطق بی نهایت ارزش مورد مطالعه قرار گرفته بود.

منطق فازی مبتنی بر مشاهده است که افراد بر اساس اطلاعات غیر دقیق و غیر عددی تصمیم می گیرند. مدل‌ها یا مجموعه‌های فازی ابزارهای ریاضی برای نمایش اطلاعات مبهم و نادقیق هستند (از این رو اصطلاح فازی نامیده می‌شود). این مدل ها قابلیت تشخیص، بازنمایی، دستکاری، تفسیر و استفاده از داده ها و اطلاعات مبهم و فاقد قطعیت را دارند. منطق فازی در بسیاری از زمینه ها از نظریه کنترل گرفته تا هوش مصنوعی به کار گرفته شده است.

مروری بر منطق فازی

منطق کلاسیک فقط به نتیجه گیری هایی اجازه می دهد که درست یا نادرست باشند. با این حال، گزاره‌هایی با پاسخ‌های متغیر نیز وجود دارد، مانند مواردی که ممکن است هنگام درخواست از گروهی از افراد برای شناسایی یک رنگ پیدا شود. در چنین مواردی، حقیقت به عنوان نتیجه استدلال از دانش غیر دقیق یا جزئی ظاهر می شود که در آن پاسخ های نمونه بر روی یک طیف ترسیم می شوند.

هم درجات صدق و هم احتمالات بین 0 و 1 قرار دارند و از این رو ممکن است در ابتدا مشابه به نظر برسند، اما منطق فازی از درجاتی از صدق به عنوان مدل ریاضی مبهم (مدلی توام با عدم قطعیت) استفاده می کند، در حالی که احتمال یک مدل ریاضی محض است.

به کار بردن ارزش های حقیقت

یک برنامه کاربردی پایه ممکن است زیرمجموعه های مختلفی از یک متغیر پیوسته را مشخص کند. به عنوان مثال، اندازه گیری دما برای ترمزهای ضد قفل ممکن است چندین تابع عضویت مجزا داشته باشد که محدوده دمایی خاصی را که برای کنترل صحیح ترمزها لازم است تعریف می کند. هر تابع همان مقدار دما را به مقدار صدق در محدوده 0 تا 1 ترسیم می کند. سپس می توان از این مقادیر حقیقت برای تعیین نحوه کنترل ترمزها استفاده کرد. نظریه مجموعه های فازی وسیله ای برای نمایش عدم قطعیت فراهم می کند.

متغیرهای زبانی

در کاربردهای منطق فازی، مقادیر غیر عددی اغلب برای تسهیل بیان قوانین و حقایق استفاده می‌شوند. یک متغیر زبانی مانند سن ممکن است مقادیری مانند جوان و متضاد آن پیر را بپذیرد. از آنجایی که زبان‌های طبیعی همیشه دارای عبارات ارزشی کافی برای بیان یک مقیاس ارزش فازی نیستند، تغییر ارزش‌های زبانی با صفت‌ها یا قیدها معمول است.

سیستم های فازی

ممدانی

شناخته شده ترین نظام، نظام قاعده محور ممدانی است. از قوانین زیر استفاده می کند:

  1. فازی کردن تمام مقادیر ورودی در توابع عضویت فازی.
  2. برای محاسبه توابع خروجی فازی، تمام قوانین قابل اجرا را در پایگاه قوانین اجرا کنید.
  3. توابع خروجی فازی را غیرفازی کنید تا مقادیر خروجی واضح به دست آورید.
فازی شدن

فازی سازی فرآیند تخصیص ورودی عددی یک سیستم به مجموعه های فازی با درجاتی از عضویت است. این درجه عضویت ممکن است در هر جایی در بازه [0،1] باشد. اگر 0 باشد، مقدار به مجموعه فازی داده شده تعلق ندارد، و اگر 1 باشد، مقدار کاملاً در مجموعه فازی تعلق دارد. هر مقدار بین 0 و 1 نشان دهنده درجه عدم قطعیت است که مقدار به مجموعه تعلق دارد. این مجموعه‌های فازی معمولاً با کلمات توصیف می‌شوند، و بنابراین با اختصاص دادن ورودی سیستم به مجموعه‌های فازی، می‌توانیم به شیوه‌ای از لحاظ زبانی طبیعی با آن استدلال کنیم.

به عنوان مثال، در تصویر زیر معانی عبارات سرد، گرم و گرم با توابع ترسیم مقیاس دما نشان داده شده است. یک نقطه در آن مقیاس دارای سه “مقدار حقیقت” است – یکی برای هر یک از سه تابع. خط عمودی در تصویر نشان دهنده دمای خاصی است که سه فلش (مقادیر حقیقت) آن را اندازه گیری می کند. از آنجایی که فلش قرمز به صفر اشاره می کند، این دما ممکن است به عنوان “گرم نیست” تفسیر شود. یعنی این دما عضویت صفر در مجموعه فازی “گرم” دارد. فلش نارنجی (که روی 0.2 نشان می دهد) ممکن است آن را به عنوان “کمی گرم” و فلش آبی (به سمت 0.8) “نسبتا سرد” توصیف کند. بنابراین، این دما دارای 0.2 عضویت در مجموعه فازی “گرم” و 0.8 عضویت در مجموعه فازی “سرد” است. درجه عضویت اختصاص داده شده برای هر مجموعه فازی نتیجه فازی شدن است.

شکل 1 تابع عضویت متناسب با منطق فازی برای نمایش دما 300x119 شبیه سازی منطق فازی در متلب

شکل 1 ) تابع عضویت متناسب با منطق فازی برای نمایش دما

مجموعه های فازی اغلب به عنوان منحنی های مثلثی یا ذوزنقه ای تعریف می شوند، زیرا هر مقدار دارای یک شیب است که در آن مقدار در حال افزایش است، یک قله که در آن مقدار برابر با 1 است (که می تواند طول 0 یا بیشتر داشته باشد) و یک شیب که در آن مقدار ارزش در حال کاهش است. آنها همچنین می توانند با استفاده از یک تابع سیگموئید تعریف شوند. یکی از موارد رایج تابع لجستیک استاندارد است که به صورت تعریف شده است

فرمول 1 1 شبیه سازی منطق فازی در متلب

که خاصیت تقارن زیر را دارد

فرمول 2 1 شبیه سازی منطق فازی در متلب

که از آن می توان نتیجه گرفت :

فرمول 3 300x34 شبیه سازی منطق فازی در متلب

عملگرهای منطق فازی

منطق فازی با مقادیر عضویت به گونه ای کار می کند که منطق بولی را تقلید می کند. برای این منظور، جایگزینی برای اپراتورهای اصلی AND، OR، NOT باید در دسترس باشد. چندین راه برای این وجود دارد. یک جایگزین رایج عملگرهای زاده (برگرفته از لطفعلی زاده) نامیده می شود:

جدول عملگرهای فازی

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

برای TRUE/1 و FALSE/0، عبارات فازی همان نتیجه عبارات بولی را ایجاد می کنند.

عملگرهای دیگری نیز وجود دارند که ماهیت زبانی بیشتری دارند، به نام پرچین که می توان آنها را اعمال کرد. اینها عموماً قیدهایی مانند خیلی یا تا حدی هستند که با استفاده از یک فرمول ریاضی معنای یک مجموعه را تغییر می دهند.

با این حال، یک جدول انتخاب دلخواه همیشه یک تابع منطق فازی را تعریف نمی کند. در مقاله ای، معیاری برای تشخیص اینکه آیا یک جدول انتخاب داده شده یک تابع منطق فازی را تعریف می کند یا خیر فرموله شده است و یک الگوریتم ساده از سنتز تابع منطق فازی بر اساس مفاهیم معرفی شده از اجزای حداقل و حداکثر ارائه شده است. یک تابع منطق فازی یک تفکیک از مؤلفه‌های حداقل را نشان می‌دهد، که در آن یک مؤلفه حداقل، ترکیبی از متغیرهای مساحت فعلی بزرگ‌تر یا مساوی با مقدار تابع در این ناحیه (در سمت راست مقدار تابع در نابرابری، از جمله مقدار تابع).

مجموعه دیگری از عملگرهای AND/OR بر اساس ضرب است که در آن :

x AND y = x*y

NOT x = 1 – x 

Hence,

x OR y = NOT( AND( NOT(x), NOT(y) ) )

x OR y = NOT( AND(1-x, 1-y) )

x OR y = NOT( (1-x)*(1-y) )

x OR y = 1-(1-x)*(1-y)

x OR y = x+y-xy

با توجه به هر دو مورد AND/OR/NOT، می توان سومی را استخراج کرد. تعمیم AND به عنوان t-norm شناخته می شود.

قوانین IF-TEN

قوانین IF-THEN ورودی یا مقادیر صدق محاسبه شده را به مقادیر صدق خروجی دلخواه ترسیم می کنند. مثال:

اگر دما خیلی سرد است، سرعت فن متوقف می شود

اگر دما سرد است، سرعت فن پایین است

اگر دما گرم است، سرعت فن متوسط ​​است

اگر دما گرم است، سرعت فن بالاست

با توجه به دمای معین، متغیر فازی hot دارای مقدار صدق مشخصی است که در متغیر بالا کپی می شود.

اگر یک متغیر خروجی در چندین قسمت THEN رخ دهد، آنگاه مقادیر قسمت های IF مربوطه با استفاده از عملگر OR ترکیب می شوند.

فازی دایی

هدف در این مرحله بدست آوردن یک متغیر پیوسته از مقادیر حقیقت فازی است. اگر مقادیر صدق خروجی دقیقاً همان مقداری باشد که از فازی سازی یک عدد معین به دست می آید، این کار آسان خواهد بود. با این حال، از آنجایی که همه مقادیر صدق خروجی به طور مستقل محاسبه می شوند، در بیشتر موارد آنها چنین مجموعه ای از اعداد را نشان نمی دهند. به عنوان مثال، برای چندین مقدار صدق fan_speed، باید یک سرعت واقعی پیدا شود که به بهترین وجه با مقادیر حقیقت محاسبه شده متغیرهای ‘slow’، ‘moderate’ و غیره مطابقت داشته باشد هیچ الگوریتم واحدی برای این منظور وجود ندارد. یک الگوریتم رایج است :

  1. برای هر مقدار حقیقت، تابع عضویت را در این مقدار برش دهید
  2. منحنی های حاصل را با استفاده از عملگر OR ترکیب کنید
  3. مرکز وزن ناحیه زیر منحنی را پیدا کنید
  4. سپس موقعیت x این مرکز خروجی نهایی است.

شبیه سازی منطق فازی در متلب

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

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

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

  1. اولین گام باز کردن یک مدل جدید از سیمولینک متلب می باشد که با استفاده از صفحه پیش فرض نرم افزار متلب و انتخاب New / Simulink model امکان پذیر است.
  2. در گام دوم با باز کردن library browser و انتخاب Fuzzy logic toolbox دو نوع اینترفیس فازی را مشاهده خواهیم کرد که نمایش بصورت شکل زیر است .
    شکل 2 اینترفیس های فازی در دسترس برای منطق فازی 300x159 شبیه سازی منطق فازی در متلب
    شکل 2 ) اینترفیس های فازی در دسترس برای منطق فازی
  3. انتخاب fuzzy logic controller with ruleviewer سبب می شود تا حین شبیه سازی قادر به مشاهده تغییرات در ورودی ها و بالتبع خروجی های سیستم باشیم. حال آنکه در fuzzy logic controller این امکان فراهم نخواهد بود و البته سرعت شبیه سازی به همان نسبت در حالت اول کاهش خواهد یافت. انتخاب گزینه همراه با مشاهده قوانین فازی می تواند در مراحل اولیه طراحی به جهت بررسی دینامیک کار منطق فازی و همینطور به منظور ارائه شبیه سازی به استاد یا کنفرانس مطلوب باشد.
  4. در گام سوم بلوک انتخابی را به داخل مدل سیمولینک خود درگ (drag) کنید.
  5. می توانید با دابل کلیک بر روی بلوک فازی تنظیمات آن را مشاهده کنید. این تنظیمات شامل دو ردیف می باشد که ردیف اول FIS ماتریکس را از شما می خواهد، این ماتریکس در واقع شامل تنظیمات ورودی خروجی و قوانین فازی می باشد که در ادامه طرز تشکیل آن را خواهیم آموخت. ردیف دوم refresh rate می باشد که در حالت ruleviewer فعال می باشد و بازه زمانی رفرش شدن شکل مشاهده قوانین را از شما می خواهد.
  6. در گام چهارم که اساسی ترین گام در تشکیل فازی خواهد بود. بایستی دستور fuzzy را بر روی command window متلب تایپ کنید و اینتر کنید. با این کار انترفیس متلب برای شما نمایش داده خواهد شد که به صورت شکل زیر است :
    شکل 3 اینترفیس متلب برای تنظیم ورودی خروجی و قواعد فازی 300x254 شبیه سازی منطق فازی در متلب

    شکل 3 ) اینترفیس متلب برای تنظیم ورودی خروجی و قواعد فازی

  7. این اینترفیس دارای تنظیم اولیه با یک ورودی ، یک خروجی می باشد که تنظیم قوانین آن نیز بصورت ممدانی (که در ابتدای پست آن را توضیح دادم) می باشد.
  8. با فرض اینکه مدل مورد نظر دارای دو ورودی (مثلا سیگنال خطا و مشتق سیگنال خطا) می باشد و همچنین یک خروجی داریم کار را ادامه می دهیم.
  9. برای انجام این فرایند از تب edit نسبت به افزودن ورودی اقدام می کنیم. حال بلافاصله برای شما یک پنجره دیگر نیز باز می شود که مربوط به تنظیم ورودی ها و خروجی می باشد. این تنظیم برای توابع عضویت از نظر تعداد ، شکل خواهد بود. شکل زیر نمایش این دو پنجره در کنار یکدیگر را نمایش می دهد.
  10. حال اگر قصد افزودن ورودی یا خروجی های دیگر را نیز داشته باشید می توانید طبق روش قبلی از گزینه edit و سپس افزودن مورد نظر استفاده کنید.
  11. مهم است که دقت کنید تا انتهای فرآیند از بستن پنجره اولیه fuzzy logic designer اجتناب نمایید.
  12. می توانید در این گام نسبت به تغییر نام ورودی ، خروجی ها اقدام نمایید. این گزینه از پنجره اولیه (fuzzy logic designer) برای شما قابل انجام است. سمت راست پایین نام پیش فرض Input 1 فعال است که می توانید با کلیک بر روی آن این نام را تغییر دهید. این قضیه برای سایر ورودی ها و خروجی ها نیز قابل انجام است. من اینها را با نام های error ، error-diff و control-out نامگذاری می کنم.
  13. دابل کلیک بر روی هر کدام از ورودی ها یا خروجی در پنجره طراحی (fuzzy logic designer) باعث باز شدن تنظیمات گرافیکی مربوط به آن خواهد بود.
  14. من در اینجا بر روی ورودی دوم دابل کلیک می کنم و شکل زیر را برای آن خواهم داشت :
    شکل 4 تنظیمات مربوط به ورودی در منطق فازی 300x254 شبیه سازی منطق فازی در متلب
    شکل 4 ) تنظیمات مربوط به ورودی در منطق فازی
  15. تنظیماتی که در این پنجره برای شما به منظور تغییر یا تثبیت فعال می باشند عبارتند از : برد ورودی مورد نظر که بصورت پیش فرض از 0 تا 1 می باشد ، بردی که نمایش داده می شود و معمولا برابر با برد واقعی در نظر گرفته می شود ، تنظیم های دیگر مربوط به توابع عضویت فازی خواهد بود. شما بصورت پیش فرض با 3 تابع عضویت برای هر ورودی مواجه هستید که با mf1 ، mf2 و mf3 نمایش داده شده اند و نوع ان تابع عضویت ها به صورت مثلثی می باشد. حال می توان با کلیک بر روی هر کدام از توابع عضویت در نمایش گرافیکی و هایلایت نمودن آن نسبت به تغییر نام ، نوع تابع عضویت و پارامترهای آن اقدام کرد. (برای مثال تابع عضویت مثلثی 3 پارامتر مینیمم مقدار ، مقدار قله که متناظر با خروجی یک برای تابع عضویت است و ماکزیمم مقدار می باشد)
  16. پس از تنظیم هر کدام از توابع عضویت به گام بعد خواهیم رفت. من در اینجا برد ورودی خطا را از منفی 1 تا 1 قرار داده و از توابع عضویت گاوسین استفاده کرده ام . همچنین نام توابع عضویت را به ترتیب منفی ، صفر و مثبت قرار داده ام تا شکل زیر برای آن بدست آید.
    شکل 5 تنظیمات نهاییی انجام شده بر روی ورودی خطا در منطق فازی 300x254 شبیه سازی منطق فازی در متلب
    شکل 5 ) نظیمات نهایی انجام شده بر روی ورودی خطا در منطق فازی
  17. گام بعدی تعیین قوانین فازی می باشد برای این منظور از پنجره اولیه (fuzzy logic designer) بر روی utitled/mamdani دابل کلیک کنید تا پنجره مربوطه باز شود. در اینجا می توانید با ارتباط بولی مورد نظر بین توابع عضویت مختلف از دو ورودی نسبت به تعیین خروجی اقدام کنید.
  18. بایستی دقت شود که تمامی حالات ممکن پوشش داده شود یعنی تمام حالت های ممکن ورودی ها در نظر گرفته شود. در این مثال 2 ورودی داریم که هر کدام دارای 3 تابع عضویت می باشند بنابراین 3*3 حالت مختلف خواهیم داشت که نیاز به تنظیم 9 قانون دارد. این قوانین بایستی که به 3 تابع عضویت خروجی نگاشت شوند (می توان با تغییر تعداد توابع عضویت خروجی دقت فازی را بهبود بخشید)
  19. در شکل زیر سه قانون ممکن برای تابع عضویت اول ورودی اول و سه تابع عضویت ورودی دوم نوشته شده است.
    شکل 6 تنظیم قوانین فازی بصورت ممدانی در منطق فازی 300x256 شبیه سازی منطق فازی در متلب
    شکل 6 ) تنظیم قوانین فازی بصورت ممدانی در منطق فازی
  20. در گام آخر از گزینه file/export/to workspace به منظور ذخیره فایل نوشته شده در ورک اسپیس متلب اقدام می شود. داده نوشته شده از نوع struct خواهد بود.
  21. این داده نهایتا در بلوک fuzzy که در سیمولینک و در گام اول داشتیم به عنوان FIS matrix استفاده خواهد شد به این ترتیب که نام این داده در آن قسمت بلوک نگاشته می شود.
  22. نهایتا کار را در سیمولینک متلب با افزودن ورودی ها و خروجی های مورد نظر تکمیل می کنیم. در سیستم های با چند ورودی یا خروجی نیاز به بلوک mux و یا demux خواهید داشت که در library browser در دسترس می باشند. شکل کلی به صورت زیر خواهد بود :
    شکل 7 شماتیک نهایی قابل استفاده برای منطق فازی در محیط سیمولینک 300x178 شبیه سازی منطق فازی در متلب
    شکل 7 ) شماتیک نهایی قابل استفاده برای منطق فازی در محیط سیمولینک

منبع : برق تِک

About برق تِک

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *