رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
الگوریتم کلونی زنبور عسل مصنوعی Artificial Bee Colony (ABC) Algorithm
#1
چکیده

الگوریتم جستجوی جدیدی مبتنی بر جمعیت به نام الگوریتم زنبور عسل (BA) ارایه شده است . الگوریتم رفتار جست و جوی غذای گروه زنبورهای عسل را تقلید می کند . در مدل پایه ای آن الگوریتم نوعی از جستجوی همسایگی ترکیب شده با جستجوی تصادفی را انجام می دهد و می تواند برای هر دوی بهینه سازی ترکیبی یا بهینه سازی تابعی مورد استفاده قرار گیرد.

1. مقدمه

طبیعت الهام بخش محققان برای توسعه مدل هایی برای حل مسائل و مشکلات آنهاست. به عنوان مثال "بهینه سازی" زمینه ای است که بارها این مدل ها توسعه و به کار برده شده اند . الگوریتم ژنتیک انتخاب طبیعی و عملگرهای ژنتیک را شبیه سازی می کند ، الگوریتم بهینه سازی خرده گروه ها ، دسته های پرندگان و مدرسه ماهی ها را شبیه سازی می کند، سیستم حفاظتی مصنوعی توده های سلولی سیستم حفاظتی را شبیه سازی می کند ، الگوریتم بهینه سازی کلونی مورچه ها رفتار کاوشی مورچه ها را شبیه سازی می کند و الگوریتم کلونی زنبورهای مصنوعی رفتار کاوشی زنبورهای عسل را شبیه سازی می کند. اینها نمونه هایی بود از الگوریتم های بهینه سازی الهام شده از طبیعت . الگوریتم دیگری که رفتار کاوشی زنبورها را با یک مدل الگوریتمی متفاوت شبیه سازی می کند الگوریتم زنبور عسل BA است .

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



2. الگوریتم کلونی زنبورهای مصنوعی

الگوریتم کلونی زنبورهای مصنوعی (ABC) توسط کارابوگا در سال 2005 برای بهینه سازی واقعی پارامترها ارایه شد، این الگوریتم یک الگوریتم بهینه سازی جدیدا معرفی شده است و رفتار کاوشی کلونی زنبورها را برای مسایل بهینه سازی بدون محدودیت شبیه سازی می کند. برای حل مسائل بهینه سازی با محدودیت یک روش اداره محدودیت با این الگوریتم ترکیب می شود.

در یک کلونی زنبور عسل واقعی ، وظایفی وجود دارد که توسط افراد تخصصی شده انجام می شود. این زنبورهای متخصص تلاش می کنند تا میزان شهد ذخیره شده در کندو را با انجام تقسیم کار و خودسازماندهی موثر حداکثر کنند. مدل کمینه انتخاب جستجوی غذا توسط گروه های هوشمند زنبور در یک کلونی زنبور عسل ، که الگوریتم ABC اتخاذ کرده است ، شامل سه نوع زنبور است : زنبورهای کارگر ، زنبورهای ناظر ، و زنبورهای پیشاهنگ (یا دیده ور) .

نصف کلونی شامل زنبورهای کارگر است و نصف دیگر آن شامل زنبورهای ناظر است. زنبورهای کارگر مسئول بهره برداری از منابع شهدی هستند که قبلا کشف شده اند و نیز دادن اطلاعات به سایر زنبورهای منتظر (زنبورهای ناظر) در کندو درباره کیفیت مکان مواد غذایی که در حال استخراج آن هستند . زنبورهای ناظر در کندو می مانند و مطابق با اطلاعاتی که زنبورهای کارگر به اشتراک گذاشته اند درباره یک منبع غذایی برای بهره برداری شدن تصمصم گیری می کنند. پیشاهنگ ها به صورت تصادفی محیط را برای یافتن یک منبع غذایی جدید براساس یک انگیزش درونی یا مدارک امکانی خارجی یا تصادفی جستجو می کنند. مراحل اصلی الگوریتم ABC که این رفتار را شبیه سازی می کند در ادامه آورده شده است :

1- مقدار دهی اولیه به موقعیت های منابع غذایی

