تبلیغات
مهندسی مکانیک و هوافضا - مطالب حسین اتحادی
 
آخرین مطالب
 
پیوندهای روزانه
تاثیر نرخ جهش بر الگوریتم ژنتیک
با سلام
جهش یک عملگر ژنتیکی است که معمولا برای حفظ تنوع ژنتیکی (Genetic diversity) مورد استفاده قرار می گیرد.
جهش مقدار یک یا چند ژن از کروموزوم را تغییر می دهد. (Mutation alters one or more gene values in a chromosome from its initial state)
نرخ جهش یعنی چه تعدادی (چند درصد) از ژن های یک کروموزوم تغییر می یابند و مسلما یک پارامتر آماری است یعنی وقتی می گوییم نرخ جهش 2% است یعنی از هر 100 ژن توقع داریم 2 ژن تغییر وضعیت داده باشند اما این کاملا به احتمال رخدادن آن 2% ربط دارد و لذا ممکن است حتی 3 ژن یا بیشتر، یا کمتر از 2 ژن تغییر وضعیت داده شود اما وقتی تعداد ژن ها به سمت بینهایت میل کنند مسلما این مقدار هم به سمت عدد 2 میل می کند. (بطور کلی یک پدیده احتمالی است نه قطعی)


اما اینکه نرخ جهش چقدر باشد، باید بگویم بر خلاف نظر دوستم بابک، توصیه می شود نرخ جهش بزرگ نباشد اگر چه این موضوع می تواند بسته به نوع مسئله تفاوت بکند ولی معمولا نرخ جهش عددی کوچکتر از 2% و حتی 1.5% درنظر گرفته می شود؛ دلیل آن هم کاملا مشخص است فرض کنید

قرار است با هر تکامل (چرخه) الگوریتم ژنتیک از یک کوه بالا برویم، عملگر Crossover سرعت گام های ما را تنظیم می کند ولی جهش ما را از یک تپه به تپه دیگری می برد، جهش برای زمانی است که در یک قله محلی (و نه گلوبال) به دام افتاده ایم و پیشرفتی حاصل نمی شود آنوقت باید منتظر یک جهش خوب بود تا ما را از آن تپه محلی به یک محل دیگر برده و اصطلاحا نجاتمان دهد تا شاید در آن تپه جدید پیشرفت بهتری داشته باشیم، 
پس
مسلما اگر مقدار جهش زیاد باشد ممکن است زمانیکه بخوبی در حال بالا رفتن از قله گلوبال هستیم در اثر یک جهش بی مورد (که الان نرخش هم مثلا زیاد بوده) به یک موقعیت بدتر انتقال یابیم، در مقابل اگر مقدار جهش کوچک باشد مثلا 2%، و باز فرض کنیم در قله محلی به دام افتاده ایم مطمئن هستیم پس از 50 بار (2% یعنی 1 بار در 50 مرتبه) بالاخره از این قله محلی فرار می کنیم بنابراین نرخ جهش را نباید بزرگ انتخاب کنیم.


هنگام ترکیب، همه کروموزوم ها ترکیب می شوند ولی در مرحله نخبه گرائی تعدادی (و نه همه) کروموزم ها بعنوان نخبه انتخاب می شوند.

موفق باشید


مرتبط با: الگوریتم ژنتیک ,
برچسب‌ها: ga , genetic algorithm mutation ,
Save و load کردن متغیرها در متلب
گاهی پیش می آید که در متلب، یک یا چند برنامه را اجرا می کنید و حاصل اجرای این برنامه ها، متغیرهایی هستند که در متلب تعریف شده اند و می خواهید که در آینده، از این متغیرها استفاده کنید. اگر پنجره متلب را ببندید، تمامی متغیرهای تعریف شده در آن، پاک می شود، بنابراین راه حل این است که متغیرهای تعریف شده در متلب را به صورت یک فایل، در محلی از درایوهای ویندوز خود save کنید. برای این منظور، روش های مختلفی وجود دارد که در ادامه آنها را شرح خواهیم داد.
به ادامه مطلب مراجعه کنید ...
ادامه مطلب

