آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab

 

 

آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab

آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab

آموزش بهینه سازی به کمک الگوریتم ژنتیک  : در این پست توضیحاتی راجع به بهینه سازی در نرم افزار MATLAB به کمک تولباکس الگوریتم ژنتیک GATOOL آموزش داده شده است. همونطور که میدونید در هر مسئله ی بهینه سازی ما با یک یا چند تابع هدف و چند قید خطی یا غیر خطی مواجه هستیم. برای مثال یک مسئله بهینه سازی به صورت زیر است.

آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab

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

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

function f = objecfun(x)
f = x(1)^2 + x(2)^2

بعد از نوشتن تابع اصلی قیدهای غیر خطی به صورت توابع برداری بنویسید به عبارتی هر قید

function [c,ceq] = nonlconstr(x)
c = [-x(1)^2 – x(2)^2 + 1;
-9*x(1)^2 – x(2)^2 + 9;
-x(1)^2 + x(2);
-x(2)^2 + x(1)];
ceq = [];

سپس فایل را به اسم تابعی که نوشته اید ذخیره کنید.

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

x(1)^2+2*Sin(x(x))>=5

قید فوق را به صورت زیر تبدیل میکنید.که به شکل استاندارد در بیاید.

-x(1)^2-2*Sin(x(x))+5<=0

پس از نوشتن توابع با نوشتن gatool در پنجره دستورات مطلب به سراغ تولباکس الگوریتم ژنتیک میرویم و پارامترها را مانند شکل زیر تنظیم میکنیم.

آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab

آموزش بهینه سازی به کمک الگوریتم ژنتیک

در صورت داشتن هرگونه سوال در مورد بهینه سازی با تولباکس مطلب یا کدنویسی بهینه سازی به صورت مجزا با الگوریتم های ژنتیکGA، زنبور عسل BA، ازدحام ذرات PSO و الگوریتم های تکاملی EA و EP ، در خواست پروژه مشابه یا هر الگوریتم بهینه سازی دیگری میتوانید با ایمیل مدیر سایت که درارتباط با ما نوشته شده است تماس حاصل نمایید .

 

 

محسن رضایی

دکتری مهندسی مکانیک گرایش دینامیک کنترل و ارتعاشات دانشگاه شیراز زمینه های تحقیقاتی: دینامیک، کنترل، ارتعاشات، دینامیک پرواز، دینامیک خودرو، آیروالاستیسته، بهینه سازی زمینه های کاری صنعتی: طراحی مکانیزم های خطوط تولید،طراحی جرثقیل ها،طراحی ماشین الات صنعتی،بررسی عیوب و بهینه سازی ماشین الات صنعتی نرم افزارهای مسلط: متلب-سیمولینک- سیم مکانیک-انسیس - انسیس ورکبنچ-آدامز-سالیدورکس-آباکوس تلفن تماس: 09369074440 ایمیل : mechanic.soft[at]yahoo.com , info[at]mechanicsoft.ir نوشته‌های تازه

