نحوه كد نويسي الگوريتم ژنتيك

matlab1 - Copy

جعبه‌ابزار الگوريتم ژنتيك در نرم افزار MATLAB  

جعبه‌ابزار الگوريتم ژنتيك

جعبه‌ ابزار الگوريتم ژنتيك مجموعه‌اي از تابع‌هايي هستند كه توانايي اپيتيمم كردن را با استفاده از محيط محاسبات عددي دارد . اين الگوريتم قابليت حل مسائل مختلف در زمينه بهينه‌سازي است تمام توابع اين جعبه ابزار از M فايل‌هاي مطلب هستند كه تابع را بهينه مي‌كند.البته مي‌‌توانيد قابليت‌هاي الگوريتم ژنتيك را توسط M فايلي كه خودتان مي‌نويسيد يا با تركيب تابع‌هاي مطلب افزايش دهيد.

 


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

(بر روی عکس زیر کلیک کنید)

Genetic Algorithm MATLAB code video download

نوشتن ‌M فايل

در اين قسمت نشان مي دهيم كه چه‌طور مي‌توان يك M فايل براي تابع نوشت كه مي‌خواهيم آن را بهينه كنيم فرض كنيم مي‌خواهيم تابع زير را بهينه كنيم.

 

y1

مراحل زير را انجام دهيد

1- new را از منوي فايل انتخاب كنيد

2- M فايل را انتخاب كنيد.

3- كدهاي زير را در داخل m فايل بنويسيد.

y11

– فايل را ذخيره كنيد

اگر شما بخواهيد اين فايل را ماكزيمم كنيد مي‌توانيد f(X) -را مينيمم كنيد چون مينيمم در همان نقطه اتفاق مي‌افتد كه ماكزيمم در f(x) وجود دارد.

y111


فراخواني الگوريتم ژنتيك

براي استفاده از اين الگوريتم در خط دستور، دستور زير را در خط دستور تايپ كنيد

y666

كه

fitnessfun –  @  كه تابع مورد نظر است

n vars-  تعداد متغيرهاي مستقل در داخل تابع است

در نتايج داريم:

fval * مقدار نهايي تابع

* xنقطه‌اي كه در آن تابع بهينه است.

استفاده از جعبه ابزار الگوريتم ژنتيك.

اين جعبه ابزار يك جعبه‌ ابزرا گرافيكي است كه كاربر را قادر مي‌سازد كه از اين الگوريتم بدون خط دستور استفاده كرد اما بايد در خط دستور

>>gatool

-Fitness function  تابعي را كه مي‌خواهيد بهينه كنيد در اين قسمت تايپ كنيد.

Number of variables-تعداد متغيرهاي مستقل كه در تابع وجود دارد.

براي شروع حل كليد start را در قسمت run solver بزنيد.

در قسمت‌ current generation تعداد نسل را توضيح مي‌دهد. شما مي‌توانيد حل را توسط دكمه puase موقتاً متوقف كنيد.

* در قسمت status & result اطلاعات زير نمايش داده مي‌شود

مقدار نهايي تابع وقتي الگوريتم تمام مي‌شود

دليل تمام شدن الگوريتم

نقطه‌اي كه تابع در آن نقطه بهينه است.

 

پلات

در قسمت plots مي‌توانيد انواع اطلاعات را در زمان اجراي برنامه مشاهده كنيد. شما مي‌توانيد با مشاهده نتايج و اعمال تغييرات مناسب به جواب بهتري برسيد با انتخاب best fitness مي‌توانيد بهترين و متوسط تابع مورد نظر را در هر نسل ببينيد.

 

مثال:

تابع رستريجين با دو متغير مستقل را در نظر بگيريد

y6669

شكل تابع

اين تابع اكترمهاي محلي زيادي دارد اما در نقطه [o.o] مي‌نيمم مطلق دارد كه توسط خط عمودي نشان داده شده است كه مقدار تابع در اين مينيمم برابر صفر است

پيدا كردن نقطه مينيمم تابع رسترينج

در اين قسمت توضيح مي‌دهيم كه چگونه با استفاده از الگوريتم ژنتيك مينيمم تابع را به دست آوريم.

1- در خط دستور gatoal را تايپ كنيد

