منطق فازی ابزاری قدرتمند برای مدلسازی و تحلیل سیستمهای پیچیده است که به دلیل توانایی آن در پردازش اطلاعات غیرقطعی، در بسیاری از زمینهها کاربرد دارد. متلب با ارائه ابزارهای مناسب، امکان پیادهسازی و استفاده از منطق فازی را فراهم کرده است. منطق فازی توسط لطفی زاده (Lotfi A. Zadeh) در دهه1960 معرفی شد.
این منطق به ما اجازه میدهد تا در انجام پروژه های متلب با اطلاعات مبهم و غیرقطعی به راحتی تصمیم گیری کنیم. برخلاف منطق کلاسیک که فقط دو حالت صحیح و نادرست دارد، منطق فازی میتواند درجات مختلفی از صحت را در نظر بگیرد. منطق فازی بر مبنای مجموعه های فازی شکل گرفته است. یک مجموعه فازی در واقع یک تابع عضویت است که به هر عنصر یک مقدار بین 0 و 1 نسبت میدهد. این مقدار نشان دهنده درجه تعلق آن عنصر به مجموعه است.
تابع عضویت، تعیین کننده این است که یک عنصر چقدر به یک مجموعه خاص تعلق دارد. برای مثال، اگر بخواهیم دما را به عنوان “سرد”، “متوسط” و “گرم” تعریف کنیم، میتوانیم برای هر یک از این حالات یک تابع عضویت مشخص کنیم. عملیات مختلفی مانند اجتماع، اشتراک و مکمل بر روی مجموعه های فازی قابل انجام است. این عملیات به ما کمک میکند تا روابط بین مجموعه ها را تحلیل کنیم.
برای استفاده از منطق فازی در متلب ابزارهای متنوعی ارائه میشود. بستهی Fuzzy Logic Toolbox یکی از مهمترین این ابزارهاست. لذا برای استفاده از این ابزار، ابتدا باید Fuzzy Logic Toolbox را نصب کرد. این کار معمولاً از طریق محیط متلب و با استفاده از دستور ver برای بررسی بسته های نصب شده انجام میشود.
برای ایجاد یک سیستم فازی در متلب، باید مراحل زیر را دنبال کرد:
مرحله | تعریف | دستور |
1 | ورودیها و خروجیها | با استفاده از دستور fuzzy میتوان یک سیستم فازی جدید ایجاد کرد. |
2 | مجموعههای فازی | بااستفاده از تابعaddMF میتوان توابع عضویت را برای ورودیها و خروجیها تعریف کرد. |
3 | قوانین | با استفاده از تابع addRule میتوان قوانین فازی را تعریف کرد. |
4 | استفاده از سیستم | با استفاده از تابع evalfis میتوان خروجی سیستم را برای ورودیهای مشخص محاسبه کرد. |
سیستمهای فازی به طور کلی به دو دسته تقسیم میشوند:
- سیستم های فازی مبتنی بر قوانین و سیستم های فازی مبتنی بر یادگیری
سیستم های فازی مبتنی بر قوانین بر اساس مجموعهای از قوانین فازی عمل میکنند. این قوانین معمولاً به صورت “اگر-آنگاه” بیان میشوند.
- سیستم های فازی مبتنی بر یادگیری از الگوریتم های یادگیری ماشین برای بهبود عملکرد خود استفاده میکنند و قادرند با داده های جدید سازگار شوند.
منطق فازی به دلیل توانایی آن در پردازش اطلاعات غیرقطعی و مبهم، در بسیاری از زمینه ها مورد استفاده قرار میگیرد. منطق فازی کاربردهای وسیعی در زمینه های مختلف دارد که شامل کنترل سیستم ها، پزشکی، رباتیک، مدیریت منابع است. در کنترل فرآیندها، منطق فازی به طور گستردهای برای طراحی کنترل کننده های هوشمند استفاده میشود.
به عنوان مثال، کنترل دما یا سرعت موتور. در پزشکی، منطق فازی برای تشخیص بیماری ها و پیشبینی نتایج درمانی مورد استفاده قرار میگیرد. در رباتیک، منطق فازی برای تصمیم گیری و کنترل حرکت رباتها مورد استفاده قرار میگیرد.
مدیریت منابع طبیعی مانند آب و انرژی نیز از منطق فازی بهره مند میشود تا تصمیمات بهینه تری اتخاذ کند.
مثال1- کنترل دمای اتاق با منطق فازی
clc; clear; close all
% ایجاد سیستم استنتاج فازی
fis = newfis(‘TemperatureControl’);
% تعریف ورودیهای سیستم: دمای فعلی و نرخ تغییر دما
fis = addvar(fis, ‘input’, ‘Temperature’, [0 40]);
fis = addvar(fis, ‘input’, ‘ChangeRate’, [-10 10]);
% تعریف توابع عضویت برای دمای فعلی
fis = addmf(fis, ‘input’, 1, ‘cold’, ‘trapmf’, [0 0 10 15]);
fis = addmf(fis, ‘input’, 1, ‘cool’, ‘trimf’, [10 15 20]);
fis = addmf(fis, ‘input’, 1, ‘warm’, ‘trimf’, [15 20 25]);
fis = addmf(fis, ‘input’, 1, ‘hot’, ‘trapmf’, [20 25 40 40]);
% تعریف توابع عضویت برای نرخ تغییر دما
fis = addmf(fis, ‘input’, 2, ‘decreasing’, ‘trapmf’, [-10 -10 -5 0]);
fis = addmf(fis, ‘input’, 2, ‘steady’, ‘trimf’, [-5 0 5]);
fis = addmf(fis, ‘input’, 2, ‘increasing’, ‘trapmf’, [0 5 10 10]);
% تعریف متغیر خروجی: تنظیم سیستم گرمایش/سرمایش
fis = addvar(fis, ‘output’, ‘HeatingCooling’, [-10 10]);
% تعریف توابع عضویت برای خروجی
fis = addmf(fis, ‘output’, 1, ‘cooling’, ‘trapmf’, [-10 -10 -5 0]);
fis = addmf(fis, ‘output’, 1, ‘none’, ‘trimf’, [-5 0 5]);
fis = addmf(fis, ‘output’, 1, ‘heating’, ‘trapmf’, [0 5 10 10]);
% تعریف قوانین فازی
ruleList = [
1 1 3 1 1; % If temperature is cold and change rate is decreasing, then heating
1 2 3 1 1; % If temperature is cold and change rate is steady, then heating
1 3 3 1 1; % If temperature is cold and change rate is increasing, then heating
2 1 3 1 1; % If temperature is cool and change rate is decreasing, then heating
2 2 2 1 1; % If temperature is cool and change rate is steady, then none
2 3 1 1 1; % If temperature is cool and change rate is increasing, then cooling
3 1 2 1 1; % If temperature is warm and change rate is decreasing, then none
3 2 2 1 1; % If temperature is warm and change rate is steady, then none
3 3 1 1 1; % If temperature is warm and change rate is increasing, then cooling
4 1 1 1 1; % If temperature is hot and change rate is decreasing, then cooling
4 2 1 1 1; % If temperature is hot and change rate is steady, then cooling
4 3 1 1 1 % If temperature is hot and change rate is increasing, then cooling];
% افزودن قوانین به سیستم استنتاج فازی
fis = addrule(fis, ruleList);
% نمایش ساختار قوانین
showrule(fis)
% ارزیابی سیستم با ورودیهای نمونه
temperature = 22; % دمای فعلی
changeRate = 3; % نرخ تغییر دما
input = [temperature changeRate];
output = evalfis(input, fis);
% نمایش خروجی
disp([‘Output: ‘, num2str(output)]);
خروجی:
12×95 char array
‘1. If (Temperature is cold) and (ChangeRate is decreasing) then (HeatingCooling is heating) (1)’
‘2. If (Temperature is cold) and (ChangeRate is steady) then (HeatingCooling is heating) (1) ‘
‘3. If (Temperature is cold) and (ChangeRate is increasing) then (HeatingCooling is heating) (1)’
‘4. If (Temperature is cool) and (ChangeRate is decreasing) then (HeatingCooling is heating) (1)’
‘5. If (Temperature is cool) and (ChangeRate is steady) then (HeatingCooling is none) (1) ‘
‘6. If (Temperature is cool) and (ChangeRate is increasing) then (HeatingCooling is cooling) (1)’
‘7. If (Temperature is warm) and (ChangeRate is decreasing) then (HeatingCooling is none) (1) ‘
‘8. If (Temperature is warm) and (ChangeRate is steady) then (HeatingCooling is none) (1) ‘
‘9. If (Temperature is warm) and (ChangeRate is increasing) then (HeatingCooling is cooling) (1)’
’10. If (Temperature is hot) and (ChangeRate is decreasing) then (HeatingCooling is cooling) (1)’
’11. If (Temperature is hot) and (ChangeRate is steady) then (HeatingCooling is cooling) (1) ‘
’12. If (Temperature is hot) and (ChangeRate is increasing) then (HeatingCooling is cooling) (1)’
Output: -3.7296
توضیح: ایجاد سیستم استنتاج فازی با دستور fis = newfis(‘TemperatureControl’); است که یک سیستم استنتاج فازی جدید به نام ‘TemperatureControl’ ایجاد میشود.
- تعریف ورودیها و توابع عضویت: ورودیهای دمای فعلی و نرخ تغییر دما به سیستم اضافه میشوند و توابع عضویت برای هرکدام تعریف میشوند.
- تعریف متغیر خروجی و توابع عضویت آن: متغیر خروجی تنظیم سیستم گرمایش/سرمایش به سیستم اضافه میشود و توابع عضویت برای آن تعریف میشوند.
- تعریف قوانین فازی: قوانین فازی تعیین میکنند که چگونه ورودیها برای تعیین خروجی ترکیب میشوند.
- افزودن قوانین به سیستم: قوانین تعریفشده به سیستم استنتاج فازی اضافه میشوند.
- نمایش ساختار قوانین: ساختار قوانین نمایش داده میشود.
- ارزیابی سیستم با ورودیهای نمونه: دمای فعلی و نرخ تغییر دما به عنوان ورودی به سیستم داده میشوند و خروجی مناسب محاسبه میشود.
- نمایش خروجی: خروجی محاسبهشده نمایش داده میشود که نشاندهنده تنظیم سیستم گرمایش/سرمایش است.
مثال 2- کنترل سرعت فن با منطق فازی
clc; clear; close all
% ایجاد سیستم استنتاج فازی
fis = newfis(‘FanSpeedControl’);
% تعریف ورودیها: دما و رطوبت نسبی
fis = addvar(fis, ‘input’, ‘Temperature’, [0 40]);
fis = addvar(fis, ‘input’, ‘Humidity’, [0 100]);
% تعریف توابع عضویت برای دما
fis = addmf(fis, ‘input’, 1, ‘cold’, ‘trapmf’, [-1 0 10 20]);
fis = addmf(fis, ‘input’, 1, ‘comfortable’, ‘trimf’, [15 25 35]);
fis = addmf(fis, ‘input’, 1, ‘hot’, ‘trapmf’, [30 40 50 60]);
% تعریف توابع عضویت برای رطوبت نسبی
fis = addmf(fis, ‘input’, 2, ‘low’, ‘trapmf’, [-10 0 30 50]);
fis = addmf(fis, ‘input’, 2, ‘medium’, ‘trimf’, [40 50 60]);
fis = addmf(fis, ‘input’, 2, ‘high’, ‘trapmf’, [50 70 100 110]);
% تعریف خروجی: سرعت فن
fis = addvar(fis, ‘output’, ‘FanSpeed’, [0 10]);
% تعریف توابع عضویت برای سرعت فن
fis = addmf(fis, ‘output’, 1, ‘slow’, ‘trimf’, [0 2.5 5]);
fis = addmf(fis, ‘output’, 1, ‘medium’, ‘trimf’, [2.5 5 7.5]);
fis = addmf(fis, ‘output’, 1, ‘fast’, ‘trimf’, [5 7.5 10]);
% تعریف قوانین فازی
ruleList = [
1 1 2 1 1; % اگر دما کم باشد و رطوبت کم باشد، سرعت فن متوسط است
1 2 2 1 1; % اگر دما کم باشد و رطوبت متوسط باشد، سرعت فن متوسط است
1 3 1 1 1; % اگر دما کم باشد و رطوبت زیاد باشد، سرعت فن کم است
2 1 2 1 1; % اگر دما مناسب باشد و رطوبت کم باشد، سرعت فن متوسط است
2 2 2 1 1; % اگر دما مناسب باشد و رطوبت متوسط باشد، سرعت فن متوسط است
2 3 3 1 1; % اگر دما مناسب باشد و رطوبت زیاد باشد، سرعت فن زیاد است
3 1 3 1 1; % اگر دما زیاد باشد و رطوبت کم باشد، سرعت فن زیاد است
3 2 3 1 1; % اگر دما زیاد باشد و رطوبت متوسط باشد، سرعت فن زیاد است
3 3 3 1 1 % اگر دما زیاد باشد و رطوبت زیاد باشد، سرعت فن زیاد است
];
% افزودن قوانین به سیستم استنتاج فازی
fis = addrule(fis, ruleList);
% نمایش ساختار قوانین
showrule(fis)
% ارزیابی سیستم با ورودیهای نمونه
temperature = 30; % دمای فعلی
humidity = 70; % رطوبت نسبی
input = [temperature humidity];
output = evalfis(input, fis);
% نمایش خروجی
disp([‘Fan Speed: ‘, num2str(output)]);
خروجی :
9×89 char array
‘1. If (Temperature is cold) and (Humidity is low) then (FanSpeed is medium) (1) ‘
‘2. If (Temperature is cold) and (Humidity is medium) then (FanSpeed is medium) (1) ‘
‘3. If (Temperature is cold) and (Humidity is high) then (FanSpeed is slow) (1) ‘
‘4. If (Temperature is comfortable) and (Humidity is low) then (FanSpeed is medium) (1) ‘
‘5. If (Temperature is comfortable) and (Humidity is medium) then (FanSpeed is medium) (1)’
‘6. If (Temperature is comfortable) and (Humidity is high) then (FanSpeed is fast) (1) ‘
‘7. If (Temperature is hot) and (Humidity is low) then (FanSpeed is fast) (1) ‘
‘8. If (Temperature is hot) and (Humidity is medium) then (FanSpeed is fast) (1) ‘
‘9. If (Temperature is hot) and (Humidity is high) then (FanSpeed is fast) (1)
Fan Speed: 7.5
توضیح:
توضیح کد | دستورات |
ایجاد سیستم استنتاج فازی با دستور که یک سیستم استنتاج فازی جدید به نام ‘FanSpeedControl’ ایجاد میشود. | fis = newfis(‘FanSpeedControl’); |
تعریف ورودیها : دو متغیر ورودی با دامنه مشخص (دمای 0 تا 40 درجه و رطوبت 0 تا 100 درصد) به سیستم اضافه میشوند. | fis = addvar(fis, ‘input’, ‘Temperature’, [0 40]);fis = addvar(fis, ‘input’, ‘Humidity’, [0 100]); |
تعریف توابع عضویت برای دما: توابع عضویت برای متغیر دما تعریف میشوند. این توابع تعیین میکنند که هر مقدار دما به چه دستهای تعلق دارد (‘cold’, ‘comfortable’, ‘hot’). | fis = addmf(fis, ‘input’, 1, ‘cold’, ‘trapmf’, [-1 0 10 20]);fis = addmf(fis, ‘input’, 1, ‘comfortable’, ‘trimf’, [15 25 35]);fis = addmf(fis, ‘input’, 1, ‘hot’, ‘trapmf’, [30 40 50 60]); |
تعریف توابع عضویت برای رطوبت: توابع عضویت برای متغیر رطوبت نسبی تعریف میشوند (‘low’, ‘medium’, ‘high’). | fis = addmf(fis, ‘input’, 2, ‘low’, ‘trapmf’, [-10 0 30 50]);fis = addmf(fis, ‘input’, 2, ‘medium’, ‘trimf’, [40 50 60]);fis = addmf(fis, ‘input’, 2, ‘high’, ‘trapmf’, [50 70 100 110]); |
تعریف متغیر خروجی: یک متغیر خروجی با دامنه 0 تا 10 برای سرعت فن به سیستم اضافه میشود.
| fis = addvar(fis, ‘output’, ‘FanSpeed’, [0 10]); |
تعریف توابع عضویت برای سرعت فن: توابع عضویت برای متغیر خروجی سرعت فن تعریف میشوند (‘slow’, ‘medium’, ‘fast’).
| fis = addmf(fis, ‘output’, 1, ‘slow’, ‘trimf’, [0 2.5 5]);fis = addmf(fis, ‘output’, 1, ‘medium’, ‘trimf’, [2.5 5 7.5]);fis = addmf(fis, ‘output’, 1, ‘fast’, ‘trimf’, [5 7.5 10]); |
تعریف قوانین فازی: قوانین فازی که تعیین میکنند چگونه ورودیها ترکیب میشوند تا خروجی مناسب تولید شود، تعریف میشوند.
| ruleList = [ 1 1 2 1 1; % اگر دما کم باشد و رطوبت کم باشد، سرعت فن متوسط است 1 2 2 1 1; % اگر دما کم باشد و رطوبت متوسط باشد، سرعت فن متوسط است 1 3 1 1 1; % اگر دما کم باشد و رطوبت زیاد باشد، سرعت فن کم است 2 1 2 1 1 … |
افزودن قوانین به سیستم: قوانین به سیستم استنتاج فازی اضافه میشوند | fis = addrule(fis, ruleList); |
نمایش ساختار قوانین | showrule(fis) |
ارزیابی سیستم با ورودیهای نمونه: سیستم استنتاج فازی با ورودیهای نمونه (دمای 30 درجه و رطوبت نسبی 70 درصد) ارزیابی میشود و خروجی محاسبه میشود | temperature = 30;humidity = 70;input = [temperature humidity];output = evalfis(input, fis); |
نمایش خروجی: خروجی محاسبهشده نمایش داده میشود که نشاندهنده سرعت فن است | disp([‘Fan Speed: ‘, num2str(output)]); |
از دیگر سری مقالات آموزش متلب بازدید نمایید.


