• فروشگاه اندروید
  • انجمن
  • برنامه نویسی
  • گرافیک

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



    نوشتن سینتکس قانون فازی در این حالت خاص با کدنویسی، چه طور???زمان کنونی: ۱۳۹۵/۰۹/۱۷، ۰۳:۰۲ ب.ظ
    کاربران در حال بازدید این موضوع: 1 مهمان
    نویسنده: ghazal
    آخرین ارسال: eli
    پاسخ 11
    بازدید 8425

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

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

    #1
    سلام--فرض کنیم که ورودی فازی من 5 تا تابع عضویت (خیلی باارزش-باارزش-ارزش متوسط،ارزش کم-خیلی ارزش کم) دارم حالا می خواهم برای سیستم با کدنویسی در ام-فایل قانونی بنویسم که بدین مفهوم باشد:
    اگر ورودی یک،" کم ارزش" و ورودی دوم "کم ارزش نباشد" ان گاه خروجی متوسط شود

    if x=low-value and y= not low-value then output=middle
    منظور این است که ورودی دوم حالاتی همچون (خیلی باارزش-باارزش-ارزش متوسط) را میتواند اتخاد کند--به عبارتی ساده سازی قانون انجام می دهم...به جای نوشتن چند قانون مجزا که در ان ورودی دوم جداگانه مقادیر خیلی باارزش-باارزش-ارزش متوسط، را اتخاد کند می خواهم ، در قالب یک قانون بنویسم و ادغام کردم
    دستور سینتکس آن چیست؟؟ چه طور باید کد نویسی این قانون خاص را انجام بدهم؟
    منظورم در فرم ماتریسی قانون هست که باید در "کد های ام فایل " بنویسیم
    لطفا راهنماییم کنید نیاز فوری دارم
    پاسخ

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

    #2
    سلام .
    امیدوارم درست منظورتون رو متوجه شده باشم .
    برای سادگی هر مقدار را در برنامه با یک عدد نمایش می دهیم . مقدار خیلی کم ارزش با 1 ، کم ارزش با 2 ، متوسط با 3 ، با ارزش با 4 و خیلی با ارزش را با 5 نمایش می دهیم .
    کدها به صورت زیر می باشند :

    کد:
    clear all
    close all
    clc

    % 1--> very low value  2--> low value  3--> middle  4--> high value  5--> very high value

    output_values=cellstr(['very low ';'low      ';'middle   ';'high     ';'very high']);

    output=0;
    input_1=1;
    input_2=3;
    if (input_1<=2 && input_2>=3)
        output=3;
    end
    output=output_values(output)

    دو ورودی را با input_1 و input_2 نمایش می دهیم . با تبدیل 5 حالت تعیین شده به عدد ، به راحتی می توان شرط کم ارزش بودن را با 2=> و شرط کم ارزش نبودن را با 3=< اعمال نمود .
    در آخر برنامه هم حالت مربوط به خروجی چاپ می شود .
    قبل از شرط if ، من مقدار output رو برابر صفر گذاشتم . حالت های مختلف رو برای ورودی ها امتحان کنید و نتیجه رو ببینید .
    bookbook 
    لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
    در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
    کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
    پاسخ
     سپاس شده توسط zahra

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

    #3
    سلام جناب ادمین
    واقعیت اینکه منم این مشکل و دارم اما متوجه نمیشم منظورتون رو

    من دو ورودی دارم همون طور که بالا گفته شد
    ورودی اول من شامل 4حالته (کوچک-متوسط-بزرگ-خیلی بزرگ)
    ورودی دوم من هم همینطر 4 حالت داره

    یکی از قوانین من این و میگه:
    if input1=means and input2=small then output=means

    حالا من دو تا سول دارم
    چجوری میتونم ورودی اول و که 4 تا وروودی توی input1 تعریف کنیم

    کد:
    %%INPUT 1
    x1=0:10:800; small=trimf(x1,[1 1 800]);
    x2=0:10:1000; means=trimf(x2,[0 800 1000]);
    x3=700:10:1200; large=trimf(x3,[800 1000 1200]);
    x4=900:10:1300; verylarge=trimf(x4,[1000 1300 1300]);

    %% input2
    a1=0:0.1:36; b1=trimf(a1,[10 10 35.85]);
    a2=0:0.1:44; b2=trimf(a2,[10 35.85 43.92]);
    a3=10:0.1:53; b3=trimf(a3,[35.85 43.92 52]);
    a4=10:0.1:53; b4=trimf(a4,[43.92 52 52]);




    %% output
    z1=0:0.01:0.7; k1=trimf(z1,[0.3 0.3 0.5045]);
    z2=0:0.01:0.7; k2=trimf(z2,[0.3 0.5045 0.5273]);
    z3=0:0.01:0.7; k3=trimf(z3,[0.45 0.55 0.65]);
    z4=0:0.01:0.7; k4=trimf(z4,[0.5273 0.55 0.55]);

    قانون رو چجوری میتونم تعریف کنم توی mfile?

    Huh
    پاسخ

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

    #4
    سلام .
    اون نوشته من برای زمانی هست که نخواهیم از توابع متلب استفاده کنیم . اما روش اصلی در متلب برای منطق فازی به این صورت هست که ابتدا یک فایل fis می سازید و سپس قوانین رو برای اون تعریف می کنید .
    تعدادی از دستورات مرتبط با این موضوع عبارتند از :

    getfis
    newfis
    addrule
    addvar
    addmf
    evalfis

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

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

    #5
    تقریبا متوجه شدم

    و برای داشتن فایل fis خوب راهای راحت تری هست که با خود نرم افزار فازی در متلب میشه انجام داد

    من نیاز به کد نویسی دارم
    یه mfile باید بنویسم

    اینجوری میتونید کمکم کنید؟

    Undecided
    پاسخ

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

    #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 کرده و از مدیران انتظار بررسی داشته باشند.
    پاسخ

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

    #7
    کد (ام فایل) مربوط به این مثال fuzzy tipper رو چه جوری میشه تو متلب آورد و دید؟
    پاسخ

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

    #8
    برای یک fis ، اگر آن را ذخیره کنیم، فایلی با پسوند fis ساخته می شود، بنابراین m-file نیست که بتوانید کدها را به صورت معمولی ببینید.
    برای ساخت فایل fis ، از دستور writefis و برای خواندن آن، از دستور readfis در متلب استفاده می شود. دستور readfis اطلاعات کلی مروبط به fis را به شما می دهد.
    در ضمن، اگر می خواهید پنجره FIS Editor در نرم افزار متلب باز شود، دستور زیر را اجرا کنید :

    کد:
    fuzzy

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

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

    #9
    یعنی کدی که بالا نوشتید ماله خود تولباکس نیست و خودتون نوشتید؟
    پاسخ

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

    #10
    (۱۳۹۲/۱۲/۲۷, ۱۰:۵۴ ق.ظ)'mobinesmaeili' نوشته: یعنی کدی که بالا نوشتید ماله خود تولباکس نیست و خودتون نوشتید؟

     


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

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

    #11
    سلام اگه میشه یکی به سوالم خیلی سریع پاسخ بده ..ممنون میشم
    تو همین نوشتن قوانین فازی با این دستورات من میخوام تو توابع عضویت بجای عدد متغیر بذارم
    مثل این
    'trapmf',[0 0 mid-d mid+d]


    ولی نمیدونم چیکاکنم؟ موضوع پروژم تشخیص لبه با منطق فازی
    clear all
    close all
    clc

    a=newfis('CFED');

    a=addvar(a,'input','input1',[0 255]);
    a=addmf(a,'input',1,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',1,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',1)

    a=addvar(a,'input','input2',[0 255]);
    a=addmf(a,'input',2,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',2,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',2)

    a=addvar(a,'input','input3',[0 255]);
    a=addmf(a,'input',3,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',3,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',3)

    a=addvar(a,'input','input4',[0 255]);
    a=addmf(a,'input',4,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',4,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',4)

    a=addvar(a,'input','input5',[0 255]);
    a=addmf(a,'input',5,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',5,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',5)

    a=addvar(a,'input','input6',[0 255]);
    a=addmf(a,'input',6,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',6,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',6)

    a=addvar(a,'input','input7',[0 255]);
    a=addmf(a,'input',7,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',7,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',7)

    a=addvar(a,'input','input8',[0 255]);
    a=addmf(a,'input',8,'white','trapmf',[0 0 mid+d mid-d]);
    a=addmf(a,'input',8,'black','trapmf',[0 0 mid+d mid-d]);
    figure
    plotmf(a,'input',8)


    a=addvar(a,'output','Output',[0 255]);
    a=addmf(a,'output',1,'Edge','trimf',[247 251 255]);
    a=addmf(a,'output',1,'notEdge','trimf',[247 251 255]);
    figure
    plotmf(a,'output',1)

    %gesmate ghavanine fuzzy ke 8taye aval vorudi badi khuruji badi weight badi
    %ghanun be surate and ya or (AND=1 va OR=2)
    ruleList=[ ...
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1 1 1 1
    ];
    a=addrule(a,ruleList);

    out=evalfis([1 1 1 1 1 1 1 1],a)
     
    پاسخ


    پرش به انجمن:


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

    آخرین کلیدهای غیررایگان

    شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)