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

آموزش های ارائه شده توسط محسن رضایی (دکتری مکانیک، مشاورصنعتی و طراح ماشین آلات، مکانیزم ها و سازهای مکانیکی)

برنامه نویسی و محاسباتنرم افزار متلب

آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار 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

  • seven

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

    پاسخ دادن
  • حسین

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

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

      پاسخ دادن
  • محمدی

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

    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 تابع آنها چیست. درصد ترکیب و جهش چقدر است ؟ (لطفا راهنمایی کامل را به ایمیلم بفرستید)

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

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

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

      پاسخ دادن
  • مهدی

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

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

      پاسخ دادن
  • یاسی

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

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

      پاسخ دادن
  • لیلا

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

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

      پاسخ دادن
  • مهدی

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

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

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

    پاسخ دادن
  • safafr

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

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

      پاسخ دادن
  • alijokar

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

    پاسخ دادن
  • سهیل

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

    پاسخ دادن

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

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