خیر
۰
برای محاسبهی امتیاز جهش ابتدا تعداد جهشهای موجود در هر یال را از بخش تولید کننده جهش بدست آوریم تا در صورتی که خروجی برنامه دچار تغییر شد این جهشها را به عنوان جهش از بین رفته در نظر بگیریم همچنین در پایان هر مرحله اجرا شایستگی کل را از طریق معادله(۳-۲) محاسبه میکنیم (این مرحله مشابه استقرار زنبورهای مستخدم بر منابع غذایی است).
معادله(۳۲‑):
محاسبهی احتمال انتخاب یک بردار ورودی
در این مرحله بردارهای ورودی که شایستگی آنها از میانگین شایستگیها بالاتر است برای انجام عمل جستجوی محلی و به عبارت دیگر برای حرکت زنبورهای ناظر[۷۰] انتخاب خواهند شد. احتمال انتخاب بردار ورودی ( یک زنبور مستخدم) از طریق معادله(۳-۳) قابل محاسبه است:
معادله(۳‑۳):
در این رابطه برابر احتمال انتخاب برای بردار ورودی و میزان شایستگی بردار ورودی است.
متد تولید داده های اولیه
برای تولید ورودیهای تست درگام نخست به طور تصادفی و به تعداد نخهایی از سیستم که در الگوریتم تست شرکت خواهند کرد (که مشابه زنبورهای پیش آهنگ[۷۱] در الگوریتم کلونی زنبور است) بردارهای داده به طور تصادفی تولید میکنیم (این بردارها مشابه دستههای گلی[۷۲] /منابع غذایی [۷۳] است که توسط زنبورهای پیشاهنگ در الگوریتم کلونی زنبور یافت شده اند) اگرچه به جهت تولید داده های ورودی بهتر اقداماتی دیگری نیز انجام دادهایم که در بخش دستیاران شرح خواهیم داد در مرحله بعد با بهره گرفتن از اطلاعات بدست آمده از واسط ورودی کد تحت تست موارد تست را ایجاد کرده سپس یک نمونه از فایل اصلی برنامه و یک نمونه از فایل جهش یافته آن را توسط نخ ها با تک تک موارد تست، تست میکنیم. با بهره گیری از تابع شایستگی مقدار شایستگی هر بردار محاسبه شده، (مشابه عملکرد زنبورهای مستخدم) و منتظر پایان اجرای تمامی نخها میشویم سپس شایستگی کل و احتمال انتخاب هر بردار ورودی محاسبه می شود. آن دسته از بردارهای ورودی که شایستگی بیشتر از میانگین دارند و به عبارت دیگر امید بیشتری دارند برای جستجوی محلی انتخاب شده (مشابه عملکرد زنبورهای ناظر) و مابقی ترک خواهند شد.
متد جستجوی محلی
پس از انتخاب بردارهای دادهی ورودی با احتمال بالاتر عملیات جستجوی محلی را برای آن انجام میدهیم برای پیدا کردن محلهای جدید (که توسط زنبورهای ناظر انجام می شود) از طریق معادله(۳-۴) محاسبه می شود.
معادله (۳‑۴):
که در آن درایهی 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 )