خیر

۰

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

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

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

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

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

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

که در آن درایه­ی 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 )

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


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