2- هر زنبور کارگر یک منبع غذایی جدید در مکان منبع غذایی خود تولید می کند و منبع بهتر را استخراج می کند .

3- هر زنبور دیده ور یک منبع را وابسته به کیفیت راه حلش انتخاب می کند و یک منبع غذایی جدید رادر مکان منبع غذایی انتخاب شده تولید می کند و منبع بهتر را استخراج می کند.

4- تعیین منبعی که باید متروک شود و تخصیص زنبورهای کارگر آن به عنوان دیده ور برای جستجوی منابع غذایی جدید.

5- بخاطر سپردن بهترین منبع غذایی پیدا شده تا کنون.

6- تکرار مرحله های 2 – 5 تا زمانی که معیار توقف مقتضی شود.

در مرحله اول الگوریتم ، xi (i = 1, . . . , SN) راه حل ها به صورت تصادفی تولید می شوند که در آن SN تعداد منابع غذایی است . در مرحله دوم الگوریتم ، برای هر زنبور کارگر ، که تعداد کل آنها برابر با نصف تعداد منابع غذایی است ، یک منبع جدید بوسیله رابطه زیر تولید می شود:

vij = xij + φij (xij - xkj (1) (

φij یک عدد تصادفی بطور یکنواخت توزیع شده در بازه [-1,1] است که تولید موقعیت منابع غذایی همسایه را در اطراف xij کنترل می کند، K شاخص راه حل است که به صورت تصادفی از کلونی انتخاب شده است (K=int(rand ∗ SN) + 1), j = 1, . . .,D و D ابعاد مسئله است . بعد از تولید vi این راه حل جدید با xi مقایسه می شود و زنبور کارگر منبع بهتر را استخراج می کند . در مرحله سوم الگوریتم ، یک زنبور ناظر یک منبع غذایی را با احتمال (2) انتخاب می کند و منبع جدیدی را در مکان منبع غذایی انتخاب شده توسط (1) تولید می کند و به همان شکل روش زنبور کارگر، منبع بهتر برای استخراج شدن مورد تصمیم گیری قرار می گیرد.

(2)
[عکس: 4mxolblek50yhn5j7kr.jpg]


Fiti میزان شایستگی راه حل xi است.

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

بوسیله رابطه (3) xij = xj min + (xj max – xjmin )*rand

منبع
[عکس: matlabOpencv.gif]

« کلاس های آموزش پردازش تصویر با نرم افزار متلب »

جهت کسب اطلاعات بیشتر با شماره تلفن 09130130252 تماس حاصل فرمائید.


«جهت مشاهده سرفصل این دوره کلیک نمایید»
پاسخ
سپاس شده توسط دانش
#2
3. الگوریتم زنبور عسل

3.1 زنبورها در طبیعت

یک کلونی زنبور عسل می تواند خود را در فواصل دور (بیشتر از 10 کیلومتر) و به صورت هم زمان در چندین جهت گسترش دهد تا از تعداد زیادی از منابع غذایی بهره برداری کند. یک کلونی با گسترش زنبورهای دیده ور خود در دشتهای خوب به موفقیت دست می یابد. به طور کلی قطعه زمینهای گلدار با میزان شهد یا گرده فراوان که می توانند با تلاش کمتری جمع آوری شوند باید توسط زنبورهای بیشتری ملاقات شوند، در حالی که قطعه زمین های گلدار با شهد یا گرده کمتر باید زنبورهای کمتری را دریافت کنند.

فرآیند جستجوی غذا در یک کلونی با فرستادن زنبورهای دیده ور برای جستجوی گلهایی با احتمال گرده و شهد بیشتر آغاز می شود. زنبورهای دیده ور از یک قطعه زمین به قطعه زمین دیگر حرکت می کنند. درطی فصل برداشت، یک کلونی کاوش خود را ادامه می دهد و درصدی از جمعیت را به عنوان زنبورهای دیده ور آماده نگه می دارد.

هنگامی که زنبورها به کندو باز می گردند، آن زنبورهای دیده وری که قطعه زمینی آنها در درجه بالایی از یک حد آستانه معین ارزیابی شده اند (به عنوان ترکیبی از چند جزء اصلی،مثل ظرفیت شکر اندازه گیری شده است) شهد و گرده های خود را ذخیره کرده و به سالن رقص می روند تا رقصی را که به عنوان «رقص چرخشی» شناخته می شود انجام دهند.

این رقص اسرار آمیز برای ارتباطات کلونی حیاتی است، و شامل سه قسمت از اطلاعات راجع به قطعه زمین گل است: جهتی که آن قطعه زمین پیدا خواهد شد، مسافت آن از کندو، و نرخ کیفیت آن (شایستگی).

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

زنبورهای پیرو بیشتری به قطعه زمین هایی با امید بخشی بیشتر فرستاده می شود این موضوع به کلونی اجازه می دهد تا غذا را سریعتر و کارآمدتر جمع آوری کند.

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



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

همان طور که اشاره شد، الگوریتم زنبور عسل یک الگوریتم بهینه سازی است که از رفتار کاوشی طبیعی زنبورهای عسل برای پیدا کردن راه حل بهینه الهام شده است. شکل 1 شبهه کد الگوریتم را در ساده ترین حالت آن نشان می دهد. این الگوریتم نیازمند تنظیم تعدادی پارامتر است: تعداد زنبورهای دیده ور (n)، تعداد مکانهای انتخاب شده از مکانهای بازدید شده (m)، تعداد بهترین مکان ها از مکانهای انتخاب شده (e)، تعداد زنبورهای تازه نفس استخدام شده برای بهترین مکانهای e (nep)، تعداد زنبورهای استخدام شده برای سایر (m-e) مکان های انتخاب شده (nsp)، اندازه اولیه قطعه زمینها (ngh) که شامل مکان و همسایه های آن می شود و معیار توقف الگوریتم.

الگوریتم با n زنبور دیده ور که به صورت تصادفی در فضای جستجو قرار می گیرند شروع می شود . تابع شایستگی مکان هایی که توسط زنبورهای دیده ور ملاقات می شوند در مرحله 2 ارزیابی می شود.

1- مقدار دهی اولیه جمعیت با راه حلهای تصادفی

2- ارزیابی تابع شایستگی جمعیت

3- تا زمانی که (شرط توقف ملاقات نشده است)

// تشکیل جمعیت جدید.

4- انتخاب مکان هایی برای جستجوی همسایه ها

5- استخدام زنبورها برای مکانهای جدید (زنبورهای بیشتر برای بهترین مکان های e)

6- انتخاب مناسب ترین زنبور از هر قطعه زمین گل

7- تخصیص زنبورهای باقی مانده برای جستجوی تصادفی و ارزیابی شایستگی های آنها

8- پایان حلقه

در مرحله 4 زنبورهایی که بالاترین شایستگی را دارند به عنوان "زنبورهای انتخاب شده" انتخاب می شوند و مکان های ملاقات شده توسط آنها برای جستجوی همسایگی انتخاب می شود. سپس، در مرحله های 5 و 6، الگوریتم جستجوها را در همسایگی های مکانهای انتخاب شده هدایت می کند، و زنبورهای بیشتری را نزدیک بهترین مکانهای e تخصیص می دهد. زنبورها می توانند مستقیماً بر اساس شایستگی مکان هایی که آنها ملاقاتش کرده اند انتخاب شوند. متناوباً ، مقادیر شایستگی برای تعیین احتمال اینکه کدام زنبورها انتخاب خواهند شد استفاده می شوند.

جستجوها در همسایگی بهترین مکانهای e که راه حلهای امید بخشتری را ارائه می دهد ، نسبت به سایر زنبورهای انتخاب شده ، به واسطه فرستادن زنبورهای تازه نفس بیشتر برای پیروی از آنها با جزئیات بیشتری همراه می شود. همراه با دیده وری، این نفر گیری تفاضلی کلید عملیات در الگوریتم زنبور عسل است.

به هر حال، در مرحله 6 برای هر قطعه زمین تنها زنبور عسلی با بالاترین شایستگی انتخاب خواهد شد تا جمعیت زنبور عسل بعدی را تشکیل دهد. در طبیعت چنین محدودیتی وجود ندارد، این محدودیت در اینجا برای کاهش نقاط مورد کاوش قرار گرفته معرفی شده است. در مرحله 7، زنبورهای باقی مانده در جمعیت به صورت تصادفی در اطراف فضای جستجو تخصیص می یابند تا برای راه حلهای بالقوه جدید دیده وری کنند. این مراحل تا زمانی که یک معیار توقف ملاقات شود تکرار می یابد. در انتهای هر تکرار، کلونی دو بخش در جمعیت جدید خود دارد.

- نمایندگانی از هر قطعه زمین انتخاب شده و سایر زنبورهای دیده وری که برای انجام جستجوهای تصادفی تخصیص می یابند.

منبع
[عکس: matlabOpencv.gif]

« کلاس های آموزش پردازش تصویر با نرم افزار متلب »

جهت کسب اطلاعات بیشتر با شماره تلفن 09130130252 تماس حاصل فرمائید.


«جهت مشاهده سرفصل این دوره کلیک نمایید»
پاسخ
سپاس شده توسط دانش
#3
Artificial Bee Colony (ABC) Optimization Algorithm for Solving Constrained Optimization Problems
[عکس: matlabOpencv.gif]

« کلاس های آموزش پردازش تصویر با نرم افزار متلب »

جهت کسب اطلاعات بیشتر با شماره تلفن 09130130252 تماس حاصل فرمائید.


«جهت مشاهده سرفصل این دوره کلیک نمایید»
پاسخ
سپاس شده توسط
#4
C Code of the ABC algorithm
کد پی‌اچ‌پی:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <time.h>


/* Control Parameters of ABC algorithm*/
#define NP 20 /* The number of colony size (employed bees+onlooker bees)*/
#define FoodNumber NP/2 /*The number of food sources equals the half of the colony size*/
#define limit 100  /*A food source which could not be improved through "limit" trials is abandoned by its employed bee*/
#define maxCycle 2500 /*The number of cycles for foraging {a stopping criteria}*/

/* Problem specific variables*/
#define D 100 /*The number of parameters of the problem to be optimized*/
#define lb -100 /*lower bound of the parameters. */
#define ub 100 /*upper bound of the parameters. lb and ub can be defined as arrays for the problems of which parameters have different bounds*/


#define runtime 30  /*Algorithm can be run many times in order to see its robustness*/


 /*Foods is the population of food sources. Each row of Foods matrix is a vector holding D parameters*/ 
 /*to be optimized. The number of rows of Foods matrix equals to the FoodNumber*/
double Foods[FoodNumber][D];
double f[FoodNumber];  /*f is a vector holding objective function values associated with food sources */
double fitness[FoodNumber]; /*fitness is a vector holding fitness (quality) values associated with food sources*/
double trial[FoodNumber]; /*trial is a vector holding trial numbers through which solutions can not be improved*/
double prob[FoodNumber]; /*prob is a vector holding probabilities of food sources (solutions) to be chosen*/
double solution [D]; /*New solution (neighbour) produced by v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) j is a randomly chosen parameter and k is a randomlu chosen solution different from i*/
double ObjValSol/*Objective function value of new solution*/
double FitnessSol/*Fitness value of new solution*/
int neighbourparam2change/*param2change corrresponds to j, neighbour corresponds to k in equation v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij})*/
double GlobalMin/*Optimum solution obtained by ABC algorithm*/
double GlobalParams[D]; /*Parameters of the optimum solution*/
double GlobalMins[runtime]; /*GlobalMins holds the GlobalMin of each run in multiple runs*/
double r/*a random number in the range [0,1)*/

/*a function pointer returning double and taking a D-dimensional array as argument */
/*If your function takes additional arguments then change function pointer definition and lines calling "...=function(solution);" in the code*/
typedef double (*FunctionCallback)(double sol[D]); 

/*benchmark functions */
double sphere(double sol[D]);
double Rosenbrock(double sol[D]);
double Griewank(double sol[D]);
double Rastrigin(double sol[D]);

/*Write your own objective function name instead of sphere*/
FunctionCallback function = &sphere;

/*Fitness function*/
double CalculateFitness(double fun)
 {
     
double result=0;
     if(
fun>=0)
     {
         
result=1/(fun+1);
     }
     else
     {
         
result=1+fabs(fun);
     }
     return 
result;
 }

/*The best food source is memorized*/
void MemorizeBestSource()
{
   
int i,j;
    
    for(
i=0;i<FoodNumber;i++)
    {
    if (
f[i]<GlobalMin)
        {
        
GlobalMin=f[i];
        for(
j=0;j<D;j++)
           
GlobalParams[j]=Foods[i][j];
        }
    }
 }

/*Variables are initialized in the range [lb,ub]. If each parameter has different range, use arrays lb[j], ub[j] instead of lb and ub */
/* Counters of food sources are also initialized in this function*/
void init(int index)
{
   
int j;
   for (
j=0;j<D;j++)
        {
        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
Foods[index][j]=r*(ub-lb)+lb;
        
solution[j]=Foods[index][j];
        }
    
f[index]=function(solution);
    
fitness[index]=CalculateFitness(f[index]);
    
trial[index]=0;
}

/*All food sources are initialized */
void initial()
{
    
int i;
    for(
i=0;i<FoodNumber;i++)
    {
    
init(i);
    }
    
GlobalMin=f[0];
    for(
i=0;i<D;i++)
    
GlobalParams[i]=Foods[0][i];


}

void SendEmployedBees()
{
  
int i,j;
  
/*Employed Bee Phase*/
   
for (i=0;i<FoodNumber;i++)
        {
        
/*The parameter to be changed is determined randomly*/
        
= ((double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
param2change=(int)(r*D);
        
        
/*A randomly chosen solution is used in producing a mutant solution of the solution i*/
        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
neighbour=(int)(r*FoodNumber);

        
/*Randomly selected solution must be different from the solution i*/        
        
while(neighbour==i)
        {
        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
neighbour=(int)(r*FoodNumber);
        }
        for(
j=0;j<D;j++)
        
solution[j]=Foods[i][j];

        
/*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */
        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
solution[param2change]=Foods[i][param2change]+(Foods[i][param2change]-Foods[neighbour][param2change])*(r-0.5)*2;

        
/*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/
        
if (solution[param2change]<lb)
           
solution[param2change]=lb;
        if (
solution[param2change]>ub)
           
solution[param2change]=ub;
        
ObjValSol=function(solution);
        
FitnessSol=CalculateFitness(ObjValSol);
        
        
/*a greedy selection is applied between the current solution i and its mutant*/
        
if (FitnessSol>fitness[i])
        {
        
/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/
        
trial[i]=0;
        for(
j=0;j<D;j++)
        
Foods[i][j]=solution[j];
        
f[i]=ObjValSol;
        
fitness[i]=FitnessSol;
        }
        else
        {   
/*if the solution i can not be improved, increase its trial counter*/
            
trial[i]=trial[i]+1;
        }


        }

        
/*end of employed bee phase*/

}

/* A food source is chosen with the probability which is proportioal to its quality*/
/*Different schemes can be used to calculate the probability values*/
/*For example prob(i)=fitness(i)/sum(fitness)*/
/*or in a way used in the metot below prob(i)=a*fitness(i)/max(fitness)+b*/
/*probability values are calculated by using fitness values and normalized by dividing maximum fitness value*/
void CalculateProbabilities()
{
     
int i;
     
double maxfit;
     
maxfit=fitness[0];
  for (
i=1;i<FoodNumber;i++)
        {
           if (
fitness[i]>maxfit)
           
maxfit=fitness[i];
        }

 for (
i=0;i<FoodNumber;i++)
        {
         
prob[i]=(0.9*(fitness[i]/maxfit))+0.1;
        }

}

void SendOnlookerBees()
{

  
int i,j,t;
  
i=0;
  
t=0;
  
/*onlooker Bee Phase*/
  
while(t<FoodNumber)
        {

        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        if(
r<prob[i]) /*choose a food source depending on its probability to be chosen*/
        
{        
        
t++;
        
        
/*The parameter to be changed is determined randomly*/
        
= ((double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
param2change=(int)(r*D);
        
        
/*A randomly chosen solution is used in producing a mutant solution of the solution i*/
        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
neighbour=(int)(r*FoodNumber);

        
/*Randomly selected solution must be different from the solution i*/        
        
while(neighbour==i)
        {
        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
neighbour=(int)(r*FoodNumber);
        }
        for(
j=0;j<D;j++)
        
solution[j]=Foods[i][j];

        
/*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */
        
= (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
        
solution[param2change]=Foods[i][param2change]+(Foods[i][param2change]-Foods[neighbour][param2change])*(r-0.5)*2;

        
/*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/
        
if (solution[param2change]<lb)
           
solution[param2change]=lb;
        if (
solution[param2change]>ub)
           
solution[param2change]=ub;
        
ObjValSol=function(solution);
        
FitnessSol=CalculateFitness(ObjValSol);
        
        
/*a greedy selection is applied between the current solution i and its mutant*/
        
if (FitnessSol>fitness[i])
        {
        
/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/
        
trial[i]=0;
        for(
j=0;j<D;j++)
        
Foods[i][j]=solution[j];
        
f[i]=ObjValSol;
        
fitness[i]=FitnessSol;
        }
        else
        {   
/*if the solution i can not be improved, increase its trial counter*/
            
trial[i]=trial[i]+1;
        }
        } 
/*if */
        
i++;
        if (
i==FoodNumber-1)
        
i=0;
        }
/*while*/

        /*end of onlooker bee phase     */
}

/*determine the food sources whose trial counter exceeds the "limit" value. In Basic ABC, only one scout is allowed to occur in each cycle*/
void SendScoutBees()
{
int maxtrialindex,i;
maxtrialindex=0;
for (
i=1;i<FoodNumber;i++)
        {
         if (
trial[i]>trial[maxtrialindex])
         
maxtrialindex=i;
        }
if(
trial[maxtrialindex]>=limit)
{
    
init(maxtrialindex);
}
}


/*Main program of the ABC algorithm*/
int main()
{
int iter,run,j;
double mean;
mean=0;
srand(time(NULL));

for(
run=0;run<runtime;run++)
{

initial();
MemorizeBestSource();
for (
iter=0;iter<maxCycle;iter++)
    {
    
SendEmployedBees();
    
CalculateProbabilities();
    
SendOnlookerBees();
    
MemorizeBestSource();
    
SendScoutBees();
    }
for(
j=0;j<D;j++)
        {
            
printf("GlobalParam[%d]: %f\n",j+1,GlobalParams[j]);
        }
printf("%d. run: %e \n",run+1,GlobalMin);
GlobalMins[run]=GlobalMin;
mean=mean+GlobalMin;
}
mean=mean/runtime;
printf("Means of %d runs: %e\n",runtime,mean);
getch();
}


double sphere(double sol[D])
{
int j;
double top=0;
for(
j=0;j<D;j++)
{
top=top+sol[j]*sol[j];
}
return 
top;
}

double Rosenbrock(double sol[D])
{
int j;
double top=0;
for(
j=0;j<D-1;j++)
{
top=top+100*pow((sol[j+1]-pow((sol[j]),(double)2)),(double)2)+pow((sol[j]-1),(double)2);
}
return 
top;
}

 
double Griewank(double sol[D])
 {
     
int j;
     
double top1,top2,top;
     
top=0;
     
top1=0;
     
top2=1;
     for(
j=0;j<D;j++)
     {
         
top1=top1+pow((sol[j]),(double)2);
         
top2=top2*cos((((sol[j])/sqrt((double)(j+1)))*M_PI)/180);

     }    
     
top=(1/(double)4000)*top1-top2+1;
     return 
top;
 }

 
double Rastrigin(double sol[D])
 {
     
int j;
     
double top=0;

     for(
j=0;j<D;j++)
     {
         
top=top+(pow(sol[j],(double)2)-10*cos(2*M_PI*sol[j])+10);
     }
     return 
top;
 } 

منبع
[عکس: matlabOpencv.gif]

« کلاس های آموزش پردازش تصویر با نرم افزار متلب »

جهت کسب اطلاعات بیشتر با شماره تلفن 09130130252 تماس حاصل فرمائید.


«جهت مشاهده سرفصل این دوره کلیک نمایید»
پاسخ
سپاس شده توسط دانش
#5
منابع و سورس کدهای بیشتر در زمینه این الگوریتم:

ABC Algorithm Source Code by Delphi for Constrained Optimization has been released (17.05.2011)

Step by Step Procedure of ABC Algorithm

Neural Network Training by ABC algorithm, XOR Problem Example has been released (15.03.2011)

MATLAB Code of the ABC algorithm version 2 has been released (14.12.2009)

You can download the software demonstrating the scatter of bees in the search space from here

منبع
[عکس: matlabOpencv.gif]

« کلاس های آموزش پردازش تصویر با نرم افزار متلب »

جهت کسب اطلاعات بیشتر با شماره تلفن 09130130252 تماس حاصل فرمائید.


«جهت مشاهده سرفصل این دوره کلیک نمایید»
پاسخ
سپاس شده توسط ثریا حدادی
#6
با سلام و تشکر از شما

لطفا اگر سورس کدهای مطلب در این مورد را دارید برای من بر روی سایت قرار دهید .

با تشکر فراوان
پاسخ
سپاس شده توسط
#7
(05-19-2012, 09:31 PM)haghtalabi نوشته: با سلام و تشکر از شما

لطفا اگر سورس کدهای مطلب در این مورد را دارید برای من بر روی سایت قرار دهید .

با تشکر فراوان
سلام
سورس اون با مطلب رو در پست بالا قرار داده بودم.برای دانلود کافی بود بعد از باز کردن اون صفحه فرم رو پر می کردید تا لینک ها برای شما نشان داده بشه.

اما با این وجود لینک ها رو اینجا میذارم(نیازی به پرکردن فرم نیست)
MATLAB code v2 of ABC (14.12.2009)

MATLAB code v1 of ABC (30.12.2008)
[عکس: matlabOpencv.gif]

« کلاس های آموزش پردازش تصویر با نرم افزار متلب »

جهت کسب اطلاعات بیشتر با شماره تلفن 09130130252 تماس حاصل فرمائید.


«جهت مشاهده سرفصل این دوره کلیک نمایید»
پاسخ
سپاس شده توسط


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  الگوریتم ژنتیک(Genetic Algorithm) TinaSefati 7 18,274 07-14-2017, 03:12 PM
آخرین ارسال: maryam_f123
  سورس کد و آموزش های الگوریتم کلونی مورچه ها(Ant Colony Algorithm) مهرداد عباسی 31 68,634 01-25-2014, 02:36 PM
آخرین ارسال: najafi123
Smile الگوریتم های دوز بازی laleh62 0 3,513 10-04-2013, 06:14 PM
آخرین ارسال: laleh62
  مسابقات هوش مصنوعی امیرکبیر (مهما) مهدی ابراهیمی 1 4,140 07-29-2013, 06:29 PM
آخرین ارسال: مهدی ابراهیمی
  مسابقات هوش مصنوعی امیرکبیر (مهما) مهدی ابراهیمی 0 2,953 07-29-2013, 06:11 PM
آخرین ارسال: مهدی ابراهیمی
  حل مسئله جورچین با الگوریتم ژنتیک bdb 3 7,530 05-24-2013, 06:00 PM
آخرین ارسال: bdb
  پیاده سازی مسئله 8 وزیر با استفاده از الگوریتم ABC sharokh 2 8,110 12-10-2012, 05:20 PM
آخرین ارسال: FATEMEH1369
  سورس کد مسئله هشت یا n وزیر با الگوریتم ژنتیک با #C مهرداد عباسی 18 50,211 11-23-2012, 10:21 AM
آخرین ارسال: مهدی ابراهیمی
  هوش مصنوعی چیست مهدی ابراهیمی 12 19,661 02-27-2012, 09:53 PM
آخرین ارسال: مهدی ابراهیمی
  کلاس های رایگان هوش مصنوعی مهدی ابراهیمی 2 5,753 02-18-2012, 10:53 PM
آخرین ارسال: مهدی ابراهیمی

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان