آموزش الگوریتم ژنتیک در متلب با مثال GA
تعریف مسئله و اجرای الگوریتم ژنتیک در MATLAB با تابع ga؛ مثال دو متغیره، حدود متغیرها و بررسی تکرارپذیری نتایج.
پیش از الگوریتم، مسئله را بنویس
در این تمرین میخواهیم مقدار تابع (x₁−۲)²+(x₂+۱)² را در بازه منفی پنج تا پنج برای هر دو متغیر کمینه کنیم. هر دو جمله نامنفیاند، پس میدانیم جواب تحلیلی در x₁=۲ و x₂=−۱ است و مقدار کمینه صفر میشود. داشتن این جواب معلوم کمک میکند اجرای آموزشی الگوریتم را کنترل کنیم.
برای چنین تابع سادهای به الگوریتم پیچیده نیاز نداریم؛ هدف مثال، فهمیدن ورودیها و خروجیهای ga است. بعد از این تمرین میتوانی همان چارچوب را برای تابع هدفی به کار ببری که شکل تحلیلی ساده ندارد.
کد مثال با Global Optimization Toolbox
rng(9);
objective = @(x) (x(1)-2)^2 + (x(2)+1)^2;
lower = [-5 -5];
upper = [5 5];
options = optimoptions('ga','Display','off');
[xBest,fBest,exitFlag,details] = ga( ...
objective,2,[],[],[],[],lower,upper,[],options);
disp(xBest);
disp(fBest);
disp(exitFlag);
disp(details.message);عدد ۲ تعداد متغیرهای تصمیم است. آرایههای خالی، جای محدودیتهایی را نگه میدارند که در این مثال نداریم. کران پایین و بالا برای هر متغیر مشخص شدهاند. تنظیم بذر تصادفی برای ثبت شرایط همین آزمایش مفید است؛ نتیجه عددی دقیق میتواند با نسخه و تنظیمات محیط تفاوت داشته باشد.
چرا فقط xBest را نگاه نکنیم؟
- fBest میگوید تابع هدف در نقطه گزارششده چقدر است.
- exitFlag و پیام توقف توضیح میدهند الگوریتم به چه دلیل پایان یافته است.
- برای مسئله دارای قید، باید نقض قیدها را جداگانه بررسی کنی.
- در این مثال، فاصله جواب از [۲،−۱] و فاصله مقدار هدف از صفر، کنترلهای روشنی هستند.
آزمایش تصادفی را چگونه گزارش کنیم؟
یک بار اجرا برای قضاوت کلی کافی نیست. چند بذر متفاوت را امتحان کن و نتیجه، تعداد ارزیابی تابع و زمان را ثبت کن. اگر هزینه هر ارزیابی زیاد باشد، افزایش جمعیت یا تعداد نسلها میتواند اجرای مسئله را سنگین کند. بهتر است پیش از یک جستوجوی پرهزینه، تابع هدف و حدود را روی مثال کوچک بررسی کنی.
وقتی خروجی ضعیف است، فقط تعداد نسلها را بیشتر نکن. ممکن است واحد متغیرها نامناسب باشد، محدودیتها نادرست نوشته شده باشند یا تابع هدف به چیزی حساس باشد که در تعریف مسئله در نظر نگرفتهای.
انتخاب GA را با جایگزینها مقایسه کن
GA یکی از گزینههای جستوجو است، نه ضمانت یافتن بهترین جواب جهانی هر مسئله. برای تابعهای هموار و ساده، حلگر دیگری ممکن است کمهزینهتر باشد. برای انتخاب روشنتر، راهنمای عمومی بهینهسازی در متلب را بخوان و نوع تابع، قیود و هزینه محاسباتی را مشخص کن.
تمرین بعدی
به تابع هدف ضریبهای متفاوت بده: مثلاً جمله اول را صد برابر کن. قبل از اجرا، پیشبینی کن نقطه کمینه تغییر میکند یا فقط شکل سطح عوض میشود. سپس با اضافهکردن یک محدودیت واقعی، معنی «بهترین جواب مجاز» را بررسی کن. چنین آزمایشهایی کمک میکنند الگوریتم را به مسئله خودت وصل کنی.
دوره مرتبط: آموزش متلب از مقدماتی تا پیشرفته