Алгоритъм на кукувицата (АК) е оптимизационен алгоритъм за сортиране, разработен от Син-шъ Ян (Xin-She Yang) и Суаш Деб (Suash Deb) през 2009. Той е вдъхновен от форма на гнездови паразитизъм на някои видове кукувици, които снасят яйцата си в гнезда на други видове птици-гостоприемници. Някои видове птици могат да влязат в пряк конфликт с кукувицата-натрапник. Например, ако птицата-гостоприемник открие, че яйцата в гнездото не са нейни, тя ще изхвърли чуждото яйце или просто ще напусне гнездото и ще създаде ново на друго място. Някои видове като раираната кукувица (Tapera naevia) са еволюирали по такъв начин, че женските птици напълно са се специализирали в имитирането на цветовете и шарките на яйца на няколко конкретни вида птици-гостоприемници.
Алгоритъмът на кукувицата взима метафората от този начин за размножаване и така може да приложен при многобройни оптимизационни проблеми. Неговите резултати биха могли да надминат други математически алгоритми, използвани дотогава. Алгоритъмът използва следната логика: Всяко яйце от гнездото представлява решение, а кукувичето яйце представлява ново решение. Целта е да се използва новото и потенциално по-добро решение (това на кукувицата) като заместител на не толкова добрите други решения в гнездата. В най-простата форма на алгоритъма във всяко гнездо има само едно яйце. Алгоритъмът може да бъде разгърнат и в по-сложни случаи, където в гнездото има повече от едно яйце, като всяко представлява съвкупност от решения.
Алгоритъмът се базира на три основни правила:
Като допълнение Ян и Деб откриват, че Полетът на Леви дава по-добри резултати при случайното обхождане на съвкупността от обикновеното случайно блуждаене.
Псевдокодът може да бъде обобщен по следния начин:
Обхват на функцията: Генериране на първоначална популация от на брой гнезда – домакини; While (t < крайно поколение) или (критерий за спиране) Изберане на произволна кукувица(i) и замесване на нейното решение чрез полети на Леви; Повишаване на нейното качество/способност [За максимизиране, ]; Избиране на случайно гнездо(j) от съвкупността ; if (), Заместване на j с новото решение; end if Фракцията () от най-лошите изоставени гнезда и най-ново построените; Запазване на най-добрите решения/гнезда; Подреждане на решенията/гнездата и намиране на най-добрите; Предаване на най-добрите решения на следващите поколения; end while
Важно предимство на този алгоритъм е неговата простота. Всъщност, в сравнение с други метаевристични алгоритми и популационни алгоритми, пример за които са оптимизация в рояк от частици и хармоничното търсене, тук имаме само един параметър – вероятността (освен размера на множеството ). Следователно, алгоритъмът на кукувицата е много лесен за имплементиране.
Важен момент е приложението на полета на Леви и случайните обхождания в родовото уравнение с цел получаването на нови решения:
където е резултат от стандартно нормално отклонение с медиана нула и хармонично стандартно отклонение за случайните обхождания или е резултат от отклонението на Леви за полетите на Леви. Очевидно случайните обхождания могат също да се свържат с яйцата на кукувицата и яйцата на птицата-гостоприемник, което понякога е доста трудно за имплементация. Тук размерът на стъпката определя доколко далеч може да стигне случайното обхождане при фиксиран брой на итерациите. Генерирането на размера на стъпката на Леви често е сложно. Сравнение на трите алгоритъма (включително и алгоритъма на Мантегма[1]) е извършено от Лекарди[2], който открива, че имплементацията на подхода на Чеймбърс[3] за симулирането на стабилни производни променливи е най-ефективен от гледна точка на скорост на изчисление поради ниския брой произволни числа, които са необходими.
Ако стъпката е твърде голяма, тогава новогенерираното решение ще е твърде различно от старото (или в краен случай ще излезе извън пространстовото на търсенето). В такъв случай вероятността такъв ход да бъде приет е много малка. Ако стъпката е твърде малка, промяната ще е твърде малка, за да е от значение, което прави такъв вид търсене нискоефективно. Поради тези причини размерът на стъпката е с голямо значение, ако искаме да направим търсенето възможно най-ефикасно.
Например, за прости изотропни случайни обхождания знаем, че средното изминато разстояние в d-пространството е:
където e коефициентът на ефективна дифузия. Тук е размерът на стъпката или изминатото разстояние между всеки скок и е времето, необходимо за всеки скок. Горното уравнение загатва, че[4]
За типичния мащаб за дължина L на измерението, което разглеждаме, локалното търсене е стандартно ограничено в допустимата област на . За и t=100 до 1000, имаме за d=1, и за d=10. Следователно, може да използваме s/L=0.001 to 0.01 за повечето проблеми, въпреки че точното отклонение може да изисква детайлен анализ на поведението на полетите на Леви.[5] Алгоритмичният и конвергентният анализ биха били полезни, защото има много нерешени проблеми, свързани с метаевристиката.[6]
Псевдокодът е даден като процедурна имплементация, но Ян и Деб предоставят векторна имплементация, която е много ефективна в реалния свят, ако яйцето на кукувицата много прилича на яйцата на птицата, в чието гнездо е снесла яйцето. Тогава кукувичето яйце има по-малка вероятност да бъде разкрито и по този начин работата би трябвало да бъде свързана с трудността на решенията. Също така, добра идея е да се направи произволно обхождане по диагонал с някои произволни на големина стъпки. За MATLAB имплементация, това произволно диагонално обхождане може отчасти да бъде постигнато от:
където K = rand(size(nest))>pa и pa е стъпката на откриване. Стандартният алгоритъм на кукувицата за MATLAB е достъпен.[7] Въпреки това има спор относно дали тази имплементация наистина отразява оригинално публикувания алгоритъм на кукувицата. Диагоналното обхождане описано по-горе доста прилича на друг алгоритъм за оптимизация, наречен диференциална еволюция. Показано е, че диагонално обхождане влияе повече на бързодействието на алгоритъма отколкото самият алгоритъм на кукувицата.
Обектно ориентирана имлементация на алгоритъма на кукувицата е предоставен от Баканин[8]. От друга страна, модифициран алгоритъм на кукувицата е също така имплементиран като неограничен оптимизационен проблем.[9]
Въпреки че е имало прогрес с алгоритмите, базирани на алгоритъма на кукувицата до 2009, трябват значителни усилия, за да се подобри още производителността:[10]
Сходни анализи на оригиналния алгоритъм на кукувицата и варианта с нехомогенните правила за търсене, са били представени с идеята да осигурят теоретични доказателства.[10]
Модификация на стандартния алгоритъм на кукувицата е била направена от Лалтън.[11] с идеята да увеличи сходствата. Модификацията включва допълнителна стъпка при размяната на най-горните яйца. Показано е че модифицирания алгоритъм на кукувицата (МАК) има по-добра производителност от стандартния алгоритъм на кукувицата и другите алгоритми като работи по-бързо, когато е приложен за серия от стандартни оптимизации. Впоследствие, модифицираният алгоритъм на кукувицата е прилаган за оптимизация на неструктурирани проблеми, което намалило времето за изпълнение значително. [12][13] Като добавка, друго интересно подобрение на алгоритъма на кукувицата е така наречения квантов алгоритъм на кукувицата (quantum-inspired Cuckoo Search Algorithm (QICSA)) с убедителни резултати. [14]
Многообектен алгоритъм на кукувицата е метод, разработен да решава задачи, които за да се оптимизират трябва да се вземат под внимание много фактори.[15]Този подход използва произволни тегла, за да обедини множество обекти до един-единствен. Както теглата варират произволно, Парето фронтовете могат да бъдат намерени, така че точките могат да бъдат разпределени разнопосочно през фронтовете.
Макар че алгоритъмът на кукувицата е базиран на колективно поведение от децентрализирани, самостоятелно организирани системи, той може да бъде хибридизиран с други алгоритми от този вид, като по този начин отстранява недостатъците им.[16]
Приложенията на алгоритъма на кукувицата в инженерни оптимизационни задачи са показали своята ефективност.[17] Например, за проблемите свързани с конструкцията на пружини, както и на заваряване на метални греди, АК предлага по-добри решения, отколкото съществуващите в досегашната литературата. Предложен e АК за решаване на проблеми свързани с работните графици на медицинските сестри.[18] Ефективен изчислителен подход базиран на алгоритъма на кукувицата е предложен за синтез на данни в безжични сензорни мрежи.[19][20]
Алгоритъмът на кукувицата е адаптиран да решава сложни задачи за комбинаторна оптимизация като Задача за търговския пътник.[21], за ефективно генериране на независими тестови пътеки за структурно тестване на софтуер[22], както и за генериране на тестови данни.[23][24] Алгоритъмът на кукувицата е използван за оптимизация на нано-електронна технология базирана на операционно усилвателни интегрирани вериги, като довежда до оптимални резултати много бързо и точно.[25]
Концептуално сравнение на алгоритъма на кукувицата с алгоритмите за оптимизация в рояк от частици (Particle Swarm Optimization), диференциална еволюция (Differential evolution) и Алгоритъм на изкуствените пчелни семейства (Artificial bee colony) предполага, че алгоритъмът на кукувицата и алгоритъмът на диференциалната еволюция предоставят по-добри резултати от останалите алгоритми.[26] Обширно и подробно проучване на различни проблеми, свързани със структурна оптимизация, стига до извода, че алгоритъмът на кукувицата постига по-добри резултати от други алгоритми.[27] В допълнение е разработен нов подход за софтуерно тестване базиран на него[28], както и че този алгоритъм е особено подходящ за задачи от големи мащаби (large-scale problems), което е показано в скорошно проучване.[29] Алгоритъмът на кукувицата е прилаган да обучава невронни мрежи с подобрена производителност.[30] Освен това АК се прилага успешно при обучаването на импулсни невронни модели.[31] Алгоритъмът също е използван за оптимизиране процеса на изграждане на уеб услуги.[32]
Алгоритъмът на кукувицата е надежден подход за изграждане на вградени системи (Embedded system)[33], както и за оптимално проектиране на стоманени рамки.[34]
По-нови изследвания показват, че АК може да надмине други алгоритми в приложения за фрезоване[35], гъвкави производствени системи, разпределения на работни графици[36] и други.[37] Интересно приложение на алгоритъма е за решаване на проблеми свързани с гранични стойности.[38]
Тази страница частично или изцяло представлява превод на страницата Cuckoo search в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите.
ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни. |