18 thoughts on “آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab

  • فوریه 29, 2016 در t 11:41 ق.ظ
    Permalink

    با سلام و خسته نباشید
    خیلی عالی بود
    امکانش هست در مورد بهینه سازی با روش الگوریتم بیگ- بنگ هم توضیح یا آموزشی قرار دهید؟

    پاسخ دادن
  • ژوئن 28, 2016 در t 3:05 ب.ظ
    Permalink

    سلام
    عالی بود اما در هنگام اجرا خطای پایین رو میده
    Optimization running.
    Error running optimization.
    CAT arguments dimensions are not consistent.

    پاسخ دادن
    • ژوئن 29, 2016 در t 9:41 ق.ظ
      Permalink

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

      پاسخ دادن
  • آگوست 6, 2016 در t 11:06 ب.ظ
    Permalink

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

    1- در برنامه شبیه سازی من ، تنظیمات همگرایی الگوریتم ژنتیک طی دستورات زیر
    اعمال‌شده است:

    options = gaoptimset;

    options = gaoptimset(options,’SelectionFcn’, @selectionstochunif);

    options = gaoptimset(options,’Display’, ‘off’);

    options = gaoptimset(options,’PlotFcns’, { @gaplotbestf });

    options = gaoptimset(options,’PopulationSize’,50);

    options = gaoptimset(options,’Generations’,100);

    options = gaoptimset(options,’TolFun’,0.001);

    options = gaoptimset(options,’TolCon’,0.001);

    options = gaoptimset(options,’StallGenLimit’,50);

    options = gaoptimset(options,’StallTimeLimit’,1000);

    در این optionها ، عملگرهای ترکیب(Crossover) وجهش(Mutation) دیده نمی
    شود. برنامه نویس گفته که بغیر از optionهای بالا بقیه پارامترها ی موجود
    در الگوریتم ژنتیک، همان مقادیر پیش فرض،جعبه ابزار الگوریتم ژنتیک نرم
    افزار متلب می باشد.

    من می خواهم که ، مقدار عملگرهای ترکیب(Crossover) وجهش(Mutation) را مشخص کنم.

    برداشت خود من از کد ژنتیک در بالا این است که :

    اگه gatool را در matlab2014 باز کنیم در این تولباکس پیش فرض هاش مشخصه
    چون در آپشن های موجود در کد من اندازه جمعیت ما 50 است پس بنا به
    PopulationSize جمعیت اولیه ما 50 تاست. لذا بنا به پیش فرض MATLAB2014

    1-چون بنا به پیش فرض MATLAB2014 تعدادنخبگان 0.05 از جمعیت اولیه
    است.پس EliteCountمیشه 2.5
    2-تعداد فرزندانی که از طریق ترکیب به نسل بعد میرودبنا به پیش فرض
    MATLAB2014 برابر 0.8 یا 80% جمعیت باقی مانده از تابع EliteCount است.
    یعنی برابر با 38 تاست.
    3-تعداد فرزندانی که از طریق جهش به نسل بعد میرودبرابر با جمعیت باقی
    مانده از توابع EliteCount و Crossover است. یعنی برابر با 9.5
    لطفا وخواهشا به نظر شما آیا برداشت من از کد ژنتیکم صحیح است؟

    سوال دوم:

    تابع پیش فرض ترکیب و جهش در MATLAB2014 تابع constraint
    dependent است.که من نمی دانم این تابع چکار می کند ؟استاد لطفا وخواهشا
    کار این تابع پیش فرض را برای ترکیب وجهش بلد نیستم از شما خواهشمندم که لطفا
    وخواهشا در این مورد راهنماییم کنید.تابع پیش فرض fitness scaling هم RANKاست. اگه در تنظیم پارامترهای ژنتیک در داخل ام فایل ژنتیک ما فقط اندازه جمعیت و نسل را مشخص کنیم.و به دیگر تنظیمات GATOOL دست نزنیم و برنامه را ران کنیم .لطفا بگید که در این حالت ترکیب و جهش و fitness scaling تابع آنها چیست. درصد ترکیب و جهش چقدر است ؟ (لطفا راهنمایی کامل را به ایمیلم بفرستید)

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

    پاسخ دادن
    • اکتبر 8, 2016 در t 6:59 ب.ظ
      Permalink

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

      پاسخ دادن
    • ژانویه 26, 2017 در t 12:38 ب.ظ
      Permalink

      با سلام. شما میتونید تنظیمات مربوط به جهش و کراس اور رو توی خود تولباکس اعمال کنید وبهینه سازی روانجام بدین. سپس در قسمت ایمپیورت کردن کد مربطه رو استخراج کنید. توی کد خودش تنظیماتی که شما توی تولباکس انجام دادین رو انجام داده. در ضمن در خصوص constrint dependent این یه روش هوشمند هست که عملیات کراس اور و جهش و … رو بر اساس الگوریتمی خاص انجام میده. و در جاهای خاصی هم جوابها رو بهتر میکنه اما روش رندوم نس ژنتیک رو به سمت دیترمینستیک میبره و این کار باعث میشه که الگوریتم بیشتر توی لوکال ها بیفته. پیشنهاد من این هست که با توجه به شرایط مسئله تون این پارامترها رو تغییر بدین تا به مقدار دلخواهتون برسید.

      پاسخ دادن
  • سپتامبر 28, 2016 در t 11:04 ق.ظ
    Permalink

    سلام
    ممنون از توضیحات بسیار خوب تون
    فقط یک سوال دارم
    قید تساوی غیرخطی رو باید چطور اعمال کرد؟؟؟؟
    مثلا X(6)-X(3)*X(4)=0.

    پاسخ دادن
    • سپتامبر 29, 2016 در t 11:07 ق.ظ
      Permalink

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

      پاسخ دادن
  • اکتبر 19, 2016 در t 12:02 ب.ظ
    Permalink

    سلام
    من در مورد اتنخاب ویژگی داده های بزرگ با استفاده از ترکیب الگوریتم های ژنتیک و pso میخواستم کار کنم.
    کلی مطلب در مورد اتخاب ویژگی داده های بزرگ خوندم. همچنین در مورد این دو الگوریتم هم مطالعه کردم.میخام با مطلب پیاده سازی کنم.
    اما نمی دونم چطور پیاده سازی کنم. نیاز به راهنمایی دارم
    ممنون میشم راهنماییم کنید

    پاسخ دادن
    • ژانویه 26, 2017 در t 12:34 ب.ظ
      Permalink

      سلام. خوب شما باید با هر دور الگوریتم آشنایی کامل داشته باشید .و بر اساس الگوریتم ها توی نرم افزار متلب کد نویسی کنید. اگه سوالی جزئی تر دارین بفرمایید تا راهنماییتون کنم.
      موفق باشید.

      پاسخ دادن
  • دسامبر 2, 2016 در t 3:56 ب.ظ
    Permalink

    سلام
    من تو نوشتن الگوریتم ژنتیک و تبرید مشکل دارم میخواستم ببینم همه مراحل مث ترکیب جهش و بقیه رو تو یک اسکریپت بنویسم و اجرا کنم؟اصلا نمیدونم باید از کجا شروع کنم

    پاسخ دادن
    • ژانویه 26, 2017 در t 12:31 ب.ظ
      Permalink

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

      پاسخ دادن
  • دسامبر 23, 2016 در t 1:30 ب.ظ
    Permalink

    با سلام
    اگر امکانش هست پاسخی که به
    محمدی
    مرداد ۱۶, ۱۳۹۵ در۱۱:۰۶ ب.ظ

    داده شده را به من نیز بفرمایید.

    باتشکر و سپاس فراوان از شما و سایت خوب تان

    پاسخ دادن
  • دسامبر 26, 2017 در t 10:46 ب.ظ
    Permalink

    سلام
    در سیمولینک متلب اس فانکشن تعدادی معادلات دیفرانسیلی دارم که داره حل میشه . اما در قستی از کد 7 پارامتر دارم که به فرم زیر هست . میخوام ظرایب آ و ب را بهینه کنم. طوری که جواب معادلات دیفرانسیل من به اون چیزی که میخوان برسه .
    ((k11(i)=A*exp(-B/(R*T(i
    چه راهی را پیشنهاد میدید؟

    پاسخ دادن
    • ژانویه 1, 2018 در t 11:22 ب.ظ
      Permalink

      با سلام.
      به این شکل نمیتونید از تولباکس استفاده کنید. بهتر است به جای تولباکس کد ژنتیک رو در اس فانکشن مورد نظرتون بنویسید.

      پاسخ دادن
  • اکتبر 10, 2018 در t 9:48 ب.ظ
    Permalink

    سلام. برای الگوریتم ژنتیک زمانی که دو هدف داشته باشیم قید نامساوی دوم چطور باید نوشته باشه مثلا برای بازه ی ولتاژ که بین دو مقدار قرار باید داشته باشه

    پاسخ دادن
  • نوامبر 4, 2018 در t 1:27 ق.ظ
    Permalink

    سلام آقای رضایی در مورد تابع دو هدفه با پنج متغیر ازتون سوال داشتم

    پاسخ دادن

دیدگاهتان را بنویسید

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