فراخوانی الگوریتم ژنتیک در متلب *

     در آموزش قبل با عنوان آموزش استفاده از الگوریتم ژنتیک در متلب (gatool یا optimtool) نحوه استفاده از الگوریتم ژنتیک توسط تولباکس یا جعبه‌افزار مخصوص الگوریتم ژنتیک یا همان gatool یا optimtool را آموزش دادیم. این تولباکس می‌تواند برای حل مسایل بهینه‌سازی توسط الگوریتم ژنتیک استفاده گردد. در این صورت اجرای الگوریتم ژنتیک برای یک مساله خاص به صورت مستقل توسط این تولباکس راحت است. ولی گاهی اوقات قصد داریم تا از الگوریتم ژنتیک به صورت کدنویسی استفاده کنیم.در این صورت است که می‌توانیم از الگوریتم ژنتیک در میان کدهای یک برنامه خاص متلب استفاده کنیم، به طوریکه بهینه‌سازی توسط کد الگوریتم ژنتیک، قسمتی از کد یک برنامه دیگر باشد. برای این کار مجبور هستیم تا الگوریتم ژنتیک را به صورت کد وارد برنامه‌مان کنیم. علاوه بر این استفاده از الگوریتم ژنتیک در متلب به صورت کد، می‌تواند اجراهای چندباره از این روش بهینه‌سازی را آسان سازد. زیرا که تنها با یکبار نوشتن کد فراخوانی الگوریتم ژنتیک و ذخیره آن کد به صورت M-File، می‌توانیم در استفاده‌های بعدی نیز از این کد برای حل این مساله خاص بهره ببریم. حال آنکه در استفاده از تولباکس gatool یا optimtool، پس از اجرای بهینه‌سازی و خارج‌شدن از تولباکس برای استفاده‌‌های بعدی بایستی تنظیمات الگوریتم ژنتیک و قیود مساله را دوباره انجام دهیم. بنابراین در این مقاله از الکاران بر آن شدیم که نحوه فراخوانی الگوریتم ژنتیک در متلب را آموزش دهیم.

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

     خب! کد کلی فراخوانی الگوریتم ژنتیک در متلب به صورت زیر است:

[x,fval]=ga(@elecaranfun,2,Aineq,bineq,Aeq,beq,lb,ub,@nonlfun,options);

دستوری که برای فراخوانی الگوریتم ژنتیک به کار می‌گیریم دستور ga است که آرگومان یا اعضای متفاوتی در داخل پرانتز را برای اجرا می‌طلبد. در نهایت نیز دو مقدار را به عنوان خروجی می‌دهد (البته خروجی‌های زیادی را می‌توان گرفت ولی برای بهینه‌سازی‌های مرسوم دو خروجی کافی است). این دو خروجی یکی مختصات نقطه بهینه (x) و دیگری مقدار تابع هدف را در آن نقطه بهینه (fval) مشخص می‌کند. برای ابتدای کار یکبار دیگر مثالی که توسط الگوریتم ژنتیک آن را بهینه‌سازی می‌نماییم در این قسمت یادآوری می‌کنیم:

تابع هدف ما در این مثال تابع ساده زیر است:

Min      F=x۱+۳x۲                                              (۱)

قیود روی متغیرها نیز به صورت زیر هستند:

x۱+x۲ <= 2                                                             (۲)

-x۱+۲x۲ <= 2                                                          (۳)

۲x۱+x۲ <= 3                                                            (۴)

x۱+۲x۲ = -۵                                                             (۵)

۳x۱+۴x۲ = -۱۰                                                          (۶)

-۱۰<=x۱<=10                                                           (۷)

-۵<=x۱<=15                                                             (۸)

آرگومان‌ها یا ورودی‌های دستور ga به صورت زیر تعریف می‌شوند:

قسمت اول: نام فانکشن متلب (function) که تابع هدف در آن تعریف شده است، به همراه علامت @ در این قسمت نوشته می‌شود. در این مثال تابع هدفمان همان تابع F هست. این تابع بایستی به صورت یک تابع متلب تعریف گردد. برای این کار یک کد ساده برای این کار به صورت زیر می‌نویسیم:

function result=elecaranfun(x)
result=x(1)+3*x(2);
end

این تابع را به هر اسم دلخواهی به عنوان فایل جداگانه‌ای ذخیره می‌کنیم. فقط باید اسم تابع در داخل کد قسمت آبی‌رنگ و اسمی که کد را به آن ذخیره می‌کنیم، همنام باشند. ما این کد را به اسم elecaranfun ذخیره می‌کنیم. سپس در تابع ga در قسمت اول همراه با علامت @ به صورت elecaranfun@ می‌نویسیم.

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

قسمت دوم: در این قسمت بایستی تعداد متغیرهای مساله را وارد می‌کنیم. در مثالمان چون ما دو متغیر x۱ و x۲ را داریم، عدد ۲ را وارد می‌کنیم.

