خیر

 

 

 

 

 

۰

 

 

 

برای محاسبه­ی امتیاز جهش ابتدا تعداد جهش­های موجود در هر یال را از بخش تولید کننده­ جهش بدست آوریم تا در صورتی که خروجی برنامه دچار تغییر شد این جهش­ها را به عنوان جهش از بین رفته در نظر بگیریم همچنین در پایان هر مرحله اجرا شایستگی کل را از طریق معادله(۳-۲) محاسبه می­کنیم (این مرحله مشابه استقرار زنبورهای مستخدم بر منابع غذایی است).
پایان نامه - مقاله - پروژه

 

 

 

 

معادله(‏۳۲‑):

 

 

 

محاسبه­ی احتمال انتخاب یک بردار ورودی
در این مرحله بردار­های ورودی که شایستگی­ آن­ها از میانگین شایستگی­ها بالاتر است برای انجام عمل جستجوی محلی و به عبارت دیگر برای حرکت زنبور­های ناظر[۷۰] انتخاب خواهند شد. احتمال انتخاب بردار ورودی ( یک زنبور مستخدم) از طریق معادله(۳-۳) قابل محاسبه است:

 

 

معادله(‏۳‑۳):

 

 

 

 

 

در این رابطه برابر احتمال انتخاب برای بردار ورودی و میزان شایستگی بردار ورودی است.
متد تولید داده ­های اولیه
برای تولید ورودی­های تست درگام نخست به طور تصادفی و به تعداد نخ­هایی از سیستم که در الگوریتم تست شرکت خواهند کرد (که مشابه زنبورهای پیش آهنگ[۷۱] در الگوریتم کلونی زنبور است) بردارهای داده به طور تصادفی تولید می­کنیم (این بردارها مشابه دسته­های گلی[۷۲] /منابع غذایی [۷۳] است که توسط زنبورهای پیشاهنگ در الگوریتم کلونی زنبور یافت شده ­اند) اگرچه به جهت تولید داده ­های ورودی بهتر اقداماتی دیگری نیز انجام داده­ایم که در بخش دستیاران شرح خواهیم داد در مرحله­ بعد با بهره گرفتن از اطلاعات بدست آمده از واسط ورودی کد تحت تست موارد تست را ایجاد کرده سپس یک نمونه از فایل اصلی برنامه و یک نمونه از فایل جهش یافته آن را توسط نخ ها با تک تک موارد تست، تست می­کنیم. با بهره گیری از تابع شایستگی مقدار شایستگی هر بردار محاسبه شده، (مشابه عملکرد زنبورهای مستخدم) و منتظر پایان اجرای تمامی نخ­ها می­شویم سپس شایستگی کل و احتمال انتخاب هر بردار ورودی محاسبه می­ شود. آن دسته از بردارهای ورودی که شایستگی­ بیشتر از میانگین دارند و به عبارت دیگر امید بیشتری دارند برای جستجوی محلی انتخاب شده (مشابه عملکرد زنبورهای ناظر) و مابقی ترک خواهند شد.
متد جستجوی محلی
پس از انتخاب بردارهای داده­ی ورودی با احتمال بالاتر عملیات جستجوی محلی را برای آن انجام می­دهیم برای پیدا کردن محل­های جدید (که توسط زنبور­های ناظر انجام می­ شود) از طریق معادله(۳-۴) محاسبه می­ شود.

 

 

معادله (‏۳‑۴):

 

 

 

 

 

که در آن درایه­ی i ام در تکرار j ام در بردار ورودی ، محل جدید (مقدار جدید) محاسبه شده برای داده­ی ورودی i ام در تکرار j ام در همسایگی است و K برابر (تعداد پارامترهای ورودی برنامه) است. علاوه بر روابط بالا برای ایجاد تنوع بیشتر در داده ­های ورودی عملیاتی چون تعویض جای داده ­ها افزایش و یا کاهش داده ­ها انجام می­پذیرد. همانطور که در یک کلونی ۱۰% از جمعیت زنبورها را زنبورهای پیشاهنگ تشکیل می­ دهند این سهم در روش ما نیز وجود دارد به گونه ­ای که در صورت ناامید شدن از یک منبع غذایی این دسته از زنبورها وارد عمل شده و به منبع غذایی دیگری به صورت تصادفی مهاجرت می­ کنند. در شکل(۳-۷) ماژول تولید کننده­ ورودی تست نشان داده شده است.
شکل (‏۳‑۶): ماژول تولید کننده­ ورودی­های تست
اجرا کننده­ تست
در ابتدا بردارهای ورودی را ایجاد کرده و درون یک آرایه ذخیره می­کنیم سپس به تعداد ورودی کاربر نخ ایجاد می­کنیم بعد نخ­ها را برای اجرا فایل اصلی و فایل جهش یافته آماده می­کنیم این آماده سازی با اضافه کردن موارد تست، تنظیم مقدار ورودی برای ارگومان انتخاب گر تابع عملگر جهش، اضافه آدرس­های فایل­ اصلی و جهش یافته صورت می­گیرد در مرحله­ بعد تست را با هر نخ به صورت مجزا اجرا می­کنیم پس از اجرا اطلاعاتی مانند پوشش یال­ها و جهش­های از میان رفته بدست می ­آید که در بخش مربوط در هر بردار قرار می­گیرند در گام بعدی براساس احتمال انتخاب، بردارهای ورودی را انتخاب می­کنیم و جستجوی محلی را انجام می­دهیم تعداد زنبور­های شرکت کننده در هر بردار همسایگی (بردارهایی که از جستجوی محلی بدست می­آیند) به صورت تصادفی مشخص می­گردد این روال آنقدر تکرار می­ شود که یا تمام جهش­ها از میان برود یا شرط محدودیت تکرار ارضاء (که توسط کاربر مشخص می­ شود) شود. بعد از اجرای عملیات تست برای یک تابع، عملیات مشابه را برای تابع دیگر برنامه تکرار می­کنیم تا در نهایت داده ­های ورودی مناسب را برای کل کلاس تحت تست به دست آوریم. هرچه تعداد نخ­ها بیشتر باشد خروجی­های بهتر و بیشتر بدست خواهد آمد همچنین با توزیع محاسبات برروی پردازنده­های بیشتر سریع­تر می­توان به نتایج دلخواه دست یافت[۵۲]. در شبه کد زیر روند اجرای تست نشان داده شده است:
Function Runner(iteration_limit:Integer, Number of threads:integer, range:integer, Files:String, MaxFitness:float)
{
While(Not iteration_limit OR Not MaxFittness )

موضوعات: بدون موضوع  لینک ثابت


فرم در حال بارگذاری ...