الگوریتم کرم شبتاب

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

 

الگوریتم بهینه سازی اجتماع کرم شب تاب در سال 2005 توسط کریشناناند و گهوز ارائه شده است.  کریشناناند و گهوز در سال های 2006 تا 2008 مبانی نظری این الگوریتم را توسعه داده اند.

هوش توده ای (Swarm Intelligence) به طوری که در اجتماعات طبیعی بروز پیدا می کند نتیجه عمل هایی از جانب افراد توده است که بر طبق اطلاعات محلی انجام می شوند. به طور معمول رفتار توده به اهدافی پیچیده تر و در سطح توده ای راه می برد. نمونه هایی از این پدیده شامل گروه های مورچگان، زنبورهای عسل ، پرندگان و … می باشد.

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

الگوریتم GSO با قرار دادن جمعیتی n عضوی از کرم های شب تاب در نقاط مختلف فضای جستجوی مسئله بهینه سازی به صورت تصادفی آغاز می شود. در ابتدا همه ی کرم ها مقدار یکسانی از لوسی فرین به اندازه ی l در اختیار دارند. هر تکرار الگوریتم شامل یک فاز به روز کردن لوسی فرین و یک فاز به روز کردن مکان کرم ها می باشد:

 

به روز کردن لوسی فرین:

 

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

که در آن  li(t)، li(t-1) ، J(xi(t)) به ترتیب مقدار جدید لوسی فرین، مقدار قبلی لوسی فرین و برازندگی مکان کرم i در تکرار t از الگوریتم بوده و ρ  وγ اعداد ثابتی برای مدل کردن افت تدریجی و تاثیر برازندگی بر لوسی فرین می باشند.

 

حرکت کرم های شب تاب:

 

در خلال فاز حرکت، هر کرم به صورت احتمالاتی به سمت یکی از همسایگانش که لوسی فرین بالاتری دارد حرکت می کند. به این ترتیب کرم ها به سمت همسایگان با درخشندگی بیشتر حرکت می کنند. در شکل * نمایشی از همسایگی ها ،مفاهیم شعاع تصمیم و شعاع حسگری کرم ها مشاهده می شود. در قسمت b از این شکل کرم ها بر اساس میزان لوسی فرین رتبه بندی شده اند، به این صورت که کرم با شماره 1 بیشترین درخشش را دارد. شعاع تصمیم rd در واقع مشخص کننده ی محدوده ای است که کرم های در آن محدوده همسایه محسوب می شوند برای سطح لوسی فرین با کرم مورد نظر مقایسه می شوند. شعاع حسگری rs مشخص کننده ی حد بالایی برای شعاع تصمیم می باشد. در واقع در طی تکرار های الگوریتم GSO شعاع تصمیم کرم ها بسته به شرایطی که در آن قرار دارند تغییر می کند ولی به هر صورت شعاع تصمیم هر کرم از شعاع حسگری آن بیشتر نمی شود. شعاع حسگری مدل کننده حداکثر توانایی کرم ها برای مشاهده ی کرم های دیگر می باشد. در شکل 13 چهار کرم شبتاب a, b, c, d میزان لوسی فرین بیشتری نسبت به کرم شبتاب e دارند ولی کرم شبتاب e تنها در محدوده مشاهده کرم شبتاب های c و d قرار دارد و بنابراین دو جهت ممکن برای انتخاب به منظور حرکت به سمت کرم درخشنده تر پیش روی آن است.

شکل 13. (a) نمایش مفاهیم شعاع تصمیم rd و شعاع حسگری rd. برای کرم k-اُم و j-اُم نسبت به کرم i-اُم داریم: d(k,i)=d(j,i) <rs rdk <  بنابراین با توجه به اینکه کرم i در شعاع حسگری هر دو کرم k و j قرار دارد ولی شعاع تصمیم کرم k کوچکتر از فاصله لازم است بنابراین تنها کرم j از اطلاعات کرم i استفاده می کند. (b) گراف جهت دار با توجه به نسبت لوسی فرین های کرم ها در همسایگی هم، که در آن کرم ها بر اساس میزان لوسی فرین مرتب شده اند و کرم با  درخشش بیشتر با رتبه 1 نمایش داده شده است.

 

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

که در این رابطه .

