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

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 ، الگوریتم ژنتیک به همراه یک فیلم آموزشی فارسی برای شما ارسال و می توانید آنها را دانلود کنید و در پروژه یا پایان نامه خود استفاده کنید.

37 دیدگاه دربارهٔ «نحوه كد نويسي الگوريتم ژنتيك»

  1. blank

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

  2. blank

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

    1. blank

      سلام

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

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

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

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

    1. blank

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

      تشکر از شما

    1. blank

      سلام

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

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

  3. blank

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

  4. blank

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

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

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

  6. blank

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

  7. blank

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

  8. blank

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

  9. blank

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

  10. blank

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

  11. blank
    نازنین روشن پور

    با سلام
    میخواستم ببینم ممکنه مشخص کنید در کدام قسمت الگوریتم ژنتیک میتونم تغییراتی ایجاد کنم که خروجی بهم فرمول ارائه بده
    به عنوان مثال
    چه روشی یه فرمول ریاضی بین ورودی و خروجی های ما بهمون میده مشابه رگرسیون خطی اما درمورد الگوریتم ها به عنوان مثال الگوریتم ژنتیک و یا هر الگوریتمی که سریع به جواب برسم

  12. blank

    با سلام و احترام
    من نیاز به کد متلب بهینه سازی کنترل مد لغزشی با الگوریتم ژنتیک دارم.
    در صورت امکان راهنمایی کنید.
    ممنون

  13. blank

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

    1. blank
      ایران متلب

      با سلام و تشکر از شما

      ما اصلا انجام پروژه نداریم و تنها آموزش می دهیم و خودتون می تونید شروع کنید و ما راهنمایی می کنیم.

      کار بسیار ساده می باشد. کافی است تابع هزینه ای بنویسید که پارامترهای توابع عضویت به عنوان ورودی بگیرد و در خروجی یک امتیاز به این بردار بدهد. این امتیاز متناسب با کاربرد شما تعیین می شود مثلا اگر کار دسته بندی انجام می دهید می شود راندمان دسته بندی کننده یا اگر کار رگرسیون انجام می دهید می شود مقدار میانگین مربعات خطا و …

      بعد از تعریف تابع هزینه تنها کافی است این تابع عضویت را برای الگوریتم ژنتیک مشخص کنید.

      البته طول کروموزوم را در الگوریتم ژنتیک باید همان پارامترهای توابع عضویت باشد و بازه تغییرات هم به همین صورت مشخص می شود.

      آموزش های زیر می توانند به شما کمک کنند که کار شروع کنید :

      بهینه سازی در متلب

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

      بسته آموزش فازی

      به نظرم خودتون شروع کنید و لذت کدنویسی را تجربه کنید.
      به مشکل خوردید از مشاوران ایران متلب استفاده کنید.

      رفع اشکال و آموزش متلب

  14. blank

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

دیدگاه‌ خود را بنویسید

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