. اين تابع مي‌تواند مثال خوبي براي تست كردن اين الگوريتم باشد در ادامه كانتور محل ماكزيمم و مينيمم آمده است.

– در قسمت fitness funetion كلمهrastriginsfcn.@ را وارد كنيد

– در number variable عدد 2 را وارد كنيد

– با زدن start الگوريتم شروع به كار مي‌كند.

 

 

براي پيدا كردن مينيمم با استفاده از خط دستور مي‌توان مراحل زير را انجام داد.

y90

 

اصطلاحات جعبه ابزار الگوريتم ژنتيك در نرم‌افزار MATLAB

 افراد   Individual

به عنوان مثال براي تابع زير بردار (2, 3, 1) يك فرد است و f(2, 3, 1)=51 امتياز اين فرد است. فرد ممكن است به عنوان ژن معرفي شود.

جمعيت و نسل Generation

جمعيت آرايه‌اي از افراد است به عنوان مثال اگر تابع متغير داشته باشد و اندازه جمعيت 100 باشد يك آرايه 3×100 داريم.

Diversity

: ميانگين فاصله بين افراد تعريف مي‌شود كه جمعيت با متوسط فاصله زياد دايورسيتي زياد دارد.

مقدار فيت‌نس و بهترين فيت‌نس Fitness Values and Best Fitness Values

مقدار فيت‌نس مقدار تابع براي افراد مختلف مي‌باشد. به دليل اين كه اين جعبه ابزار وظيفه پيدا كردن كم‌ترين فيت‌نس تابع را دارد. بهترين فيت‌نس براي يك جمعيت كم‌ترين فيت‌نس مي‌باشد.

والدين و بچه‌هاParents and children

براي به وجود آوردن نسل بعدي، الگوريتم ژنتيك يك سري افراد را از جمعيت فعلي انتخاب كرده و به نام والدين و از آن‌ها براي به وجود آوردن نسل بعدي استفاده مي‌كند كه بچه‌ها نام دارد اين الگوريتم والدين را انتخاب مي‌كند كه فيت نس بهتري داشته باشد.

 

موارد زير مراحل مينيمم كردن اين الگوريتم را توضيح مي‌دهد

1- الگوريتم جمعيت اوليه را رندم انتخاب مي‌كند.

 

2-الگوريتم جمعيت بعدي را از جمعيت فعلي به وجود مي‌آورد براي به دست آوردن نسل بعدي الگوريتم موارد زير را اجرا مي‌كند.