Ni(t) مجموعه کرم های شبتاب همسایه کرم شبتاب i در زمان t ، dij(t) فاصله اقلیدسی بین کرم شبتاب i و j در زمان t و rdi(t)  بیانگر برد همسایگی متغیر مربوط به کرم شب تاب i در زمان t است. با فرض انتخاب شدن کرم شبتاب j توسط کرم شبتاب i (با احتمال p که از رابطه *  بدست می آید) معادله حرکت زمان-گسسته ی کرم شب تاب را می توان به شکل زیر نوشت:

که درآن xi(t) بردار m بعدی مکان کرم شب تاب i در زمان t است، ||.|| عملگر نرم اقلیدسی را نشان می دهد و s اندازه گام حرکت است.

 

به روز کردن برد همسایگی:

 

به هر کرم شبتاب i یک همسایگی تخصیص می یابد که برد شعاعی rid آن به طور طبیعی دینامیک است

(0 < rid ≤ rs). دلیل عدم استفاده از یک همسایگی ثابت نیاز به توجیه دارد، از آنجایی که کرم شب تاب ها تنها به اطلاعات محلی در همسایگی شان برای حرکت نیاز دارند، انتظار می رود تعداد قله هایی قابل شناسایی تابع برد حسگری شعاعی است. در واقع اگر برد حسگری هر کرم شبتاب کل فضای جستجو را پوشش دهد همه ی کرم ها به سمت بهینه ی سراسری حرکت می کنند و بهینه های محلی نادیده گرفته می شوند. از آنجا که اطلاعات از پیش دانسته درباره ی تابع هدف (به عنوان مثال تعداد قله ها و یا فاصله بین قله ها) برای مسئله فرض نمی شود به سادگی نمی توان برد همسایگی ثابتی مناسب برای تمامی تابع های هدف در نظر گرفت. به عنوان نمونه انتخاب برد همسایگی rd برای تابع هدف هایی با کمترین فاصله میان قله های بیشتر از rd نسبت به تابع هایی که این فاصله برای آنها کمتر از rd است مناسبتر است. بنابراین GSO از یک برد همسایگی تطبیقی برای شناسایی وجود قله های چندگانه در مسائل بهینه سازی توابع چند مد بهره می گیرد.

با فرض r0 به عنوان برد همسایگی اولیه برای هر کرم شبتاب (rid(0) = r0  )، در هر تکرار الگوریتم GSO برد همسایگی هر کرم شبتاب با توجه به رابطه زیر به روز می شود:

که در آن β پارامتری ثابت و nt پارامتری برای کنترل تعداد همسایگی ها می باشد.

 

در شکل 14 شبه کد الگوریتم GSO آمده است.

 

 

الگوریتم بهینه سازی اجتماع کرم های شب تاب:تعداد ابعاد مسئله را m در نظر بگیر.

تعداد کرم های شب تاب را n در نظر بگیر.

اندازه گام را در هر مرحله حرکت s درنظر بگیر.

مکان کرم شب تاب i در لحظه ی t را xi(t) در نظر بگیر.

کرم ها را به طور تصادفی در فضای جستجو پخش کن.

به ازای i از 1 تا n قرار بده li(0) = l0 و rid(0) = r0

تعداد حداکثر تکرار ها ی الگوریتم را برابر iter_max قرار بده.

t را مساوی 1 قرار بده.

تا زمانی که iter_max t ≤ مراحل زیر را تکرار کن:

{

برای هر کرم شب تاب i انجام بده:

 

 

برای هر کرم شب تاب i انجام بده:

{

 

 

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

 

با استفاده از مکانیزم انتخاب برحسب احتمال های محاسبه شده کرم شب تاب j را انتخاب کن.

 

 

 

 

}

t را یک واحد افزایش بده.

}

شکل 14. الگوریتم GSO

 

نتیجه ی بهینه سازی تشخیص تومور سینه با استفاده از GSO  به صورت شکل 15 بدست آمده است.

شکل 15. نتیجه ی بهینه سازی تشخیص تومور سینه با استفاده ازGSO

فلوچارت الگوریتم کرم شب تاب

پیشنهاد بهینه سازی تکاملی ترکیبی کرم شب تاب

سورس کد کرم شب تاب

