Алгоритм кукушки (англ. Cuckoo search) — один из алгоритмов роевого интеллекта, представляет собой оптимизационный алгоритм, разработанный Янг Синьшэ (Xin-She Yang) и Суашем Дебом (Suash Deb) в 2009 году.
Вдохновением для его создания послужил гнездовой паразитизм некоторых видов кукушек, что подкладывают свои яйца в гнезда других птиц (других видов птиц). Некоторые из владельцев гнезд могут вступить в прямой конфликт с кукушками, что врываются к ним. Например, если владелец гнезда обнаружит, что яйца не его, то он или выбросит эти чужие яйца или просто покинет гнездо создаст новое где-то в другом месте.
Некоторые виды кукушек, такие как гнездовые паразиты с Нового мира, например полосатая или четырёхкрылая кукушка (Tapera naevia), эволюционировали таким образом, что самки очень часто специализируются на имитации цветов и структуры яиц избранных видов птиц-хозяев.
Для простоты описания нового алгоритма кукушки воспользуемся следующими тремя идеализированными правилами:
Схему алгоритма можно представить в следующем виде:
В природе животные ищут пищу случайным образом. В общем, путь поиска пищи животного является фактически случайным блужданием, потому что следующий ход основан на текущем местоположении и вероятности перехода на следующее местоположение. Какое направление он выбирает зависит неявно от вероятности, которая может быть смоделирована математически. Например, различные исследования показали, что полетные поведения многих животных и насекомых продемонстрировали типичные характеристики полетов Леви. Когда мы находим новое положение кукушки мы реализуем полёты Леви по следующей формуле:
Xc(t+1) = Xc(t) + α ⊕ Levy(λ)
где, t – поколение или номер итерации, a – размер шага, который зависит от масштаба задачи (обычно принимают равной единице), ⊕ - произведение Адамара.
Вместе с тем в стандартном алгоритме CS вероятность pa и параметры полёта Леви являются константами. Существует улучшенный алгоритм кукушки (Improved Cuckoo Search, ICS), который использует динамические значения этих параметров. В целях повышения точности целесообразно использовать большие значения величин pa и a, на начальных итерациях, и меньшие значения на поздних.