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

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

  • اسفند ۱۰, ۱۳۹۴ در۱۱:۴۱ ق.ظ
    پیوند یکتا

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

    پاسخ
  • تیر ۸, ۱۳۹۵ در۳:۰۵ ب.ظ
    پیوند یکتا

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

    پاسخ
    • تیر ۹, ۱۳۹۵ در۹:۴۱ ق.ظ
      پیوند یکتا

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

      پاسخ
  • مرداد ۱۶, ۱۳۹۵ در۱۱:۰۶ ب.ظ
    پیوند یکتا

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

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

    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 باز کنیم در این تولباکس پیش فرض هاش مشخصه
    چون در آپشن های موجود در کد من اندازه جمعیت ما ۵۰ است پس بنا به
    PopulationSize جمعیت اولیه ما ۵۰ تاست. لذا بنا به پیش فرض MATLAB2014

    ۱-چون بنا به پیش فرض MATLAB2014 تعدادنخبگان ۰٫۰۵ از جمعیت اولیه
    است.پس EliteCountمیشه ۲٫۵
    ۲-تعداد فرزندانی که از طریق ترکیب به نسل بعد میرودبنا به پیش فرض
    MATLAB2014 برابر ۰٫۸ یا ۸۰% جمعیت باقی مانده از تابع EliteCount است.
    یعنی برابر با ۳۸ تاست.
    ۳-تعداد فرزندانی که از طریق جهش به نسل بعد میرودبرابر با جمعیت باقی
    مانده از توابع EliteCount و Crossover است. یعنی برابر با ۹٫۵
    لطفا وخواهشا به نظر شما آیا برداشت من از کد ژنتیکم صحیح است؟

    سوال دوم:

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

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

    پاسخ
    • مهر ۱۷, ۱۳۹۵ در۶:۵۹ ب.ظ
      پیوند یکتا

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

      پاسخ
  • مهر ۷, ۱۳۹۵ در۱۱:۰۴ ق.ظ
    پیوند یکتا

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

    پاسخ
    • مهر ۸, ۱۳۹۵ در۱۱:۰۷ ق.ظ
      پیوند یکتا

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

      پاسخ

پاسخ دهید

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