//============================================================================ 
// Name        : Firefly.cpp
// Authors     : Dr. Iztok Fister and Iztok Fister Jr.
// Version     : v1.0
// Created on  : Jan 23, 2012
//============================================================================
/* Classic Firefly algorithm coded using C/C++ programming language */
/* Reference Paper*/
/*I. Fister Jr.,  X.-S. Yang,  I. Fister, J. Brest, Memetic firefly algorithm for combinatorial optimization,
in Bioinspired Optimization Methods and their Applications (BIOMA 2012), B. Filipic and J.Silc, Eds.
Jozef Stefan Institute, Ljubljana, Slovenia, 2012 */
/*Contact:
Iztok Fister (iztok.fister@uni-mb.si)
*/
#include
#include
#include
#include
#include
#include
#include
#define DUMP   1
#define MAX_FFA 1000
#define MAX_D  1000
using namespace std;
int D = 1000;                  // dimension of the problem
int n = 20;                    // number of fireflies
int MaxGeneration;             // number of iterations
int NumEval;                   // number of evaluations
int Index[MAX_FFA];            // sort of fireflies according to fitness values
double ffa[MAX_FFA][MAX_D];    // firefly agents
double ffa_tmp[MAX_FFA][MAX_D]; // intermediate population
double f[MAX_FFA];             // fitness values
double I[MAX_FFA];             // light intensity
double nbest[MAX_FFA];          // the best solution found so far
double lb[MAX_D];              // upper bound
double ub[MAX_D];              // lower bound
double alpha = 0.5;            // alpha parameter
double betamin = 0.2;           // beta parameter
double gama = 1.0;             // gamma parameter
double fbest;                  // the best objective function
typedef double (*FunctionCallback)(double sol[MAX_D]);
/*benchmark functions */
double cost(double sol[MAX_D]);
double sphere(double sol[MAX_D]);
/*Write your own objective function */
FunctionCallback function = &cost;
// optionally recalculate the new alpha value
double alpha_new(double alpha, int NGen)
{
        double delta;                  // delta parameter
        delta = 1.0-pow((pow(10.0, -4.0)/0.9), 1.0/(double) NGen);
        return (1-delta)*alpha;
}
// initialize the firefly population
void init_ffa()
{
        int i, j;
        double r;
        // initialize upper and lower bounds
        for (i=0;i
        {
               lb[i] = 0.0;
               ub[i] = 2.0;
        }
        for (i=0;i
        {
               for (j=0;j
               {
                       r = (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
                       ffa[i][j]=r*(ub[i]-lb[i])+lb[i];
               }
               f[i] = 1.0;                    // initialize attractiveness
               I[i] = f[i];
        }
}
// implementation of bubble sort
void sort_ffa()
{
        int i, j;
        // initialization of indexes
        for(i=0;i
               Index[i] = i;
        // Bubble sort
        for(i=0;i
        {
               for(j=i+1;j
               {
                       if(I[i] > I[j])
                       {
                               double z = I[i];       // exchange attractiveness
                               I[i] = I[j];
                               I[j] = z;
                               z = f[i];                      // exchange fitness
                               f[i] = f[j];
                               f[j] = z;
                               int k = Index[i];      // exchange indexes
                               Index[i] = Index[j];
                               Index[j] = k;
                       }
               }
        }
}
// replace the old population according the new Index values
void replace_ffa()
{
        int i, j;
        // copy original population to temporary area
        for(i=0;i
        {
               for(j=0;j
               {
                       ffa_tmp[i][j] = ffa[i][j];
               }
        }
        // generational selection in sense of EA
        for(i=0;i
        {
               for(j=0;j
               {
                       ffa[i][j] = ffa_tmp[Index[i]][j];
               }
        }
}
void findlimits(int k)
{
        int i;
        for(i=0;i
        {
               if(ffa[k][i]
                       ffa[k][i] = lb[i];
               if(ffa[k][i] > ub[i])
                       ffa[k][i] = ub[i];
        }
}
void move_ffa()
{
        int i, j, k;
        double scale;
        double r, beta;
        for(i=0;i
        {
               scale = abs(ub[i]-lb[i]);
               for(j=0;j
               {
                       r = 0.0;
                       for(k=0;k
                       {
                               r += (ffa[i][k]-ffa[j][k])*(ffa[i][k]-ffa[j][k]);
                       }
                       r = sqrt(r);
                       if(I[i] > I[j]) // brighter and more attractive
                       {
                               double beta0 = 1.0;
                               beta = (beta0-betamin)*exp(-gama*pow(r, 2.0))+betamin;
                               for(k=0;k
                               {
                                      r = (   (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
                                      double tmpf = alpha*(r-0.5)*scale;
                                      ffa[i][k] = ffa[i][k]*(1.0-beta)+ffa_tmp[j][k]*beta+tmpf;
                               }
                       }
               }
               findlimits(i);
        }
}
void dump_ffa(int gen)
{
        cout
}
/* display syntax messages */
void help()
{
        cout
        cout   Firefly [-h|-?] [-l] [-p] [-c] [-k] [-s] [-t]”
        cout     Parameters: -h|-? = command syntax”
        cout                              -n = number of fireflies”
        cout                              -d = problem dimension”
        cout                              -g = number of generations”
        cout                              -a = alpha parameter”
        cout                              -b = beta0 parameter”
        cout                              -c = gamma parameter”
}
int main(int argc, char* argv[])
{
        int i;
        int t = 1;             // generation  counter
         // interactive parameters handling
         for(int i=1;i
         {
            if((strncmp(argv[i], “-h”, 2) == 0) || (strncmp(argv[i], “-?”, 2) == 0))
            {
               help();
               return 0;
            }
            else if(strncmp(argv[i], “-n”, 2) == 0)         // number of fireflies
            {
               n = atoi(&argv[i][2]);
            }
            else if(strncmp(argv[i], “-d”, 2) == 0)          // problem dimension
            {
               D = atoi(&argv[i][2]);
            }
            else if(strncmp(argv[i], “-g”, 2) == 0)          // number of generations
            {
               MaxGeneration = atoi(&argv[i][2]);
            }
            else if(strncmp(argv[i], “-a”, 2) == 0)          // alpha parameter
            {
               alpha = atof(&argv[i][2]);
            }
            else if(strncmp(argv[i], “-b”, 2) == 0)          // beta parameter
            {
               betamin = atof(&argv[i][2]);
            }
            else if(strncmp(argv[i], “-c”, 2) == 0)          // gamma parameter
            {
               gama = atof(&argv[i][2]);
            }
            else
            {
               cerr
               return -1;
            }
        }
        // firefly algorithm optimization loop
        // determine the starting point of random generator
        srand(1);
        // generating the initial locations of n fireflies
        init_ffa();
#ifdef DUMP
        dump_ffa(t);
#endif
        while(t
        {
               // this line of reducing alpha is optional
               alpha = alpha_new(alpha, MaxGeneration);
               // evaluate new solutions
               for(i=0;i
               {
                        f[i] = function(ffa[i]);                        // obtain fitness of solution
                       I[i] = f[i];                                  // initialize attractiveness
               }
               // ranking fireflies by their light intensity
               sort_ffa();
               // replace old population
               replace_ffa();
               // find the current best
               for(i=0;i
                       nbest[i] = ffa[0][i];
               fbest = I[0];
               // move all fireflies to the better locations
               move_ffa();
#ifdef DUMP
               dump_ffa(t);
#endif
               t++;
        }
        cout
        return 0;
}
// FF test function
double cost(double* sol)
{
        double sum = 0.0;
        for(int i=0;i
               sum += (sol[i]-1)*(sol[i]-1);
        return sum;
}
double sphere(double* sol) {
        int j;
        double top = 0;
        for (j = 0; j
               top = top + sol[j] * sol[j];
        }
        return top;
}
فرض فرموله الگوریتم کرم شب تاب (FA)

الگوریتم کرم شب تاب (FA) یک الگوریتم metaheuristic، با الهام از رفتار های رایانه ای از کرم شب تاب است.

هدف اصلی برای فلش کرم شب تاب است که به عنوان یک سیستم سیگنال عمل می کنند برای جذب دیگر کرم شب تاب  ها است .

شین، او یانگ این الگوریتم کرم شب تاب با فرض فرموله زیر را ارائه کرد :

1.      همه کرم شب تاب ها تمایل  جنسی دارند، به طوری که یک کرم شب تاب به تمام کرم شب تاب های  دیگر را جذب میکند .

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

3.       اگر کرم شب تابی روشن تر از کرم شب تاب داده شده وجود داشته باشد آن را به طور تصادفی حرکت خواهد داد.

روشنایی باید با تابع هدف در ارتباط  باشد .

الگوریتم کرم شب تاب یک الگوریتم بهینه سازی است که از  طبیعت الهام گرفته است.

توضیحات الگوریتم :

 

الگوریتم کرم شتاب برای اولین بار توسط دوریگوDorigo)  و همکارانش به عنوان یک راه حل چند عامله (Multi Agent        برای مسائل مشکل بهینه سازی مثل فروشنده دوره گرد

  (TSP :Traveling Sales Person) ( . عامل هوشندIntelligent Agent)
ارائه شد.

موجودی است که از طریق حسگر ها قادر به درک پیرامون خود بوده و از طریق تاثیر گذارنده ها می تواند روی محیط تاثیر بگذارد. الگوریتم کرم شتاب الهام گرفته شده از مطالعات و مشاهدات روی کرم شتاب هاست. این مطالعات نشان داده که کرم شتاب ها حشراتی اجتماعی هستند که در کلونی ها زندگی می کنند و رفتار آنها بیشتر در جهت بقاء کلونی است تا درجهت بقاء یک جزء از آن. یکی از مهمترین و جالبترین رفتارکرم شتاب ها، رفتار آنها برای یافتن غذا است و بویژه چگونگی پیدا کردن کوتاهترین مسیر میان منابع غذایی و آشیانه. این نوع رفتارکرم شتاب ها دارای نوعی هوشمندی توده ای است که اخیرا مورد توجه دانشمندان قرار گرفته است.باید تفاوت هوشمندی توده ای(کلونی) و هوشمندی اجتماعی را روشن کنیم. در هوشمندی اجتماعی عناصر میزانی از هوشمندی را دارا هستند. بعنوان مثال در فرآیند ساخت ساختمان توسط انسان، زمانی که به یک کارگر گفته میشود تا یک توده آجر را جابجا کند، آنقدر هوشمند هست تا بداند برای اینکار باید از فرغون استفاده کند نه مثلا بیل!!! نکته دیگر تفاوت سطح هوشمندی افراد این جامعه است. مثلا هوشمندی لازم برای فرد معمار با یک کارگر ساده متفاوت است. در هوشمندی توده ای عناصر رفتاری تصادفی دارند و بین آن ها هیچ نوع ارتباط مستقیمی وجود ندارد و آنها تنها بصورت غیر مستقیم و با استفاده از نشانه ها با یکدیگر در تماس هستند. مثالی در این مورد رفتار موریانه ها در لانه سازی است. جهت علاقه مند شدن شما به این رفتار موریانه ها وتفاوت هوشمندی توده ای و اجتماعی توضیحاتی را ارائه می دهم : فرآیند ساخت لانه توسط موریانه ها مورد توجه دانشمندی فرانسوی به نام گرس قرار گرفت. موریانه ها برای ساخت لانه سه فعالیت مشخص از خود بروز می دهند. در ابتدا صدها موریانه به صورت تصادفی به این طرف و آن طرف حرکت می کنند. هر موریانه به محض رسیدن به فضایی که کمی بالاتر از سطح زمین قرار دارد شروع به ترشح بزاق می کنند و خاک را به بزاق خود آغشته می کنند. به این ترتیب گلوله های کوچک خاکی با بزاق خود درست می کنند. علیرغم خصلت کاملا تصادفی این رفتار، نتیجه تا حدی منظم است. در پایان این مرحله در منطقه ای محدود تپه های بسیار کوچک مینیاتوری از این گلوله های خاکی آغشته به بزاق شکل می گیرد. پس از این، همه تپه های مینیاتوری باعث می شوند تا موریانه ها رفتار دیگری از خود بروز دهند. در واقع این تپه ها به صورت نوعی نشانه برای موریانه ها عمل می کنند. هر موریانه به محض رسیدن به این تپه ها با انرژی بسیار بالایی شروع به تولید گلوله های خاکی با بزاق خود می کند. این کار باعث تبدیل شدن تپه های مینیاتوری به نوعی ستون می شود. این رفتار ادامه می یابد تا زمانی که ارتفاع هر ستون به حد معینی برسد. در این صورت موریانه ها رفتار سومی از خود نشان می دهند. اگر در نزدیکی ستون فعلی ستون دیگیری نباشد بلافاصله آن ستون را رها می کنند در غیر این صورت یعنی در حالتی که در نزدیکی این ستون تعداد قابل ملاحظه ای ستون دیگر باشد، موریانه ها شروع به وصل کردن ستونها و ساختن لانه می کنند. تفاوتهای هوشمندی اجتماعی انسان با هوشمندی توده ای موریانه را در همین رفتار ساخت لانه می توان مشاهده کرد. کارگران ساختمانی کاملا بر اساس یک طرح از پیش تعیین شده عمل می کنند، در حالی که رفتار اولیه موریانه ها کاملا تصادفی است. علاوه بر این ارتیاط مابین کارگران  سا ختمانی مستقیم و از طریق کلمات و … است ولی بین موریانه ها هیچ نوع ارتباط مستقیمی وجود ندارد و آنها تنها بصورت غیر مستقیم و از طریق نشانه ها با یکدیگر در تماس اند. گرس نام این رفتار را Stigmergie گذاشت، به معنی رفتاری که هماهنگی مابین موجودات را تنها از طریق تغییرات ایجاد شده در محیط ممکن می سازد.

 

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

مساله فروشنده دوره گرد (Traveling Salesman Problem) و یا به اختصار TSP، یکی از مسائل مشهور بهینه سازی ترکیبی است. در این مسأله، یک فروشنده دوره گرد می خواهد به چند شهر سفر کند و کالای خود را به فروش برساند. اما می بایست از تمام شهرها عبور کند، از هر شهر فقط یک بار عبور کند و با طی کوتاه ترین مسیر، سفر خود را به پایان برساند. حل این مساله کاربردهای وسیعی در حوزه های مختلف مهندسی دارد. از جمله مسائلی که از نظر ریاضی با مسأله TSP معادل هستند، می توان به حل انواع مسایل زمانبندی، مسیریابی، جایابی کالا در انبار، جایابی ماشینها در کارگاه ها، و طراحی مدارات چاپی اشاره نمود.

مطالعه پارامتری نشان می دهد که N (تعداد کرم شب تاب) باید در حدود 15 تا 40 برای اکثر مشکلات پیاده سازی پایتون نیز در دسترس است، هر چند با ویژگی های محدود

مطالعات اخیر نشان می دهد که الگوریتم کرم شب تاب بسیار کارآمد می باشد
آیا می دانید  بهتر از الگوریتم های دیگر از جمله الگوریتم اجتماع ذرات مشکل در خرید و فروش با توابع آزمون تصادفی، و به نظر میرسد که الگوریتم کرم شب تاب می توانند با توابع آزمون تصادفی بسیار کارآمد رسیدگی کند. علاوه براین بهتر است برای برخورد با مسائل بهینه سازی پر سر و صدا با سهولت اجرا باشد
چاترجی و همکاران: این نشان می دهد که الگوریتم کرم شب تاب در برخی از برنامه ها نسبت به ذرات بهینه سازی ازدحام استعلاوه بر این، الگوریتم کرم شب تاب می تواند موثر مشکلات غیر محدب با محدودیت های پیچیده غیر خطی را حل کند. بهبود بیشتر در aussi عملکرد که ممکن است با نتایج امیدوار کننده.
نسخه گسسته از الگوریتم کرم شب تاب مشتق شده است، یعنی، گسسته کرم شب تاب الگوریتم (DFA) به تازگی توسط MK پیشنهادی صیادی، R. رمضانیان و N. غفاری نسب کارآمد می تواند مشکلات برنامه ریزی NP-سخت را حل کند برای تقسیم بندی تصویر، روش بر اساس FA-به مراتب کارآمد تر به روش اوتسو و بازگشتی اوتسو در همین حال، اجرای خوبی از یک الگوریتم کرم شب تاب گسسته برای مشکلات QAP در قلمرو است، beens توسط Durkota انجام شده است.چندمنظوره FA : مطالعه قابل توجهی که  توسط FA انجام شد Apostolopoulos و Vlachos همه را  فراهم می کند که یک پس زمینه مفصل و تجزیه و تحلیل بیش از یک طیف گسترده ای از مشکلات آزمون شامل multobjective مشکل اعزام بار دارد لاگرانژ FA جالب، لاگرانژی الگوریتم کرم شب تاب پیشنهادی است برای حل سیستم قدرت بهینه سازی مشکلات واحد تعهد. هرج و مرج FA یک الگوریتم کرم شب تاب پر هرج و مرج (CFA) طراحی و توسعه یافت و به بهتر محاسبه راه حل های قبلا شناخته شده در دسترس بود. هرج و مرج FA

One thought on “الگوریتم بهینه سازی کرم شب تاب

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *