Часто решение тех или иных прикладных задач может быть основано на методах и алгоритмах, которые имеют место в живой природе. Так, поиск максимума функции нескольких переменных можно организовать с помощью алгоритма роя пчел. В основе этого алгоритма находится факт, согласно которому пчелы умеют находить наиболее насыщенное цветами место, а результате чего весь рой оказывается в окрестности этого места. Предполагается, что пчелы некоторым мистическим образом общаются, в результате чего происходит обмен информацией о наиболее насыщенном цветами месте. Таким образом, все пчелы знают, где находится наиболее пригодное для сбора пыльцы место, из тех что уже исследованы каждой представительницей большого роя. Кроме того, каждая пчела помнит лучшую позицию, где она уже побывала. По этим данным пчелы корректируют свой маршрут передвижения и достаточно быстро находятся там, где больше всего пыльцы смогут собрать.

Математически это выражается следующим образом. Основная формула, согласно которой корректируется скорость пчелы, следующая (согласно, https://habrahabr.ru/post/104055/):
1111
где:
ПНП — персональная наилучшая позиция, ГНП — глобальная наилучшая позиция.
Расчет производится для каждого из N. Из этого уравнения видно, что новая скорость получается из старой скорости путем простого масштабирования на w, и прибавления направления ГНП и ПНП для этого конкретного направления. c1 и c2 — это масштабные коэффициенты, которые определяют относительное взаимное «притяжение» к ПНП и ГНП. Они иногда рассматриваются как познавательный и социальный факторы. c1 — это коэффициент, определяющий какое влияние на частицу оказывает ее память о ПНП, и c2 — коэффициент, определяющий какое влияние на частицу оказывают остальные члены роя. Увеличение c1 предполагает исследование пространства решений путем движения каждой частицы в направлении своего ПНП; увеличение c2 предполагает исследование предполагаемого глобального максимума. Функция случайных чисел rand() возвращает число в интервале между -1 и 1. В общем случае два появления функции rand() представляет собой два различных вызова функции. Большинство реализаций используют две независимые случайные величины для стохастического изменения относительного притяжения ГНП и ПНП. Это введение случайного элемента в оптимизацию предназначено для моделирования незначительного непредсказуемого компонента реального поведения роя. w называют «инерционным весом» и это число (выбранное в интервале между 0 и 1) отражает в какой мере частица остается верной своему первоначальному курсу, не подвергшемуся влиянию ГНП и ПНП.

 

Предлагаем программу, реализующую поиск максимума на плоскости алгоритмом роя пчел.

Начальный экран программы:

p1

По прошествии некоторого времени:

p2

 

Архив с программой:

roy