(a امتيازدهي به هر عضو جمعيت با حساب كردن مقدار فيت‌نس

(b مقياس‌بندي امتيازات داده شده براي استفاده بهتر از امتيازات و جمعيت

(c انتخاب بچه‌ها از والدين. توليدمثل با تغيير اندامي از يكي از والدين- جهش ژنتيكي و يا تركيب والدين براي توليد مثل

(d انتخاب والدين بر اساس فيت‌نس

(e جايگزيني نسل جديد با نسل قديم

3- اين الگوريتم زمان متوقف مي‌شود كه به معيار توقف برسد

شرايط توقف براي الگوريتم

اين الگوريتم از پنج شرايط براي توقف الگوريتم استفاده مي‌كند.

– Generations:   زماني كه تعداد نسل‌ها به عدد مورد نظر برسد

– Time limit: وقتي زمان اجرا برنامه به ثانيه به عدد موردنظر برسد

– Fitness limit    : وقتي كه مقدار فيت‌نس تابع در بهترين نقطه نسل‌ جاري كم‌تر از عدد مورد نظر باشد.

Stall generations  زماني كه متغير بهتري در نسل‌ها ايجاد نشود.

Stall time limit  زماني كه متغير بهتري در نسل‌ها ايجاد نشود بين دو زمان به ثانيه الگوريتم متوقف مي‌شود.

اگر هر كدام از شرايط زير اول اتفاق بيفتد الگوريتم متوقف مي‌شود

 

Plat option

با فعال كردن موارد موجود درplat مي‌توانيد در هنگام اجرا برنامه‌ روند كار را ببينيد

فانكشن‌هاي زير در plat موجودند

 

Plot interval (PlotInterval): تعداد نسل‌هايي كه در پلات از آن‌ها استفاده مي‌كند

Best fitness (@gaplotbestf): كشيدن بهترين مقدار تابع در هر نسل

Expectation (@gaplotexpectation): كشيدن تعداد بچه‌هايي كه انتظار مي‌رود در مقابل امتيازات هر نسل

Score diversity (@gaplotscorediversity): كشيدن هيستوگرام از امتيازات براي هر نسل

Stopping (@plotstopping): كشيدن معيار توقف در هر سطح

Best individual (@gaplotbestindiv): كشيدن بردار هر فرد با بهترين فيت‌نس

Genealogy (@gaplotgenealogy): كشيدن نوع توليد نسل بعدي

Scores (@gaplotscores): كشيدن امتياز هر فرد در نسل خودش

Distance (@gaplotdistance): كشيدن متوسط فاصله بين افراد در هر نسل

Range (@gaplotrange): كشيدن مينيمم، ماكزيمم متوسط مقدار تابع در هر نسل

Selection (@gaplotselection): كشيدن هيستوگرام والدين

Population option

Population tyme: مشخص كردن اطلاعات ورودي براي تابع فيت‌نس

Populatin sice: مشخص كردن تعداد افراد در هر نسل. با تعداد بالا جمعيت الگوريتم تعداد بيش‌تري از فيت‌نس‌ها را چك مي‌كند و شانس پيدا كردن اكسترمم نسبي نسبت به اكسترمم مطلق كاهش مي‌يابد اما سرعت جواب گرفتن كاهش مي‌يابد.

 

Creat function: مشخص كردن فانكشني براي به دست آوردن جمعيت اوليه

Initial population: شما را قادر مي‌سازد كه تعداد افراد امتياز و رنج در اولين جمعيت را مشخص سازيد.

 

   Fitness scaling option

اين فانكشن امتياز هر فيت‌نس را به يك مقياس خاص تبديل مي‌كند كه براي فانكشن انتخاب مناسب باشد.

پيش‌فرض اين قسمت rank مي‌باشد مقياس‌بندي بر اساس چيدمان هر فرد است به جاي استفاده از امتياز

proportional مقياس‌بندي بر اساس امتياز هر فرد.

 

Selection- option

اين اپشن مشخص مي‌كند كه الگوريتم بر چه اساس والدين را براي تشكيل نسل بعدي انتخاب كند.

Reproduction:

اين اپشن مشخص مي‌كند كه الگوريتم بر چه اساس فرزندان را براي نسل بعدي انتخاب كند.

Mutation option

: اين اپشن مشخص مي‌كند كه چگونه اين الگوريتم كه چگونه تغيير رندمي كوچكي در هر فرد را براي جهش ژنتيكي دهد. جهش ژنتيكي اجازه گفتن فضاي وسيع‌تري را به الگوريتم مي‌دهد.

Crossover:

اين اپشن مشخص مي‌كند كه چگونه الگوريتم از دو فرد فرد جديد را توليد كند.

 

Migration option

در اين مشخص مي شود که چگونه افراد بين زير جمعيتها حرکت کنند.اين مهاجرت وقتي اتفاق مي افتد که اندازه بردار جمعيت بزرگتر از يک شود .وقتي اين عمل اتفاق بيفتد بهترين افراد از يک جمعيت جاي خود را با بدترين افراد از يک زير جمعيت ديگر عوض مي کنند. اين تعويض بصورت کپي است

 

Hybrid Function Option

اين فانکشن يک تابع بهينه سازي ديگر است که در صورت فعال بودن بعد از اين که الگوريتم ژنتيک تمام شد اجرا مي شود

 

 

مثال

در اين مثال الگوريتم ژنتيک در تابع رزنبرگ نقطه اي نزديک مينيمم پيدا مي کند

 

Set Fitness function to @dejong2fcn

Set Number of variables to 2.

Set Population size to 10

 

سپس مي توانيد با استفاده از Hybrid Function اين بهينه سازي را بهبود ببخشيد

 

و جواب نزديکتري به نقطه مينيمم پيدا کنيد

لينك دريافت فايل اصلي

.

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

بعد از واریز هزینه کدها آماده متلب MATLAB ، الگوریتم ژنتیک به همراه یک فیلم آموزشی فارسی برای شما ارسال و می‌توانید آنها را دانلود کنید و در پروژه یا پایان نامه خود استفاده کنید.

31 نظر در “نحوه كد نويسي الگوريتم ژنتيك”

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

  2. سلام
    من یه پروژه الگوریتم ژنتیک هیبریدی که مساله فروشنده دوره گرد رو حل میکنه در اختیار دارم اما مشکلی داره که ران نمیشه .میتونید راهنماییم کنید؟؟

    1. سلام

      شما باید یاد بگیرید چگونه یک فایل متلب را خطایابی کنیم که به اسم debugging در متلب شناخته می شود.

      شما می بایست کد را step با step با ایجاد beakpoint اجرا کنید.

      یک ویدئو خوب از سایت دانشگاه MIT در این رابطه

      http://ocw.mit.edu/courses/mathematics/18-s997-introduction-to-matlab-programming-fall-2011/debugging-with-matlab/

    1. سلام
      متاسفانه این ویدئوهای آموزشی توسط اساتید دانشگاه تهیه شده است و بنده اجازه ارسال آنها را بدون پرداخت وجه ندارم.
      قیمت این فیلم آموزشی خیلی پایین گذاشته شده است. شما الان بخواهید در کلاس شرکت کنید کمتر از 200 یا 300 نباید پرداخت کنید. اما این فیلم را می توانید با پرداخت هزینه بسیار ناچیزی دانلود کنید.

      تشکر از شما

    1. سلام

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

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

  3. با سلام
    کار پایان نامه من بهینه سازی چندهدفه اس، من چیزی از متلب نمیدونم و وقت هم ندارم باید زودتر جمعش کنم. ممکنه شما کمکم کنید. فقط یه مشکلی هست من باید کلا از برنامه سر در بیارم چون استاد گیری دارم. ممکنه راهنمایی کنید؟ این کار امکان پذیره؟

  4. من یک بهینه سازی چند هدفه با الگوریتم تکاملی تفاضلی میخوام انجام بدم لطفا راهنمایی کنید

  5. علیرضا کسایی

    سلام… من یه سبد سهام متشکل از 5 سهم دارم که می خوام با استفاده از الگوریتم ژنتیک ، مقدار بهینه اوزان هر یک از سهام در پرتفوی بهینه رو بدست بیارم ….
    میخواستم ببینم شما میتونید توو این زمینه کمکی بهم بکنید؟

  6. با سلام من برای تطبیق امپدانس دریک بازه فرکانسی میخام از این الگوریتم استفاده کنم اینکارو شما انجام میدین؟هزینش چقدره؟

  7. سلام و وقت بخیر من به کد متلبی برای برای یه سمینار درسی به احتیاج دارم که بخش مهمیش بهینه سازی هست ایا می تونید برام انجام بدید و همراه با توضیحات کامل بهم بدید مثلا بگید چرا اینجا از این استفاده کردیم و این چی هست و … این توضیحات که اگه ازم سوال شد من نمونم برای جواب؟
    هزینه حدودی رو هم اگه بهم بگید ممنون میشم

  8. سلام
    من یه تحقیقی در مبحثGA_LSBMR که کدنویسی پنهان نگاری روی تصویر سیاه و سفید رو انجام بده، واسه من انجام بدین،
    اگه می تونین کمکم کنین در ای مبحث
    تشکر

  9. سلام من یک مساله بهینه سازی دو هدفه دارم که دو هدف را با هم ترکیب کردم (به کمک برنامه ریزی ارمانی) ،الان میخوام با الگوریتم ژنتیک حلش کنم، میخاستم ببینم میتونین کمک کنید و هزینه رو هم بفرمایید

  10. باسلام و احترام
    من یک کد متلب با پنج متغیر ورودی و دو خروجی به عنوان تابع هدف دارم. مشکلم اینجاست که وقتی الگوریتم ژنتیک چندهدفه را در تولباکس فراخوانی می کنم نمی دانم چگونه آن را با برنامه متلب لینک کرده و در قسمت fitness function اولا چه تابعی معرفی کنم و دوما این تابع را از قبل در متلب به چه صورت معرفی کنم.
    در صورت امکان راهنمایی بفرمایید

پیام بگذارید

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

80 + = eighty four