مرتبط با: متلب ( MATLAB ) ,
اندازه بردار در متلب
اندازه بردار :

اندازه بردار A را با توجه به رابطه زیر محاسبه میکنیم :



اگه بخوایم با تعریف به دست بیارم به فرم زیر میشه : ( A دوم در واقع این جوری هست 'A  ) در واقع ترانهاده A هست.

>> L=sqrt*  A' )

L =

     5



ادامه مطلب ...
ادامه مطلب

مرتبط با: متلب ( MATLAB ) ,
اعداد مختلط در متلب

همان طور که می دانید، هر عدد مختلط به صورت A+Bi نوشته می شود که A بخش حقیقی و B بخش موهومی عدد مختلط است. نماد i به صورت رادیکال 2 عدد 1- تعریف می شود :

i=1

البته به دلیل اینکه در برخی مراجع از نماد j نیز استفاده شده است، در متلب، هر دو نماد i و j به کار می روند، اما نتایجی که در پنجره Command نمایش داده می شوند، همگی با نماد i می باشند. به مثال زیر توجه کنید :

ادامه مطلب ...

ادامه مطلب

مرتبط با: متلب ( MATLAB ) ,
مهندسی واقعی توسط یک حشره
در تصاویر حیرت انگیز زیر میتوانید مهندسی واقعی توسط یک حشره را ببینید .

برش در امتداد خط مستقیم :

آسان پیک

ادامه مطلب ...
ادامه مطلب

دستور randperm در متلب

این دستور تو خط اول یه سری عدد تصادفی تولید میکنه که تعدادش ۵*۱ یعنی ۱ سطر و ۵ ستون

حالا دستور بعدی یه ماتریسی تولید میکنه که عددای توی اون ماتریس (مثلا تو اینجا ۵) از ۱ تا ۵ به صورت تصادفی چیده میشه حالا دستور بعدی که خیلی مهمه کارش اینه که عددای توی ماتریس اولیو به ترتیبی که توی ماتریس randperm اومده بچینه یعنی مثلا عدد دوم  از ماتریس A باید بیاد تو ستون اول بشینه و عدد سوم از ماتریس A باید بیاد تو ستون دوم بشینه و ....

 


>> A=rand(1,5)

A =

    0.9161    0.4809    0.8015    0.6016    0.8509

>> m=randperm(5)

m =

     2     3     1     4     5

>> A(m)

ans =

    0.4809    0.8015    0.9161    0.6016    0.8509



مرتبط با: متلب ( MATLAB ) ,
برچسب‌ها: randperm , randperm matlab ,
دستورات تبدیلی در متلب

متلب شامل دستورات فراوانی برای تبدیل مقادیر عددی و رشته ای به یکدیگر  و در حالت های مختلف می باشد که لیست پرکاربرد ترین آن ها در زیر آمده است:

تبدیل رشته عددی x به عدد :

(str2num(x<<


تبدیل هر نوع عدد از قبیل صحیح ، اعشاری ، کسری و ... به رشته عددی :

(num2str(x<<


تبدیل عدد دهدهی به رشته شانزده شانزدهی :

(dec2hex(x<<


تبدیل رشته شانزده شانزدهی به عدد دهدهی :

(hex2dec(x<<

 


تبدیل عدد دهدهی x به رشته دودویی :

(dec2bin(x<<


تبدیل عدد دهدهی x به رشته دودویی با d بیت :

(dec2bin(x,d<<


تبدیل رشته دودویی به عدد دهدهی :

(bin2dec(x<<


تبدیل بردار چند جمله ای به شکل اصلی تابع نمادین :

(poly2sym(p<<


تبدیل چند جمله ای اصلی نمادین به شکل بردار چند جمله ای :

(sym2poly(p<<



مرتبط با: متلب ( MATLAB ) ,
فرق دستور size با length

مکن است در برنامه نویسی با نرم افزار متلب matlab برای گرفتن اندازه یک بردار از دستور سایز استفاده کرده و حاصل را در متغیری بریزید و برنامه شما جواب ندهد و علتش را هم به سادگی پیدا نکنید! احتمالا جواب در فرق دستور  size  با length  نهفته است دستور size دو عدد میدهد که درواقع تعداد سطر و ستون را میدهد و بردار را هم به چشم ماتریس میبیند ولی دستور length فقط یک عدد که اگر ماتریس باشد تعداد ستونهای آن و اگر بردار باشدتعداد اعضای آن بردار را میدهد. البته اگر از دستور size به فرم های زیر استفاده کنید باز یک عدد خواهید گرفت که دستور اولی تعداد سطرها و دستور دومی تعداد ستونها را میدهد. 

 size(x,1)

size(x,2)

sem-mec.sub.ir





مرتبط با: متلب ( MATLAB ) ,
برچسب‌ها: size matlab , length matlab ,
الگوریتم ژنتیک

در دهه  ۱۹۶۰ و ۱۹۷۰ جان هالند الگوریتم ژنتیک یا Genetic algorithm را ارایه کرد و یکی از شاگردان وی به نام گلدبرگ تمامی کارهای جان هالند را گردآوری و در کتاب منتشر ساخت. الگوریتم ژنتیک الگوریتمی برای بهینه سازی است و مبتنی بر جمعیت می باشد در این الگوریتم که بر مبنای علم ژنتیک می باشد اعضای جمعیت رشد کرده و بهبود می یابند تا به جوابی بهینه دست یابند.

تعاریف خاصی در الگوریتم ژنتیک وجود دارد:

۱- کروموزم : برای تبدیل هر جواب به یک جواب کدینگ شده از کروموزم استفاده می شود.

۲- ژن : عناصر تشکیل دهنده یک کروموزم را ژن می گویند.

۳- جمعیت: مجموعه ای از کروموزم ها را جمعیت می گویند.

۴- نسل : هر تکرار از الگوریتم را نسل می گویند.

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

برای کدینگ باینری می توان از عملگر جهشی mutation استفاده نمود بدین صورت که یک ژن انتخاب شده و مقدار آن اگر صفر است به یک و اگر یک است به صفر تغییر یابد. همچنین برای عملگر تقاطع می توان از عملگر تقاطع تک نقطه ایOne point crossover، عملگر تقاطع دو نقطه ای و یا عملگر تقاطع چند نقطه ای استفاده نمود.

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

برای کدینگ به صورت عدد صحیح می توان از عملگر های زیر استفاده نمود:

swap

insertion

scramble

برای انتخاب والدین در الگوریتم ژنتیک می توان از روش های چون چرخ رولت Roulette wheel selection یا روش انتخاب تورنمنت Tournament selection استفاده نمود.

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

* ایجاد جمعیت اولیه و ارزیابی آن ها

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

* اعمال تقاطع بر روی والدین و ایجاد فرزندان

* ایجاد جهش بر روی والدین و ایجاد فرزندان

* ارزیابی کل جمعیت اصلی و جمعیت فرزندان و انتخاب از بین آن ها به تعداد جمعیت اصلی

* تکرار تا رسیدن به شرط خاتمه

 



گیره تابع feval() ، function handle
اگر در مقابل نام تابع علامت @ بیاید گیره آن تابع را ایجاد کردهایم (چیزی شبیه اشاره گر pointer در C++)، برای feval()  استفاده کنیم مفهوم گیره امکان استفاده از تابعی به عنوان آرگومان تابع دیگر را فراهم میکند و از توانائیهای مهم متلب محسوب میشود.

مثال ها:
نسبت دادن گیره تابع به متغیر دیگر

>> hs = @sin;
>> feval(hs,pi/6)

 جواب

ans = 0.5000

 کاربرد مستقیم گیره تابع

>> feval(@sin,pi/6)

 جواب

ans = 0.5000

 تابعِ تابعِ کاربر- تعریف

ادامه مطلب ....
ادامه مطلب

مرتبط با: متلب ( MATLAB ) ,
برچسب‌ها: feval() , feval , function handle ,

تعداد کل صفحات: 28