قسمت سوم و چهارم: در قسمت سوم نام ماتریس ضریب قیود خطی نامساوی مساله را می‌نویسیم. ما در اینجا نام تابع را با Aineq تعریف می‌کنیم. در قسمت چهارم نیز نام ماتریس ثابت قیود خطی نامساوی یا همان bineq را وارد می‌کنیم. با توجه به قیود نامسای خطی در روابط ۲ تا ۴ مثال بالا، ماتریس‌های Aineq و bineq به صورت زیر تعریف می‌شوند:

آموزش استفاده از الگوریتم ژنتیک در متلبAineqX<=bineq

این ماتریس‌ها را به صورت زیر قبل از دستور ga و در بالای آن تعریف می‌کنیم:

Aineq=[1 1;-1 2;2 1];
bineq=[2;2;3];

قسمت پنجم و ششم: در قسمت پنجم نام ماتریس ضریب قیود خطی مساوی مساله را می‌نویسیم. ما در اینجا نام تابع را با Aeq تعریف می‌کنیم. در قسمت چهارم نیز نام ماتریس ثابت قیود خطی نامساوی یا همان beq را وارد می‌کنیم. با توجه به قیود نامسای خطی در روابط ۵ و ۶ مثال بالا، ماتریس‌های Aeq و beq به صورت زیر تعریف می‌شوند:

AeqX=beq

این ماتریس‌ها را نیز به صورت زیر قبل از دستور ga و در بالای آن تعریف می‌کنیم:

Aeq=[1 2;3 4];
beq=[-5 -10];

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

قسمت هفتم و هشتم: در قسمت هفتم نام ماتریس مقادیر کران پایین متغیرها را می‌نویسیم. در قسمت هشتم نیز نام ماتریس مقادیر کران بالای متغیرها را می‌نویسیم. این ماتریس ها با توجه به روابط ۷ و ۸ به صورت زیر تعریف می‌شوند.

این ماتریس‌ها را نیز به صورت زیر قبل از دستور ga و در بالای آن تعریف می‌کنیم:

lb=[-10;-5];
ub=[10;15];

قسمت نهم و دهم: در قسمت نهم و دهم به ترتیب نام تابع متلب تعریف‌کننده قیود غیرخطی و نام متغیر تنظیمات اجرای متلب وارد می‌گردد. این قسمت‌ها در مقاله‌ای دیگر توضیح داده خواهد شد. در این مثال ما قیود غیرخطی نداریم. همچنین تنظیمات اجرای متلب را همان تنظیمات پیش‌فرض قرار می‌دهیم. بنابراین می‌توان این قسمت را با ماتریس خالی جایگذاری کنیم.

تمام کد فراخوانی الگوریتم ژنتیک در متلب برای این مثال به صورت زیر خواهد بود. کد متلب فراخوانی الگوریتم ژنتیک و همچنین کد تعریف تابع هدف در کنار هم را می‌توانید از اینجا دانلود کنید. (پسورد فایل: www.elecaran.ir)

Aineq=[1 1;-1 2;2 1];
bineq=[2;2;3];
Aeq=[1 2;3 4];
beq=[-5 -10];
lb=[-10;-5];
ub=[10;15];
[x,fval]=ga(@elecaranfun,2,Aineq,bineq,Aeq,beq,lb,ub,[],[]);disp([‘x1=’ num2str(x(1))])
disp([‘x2=’ num2str(x(2))])
disp([‘Fitness value=’ num2str(fval)])

سه خط آخر، نتایج اجرای الگوریتم ژنتیک را نمایش می‌دهند.

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

x1=0.0029995
x2=-2.502
Fitness value=-7.503

که مقادیر مجهولات و همچنین مقدار تابع هدف در این نقطه را نشان می‌دهد. این نتایج با نتایج حاصل از اجرای الگوریتم ژنتیک توسط تولباکس gatool یا optimtool که در این مقاله آمده است، یکسان است. حال می‌توانید این کد را نگه دارید، تغییرات بدهید، یا در کنار دیگر کدها استفاده کنید. در مقالات بعدی دیگر قسمت‌های کدنویسی الگوریتم ژنتیک را در متلب توضیح خواهیم داد.

پسورد فایل: www.elecaran.ir

امیدواریم از این مقاله الکاران نیز راضی باشید. با نظرات خود ما را در توسعه مطالب سایت یاری دهید.

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

9 thoughts on “فراخوانی الگوریتم ژنتیک در متلب

    1. سلام
      خوشحالیم که این آموزش براتون مفید بوده.
      حتما. در زمینه الگوریتم های بهینه سازی نظیر الگوریتم ژنتیک، آموزش های بیشتری روی سایت خواهد آمد.

    1. ممنون.
      خوشحالیم که مطالب این مقاله براتون مفید بوده. پیشنهاد شما در توسعه این مقاله و مطالب بعدی سایت مدنظر قرار می‌گیرد.

پاسخ دهید

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