آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab
آموزش بهینه سازی به کمک الگوریتم ژنتیک در نرم افزار Matlab
آموزش بهینه سازی به کمک الگوریتم ژنتیک : در این پست توضیحاتی راجع به بهینه سازی در نرم افزار MATLAB به کمک تولباکس الگوریتم ژنتیک GATOOL آموزش داده شده است. همونطور که میدونید در هر مسئله ی بهینه سازی ما با یک یا چند تابع هدف و چند قید خطی یا غیر خطی مواجه هستیم. برای مثال یک مسئله بهینه سازی به صورت زیر است.
اولین گام در حل این مسئله این است که دو تابع به یکی برای معادله اصلی بهینه سازی و دیگری برای قیدهای غیر خطی بنویسید این توابع را جداگانه در ام فایل های متفاوت ساخته و در دایرکتوری اصلی مطلب ذخیره کنید.
تابع اصلی که قرار است بهینه سازی شود.به صورت زیر نوشته ذخیره میکنید. توجه کنید هر اسمی را که برای تابع استفاده کردید. در هنگام ذخیره ام فایل مربوطه باید به همان اسم ذخیره شود . مثلا ما در اینجا نام تابع را 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 در پنجره دستورات مطلب به سراغ تولباکس الگوریتم ژنتیک میرویم و پارامترها را مانند شکل زیر تنظیم میکنیم.
آموزش بهینه سازی به کمک الگوریتم ژنتیک
در صورت داشتن هرگونه سوال در مورد بهینه سازی با تولباکس مطلب یا کدنویسی بهینه سازی به صورت مجزا با الگوریتم های ژنتیکGA، زنبور عسل BA، ازدحام ذرات PSO و الگوریتم های تکاملی EA و EP ، در خواست پروژه مشابه یا هر الگوریتم بهینه سازی دیگری میتوانید با ایمیل مدیر سایت که درارتباط با ما نوشته شده است تماس حاصل نمایید .
با سلام و خسته نباشید
خیلی عالی بود
امکانش هست در مورد بهینه سازی با روش الگوریتم بیگ- بنگ هم توضیح یا آموزشی قرار دهید؟
سلام
عالی بود اما در هنگام اجرا خطای پایین رو میده
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 میخواستم کار کنم.
کلی مطلب در مورد اتخاب ویژگی داده های بزرگ خوندم. همچنین در مورد این دو الگوریتم هم مطالعه کردم.میخام با مطلب پیاده سازی کنم.
اما نمی دونم چطور پیاده سازی کنم. نیاز به راهنمایی دارم
ممنون میشم راهنماییم کنید
سلام. خوب شما باید با هر دور الگوریتم آشنایی کامل داشته باشید .و بر اساس الگوریتم ها توی نرم افزار متلب کد نویسی کنید. اگه سوالی جزئی تر دارین بفرمایید تا راهنماییتون کنم.
موفق باشید.
سلام
من تو نوشتن الگوریتم ژنتیک و تبرید مشکل دارم میخواستم ببینم همه مراحل مث ترکیب جهش و بقیه رو تو یک اسکریپت بنویسم و اجرا کنم؟اصلا نمیدونم باید از کجا شروع کنم
با سلام. شما در بهینه سازی به کمک تولباکس ژنتیک لزمی نداره برای جهش و کراس اور و بقیه تنظیمات الگوریتم ژنتیک کدی بنویسید. شما فقط و فقط باید تابع هدفتون مشخص بشه. اابته اگه قید نا متعارفی داشته باشین از روش پنالتی توی تابع هدف بگنجونید. وگرنه قیود متعارف و همچنین کلیه قسمت های مربوط به ژنتیک رو تولباکس انجام میده.
موفق باشید.
با سلام
اگر امکانش هست پاسخی که به
محمدی
مرداد ۱۶, ۱۳۹۵ در۱۱:۰۶ ب.ظ
داده شده را به من نیز بفرمایید.
باتشکر و سپاس فراوان از شما و سایت خوب تان
پاسخ داده شد. مطالعه بفرمایید.
موفق باشید.
سلام
در سیمولینک متلب اس فانکشن تعدادی معادلات دیفرانسیلی دارم که داره حل میشه . اما در قستی از کد 7 پارامتر دارم که به فرم زیر هست . میخوام ظرایب آ و ب را بهینه کنم. طوری که جواب معادلات دیفرانسیل من به اون چیزی که میخوان برسه .
((k11(i)=A*exp(-B/(R*T(i
چه راهی را پیشنهاد میدید؟
با سلام.
به این شکل نمیتونید از تولباکس استفاده کنید. بهتر است به جای تولباکس کد ژنتیک رو در اس فانکشن مورد نظرتون بنویسید.
سلام. برای الگوریتم ژنتیک زمانی که دو هدف داشته باشیم قید نامساوی دوم چطور باید نوشته باشه مثلا برای بازه ی ولتاژ که بین دو مقدار قرار باید داشته باشه
سلام آقای رضایی در مورد تابع دو هدفه با پنج متغیر ازتون سوال داشتم