تبلیغات
مهندسی مکانیک و هوافضا - مطالب حسین اتحادی
منوی اصلی
مهندسی مکانیک و هوافضا
www.Aeros.ir
  • حسین اتحادی یکشنبه 20 دی 1394 07:30 ب.ظ نظرات ()
    با سلام
    جهش یک عملگر ژنتیکی است که معمولا برای حفظ تنوع ژنتیکی (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 مرتبه) بالاخره از این قله محلی فرار می کنیم بنابراین نرخ جهش را نباید بزرگ انتخاب کنیم.


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

    موفق باشید
    آخرین ویرایش: پنجشنبه 24 دی 1394 12:40 ق.ظ
    ارسال دیدگاه
  • گاهی پیش می آید که در متلب، یک یا چند برنامه را اجرا می کنید و حاصل اجرای این برنامه ها، متغیرهایی هستند که در متلب تعریف شده اند و می خواهید که در آینده، از این متغیرها استفاده کنید. اگر پنجره متلب را ببندید، تمامی متغیرهای تعریف شده در آن، پاک می شود، بنابراین راه حل این است که متغیرهای تعریف شده در متلب را به صورت یک فایل، در محلی از درایوهای ویندوز خود save کنید. برای این منظور، روش های مختلفی وجود دارد که در ادامه آنها را شرح خواهیم داد.
    به ادامه مطلب مراجعه کنید ...
    آخرین ویرایش: شنبه 19 دی 1394 02:53 ق.ظ
    ارسال دیدگاه
  • اندازه بردار :

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



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

    >> L=sqrt*  A' )

    L =

         5



    ادامه مطلب ...
    آخرین ویرایش: جمعه 18 دی 1394 09:16 ب.ظ
    ارسال دیدگاه
  • حسین اتحادی پنجشنبه 10 دی 1394 01:23 ق.ظ نظرات ()

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

    i=1

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

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

    آخرین ویرایش: پنجشنبه 10 دی 1394 01:28 ق.ظ
    ارسال دیدگاه
  • حسین اتحادی سه شنبه 8 دی 1394 03:25 ق.ظ نظرات ()
    در تصاویر حیرت انگیز زیر میتوانید مهندسی واقعی توسط یک حشره را ببینید .

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

    آسان پیک

    ادامه مطلب ...
    آخرین ویرایش: جمعه 18 دی 1394 09:25 ب.ظ
    ارسال دیدگاه
  • حسین اتحادی سه شنبه 8 دی 1394 02:49 ق.ظ نظرات ()

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

    حالا دستور بعدی یه ماتریسی تولید میکنه که عددای توی اون ماتریس (مثلا تو اینجا ۵) از ۱ تا ۵ به صورت تصادفی چیده میشه حالا دستور بعدی که خیلی مهمه کارش اینه که عددای توی ماتریس اولیو به ترتیبی که توی ماتریس 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

    آخرین ویرایش: سه شنبه 8 دی 1394 02:56 ق.ظ
    ارسال دیدگاه
  • حسین اتحادی دوشنبه 7 دی 1394 01:15 ب.ظ نظرات ()

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

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

    (str2num(x<<


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

    (num2str(x<<


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

    (dec2hex(x<<


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

    (hex2dec(x<<

     


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

    (dec2bin(x<<


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

    (dec2bin(x,d<<


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

    (bin2dec(x<<


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

    (poly2sym(p<<


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

    (sym2poly(p<<

    آخرین ویرایش: سه شنبه 8 دی 1394 02:58 ق.ظ
    ارسال دیدگاه
  • حسین اتحادی دوشنبه 7 دی 1394 01:03 ب.ظ نظرات ()

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

     size(x,1)

    size(x,2)

    sem-mec.sub.ir



    آخرین ویرایش: دوشنبه 7 دی 1394 01:10 ب.ظ
    ارسال دیدگاه
  • حسین اتحادی دوشنبه 7 دی 1394 12:58 ق.ظ نظرات ()

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

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

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

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

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

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

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

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

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

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

    swap

    insertion

    scramble

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

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

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

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

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

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

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

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

     

    آخرین ویرایش: دوشنبه 7 دی 1394 01:05 ق.ظ
    ارسال دیدگاه
  • حسین اتحادی یکشنبه 6 دی 1394 08:14 ب.ظ نظرات ()
    اگر در مقابل نام تابع علامت @ بیاید گیره آن تابع را ایجاد کردهایم (چیزی شبیه اشاره گر pointer در C++)، برای feval()  استفاده کنیم مفهوم گیره امکان استفاده از تابعی به عنوان آرگومان تابع دیگر را فراهم میکند و از توانائیهای مهم متلب محسوب میشود.

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

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

     جواب

    ans = 0.5000

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

    >> feval(@sin,pi/6)

     جواب

    ans = 0.5000

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

    ادامه مطلب ....
    آخرین ویرایش: یکشنبه 6 دی 1394 08:17 ب.ظ
    ارسال دیدگاه
تعداد صفحات : 28 ... 4 5 6 7 8 9 10 ...