Скачиваний:
0
Добавлен:
12.02.2026
Размер:
1.23 Mб
Скачать

Глава 2: Разработка системы или модели

В основе алгоритма Boids лежат три следующих правила:

1. Сепарация (Separation). Каждый объект (или "boid") старается минимизировать возможность столкновения с ближайшими объектами.

2. Выравнивание (Alignment). Каждый объект стремится к тому, чтобы его направление движения было средним направлением движения объектов, находящихся поблизости.

3. Когезия (Cohesion). Каждый объект стремится к тому, чтобы его положение было близко к среднему положению объектов, находящихся поблизости.

Эти три простых правила позволяют моделировать сложное поведение стаи птиц или роя насекомых. [3–5]

Стоит отметить, что алгоритм Boids сам по себе не является алгоритмом поиска в традиционном понимании этого термина. Он не предназначен для поиска оптимального решения в заданном пространстве возможных решений, как это делают, например, алгоритмы градиентного спуска или генетические алгоритмы. Вместо этого, алгоритм Boids моделирует поведение группы агентов на основе набора простых правил, что позволяет моделировать сложное и координированное поведение на уровне группы.

Алгоритм Boids может быть адаптирован для распределенного поиска экстремума функции. В этом контексте каждый "boid" представляет собой поискового агента, который перемещается по пространству возможных решений. Вместо того, чтобы просто следовать за другими "boids", каждый агент может использовать значение функции в своем текущем положении, чтобы корректировать своё движение или учитывать приспособленность других боидов в популяции.

Работа Крейга Рейнольдса над алгоритмом Boids, который моделирует стайное поведение, вдохновила на создание концепции роевого интеллекта. Роевый интеллект описывает коллективное поведение децентрализованной самоорганизующейся системы и к ним относится алгоритм PSO.

Системы роевого интеллекта, как правило, состоят из множества агентов (боидов), локально взаимодействующих между собой и с окружающей средой. Идеи поведения, как правило, исходят от природы, а в особенности, от биологических систем. Каждый боид следует очень простым правилам и несмотря на то, что нет какой–то централизованной системы управления поведением, которая бы указывала каждому из них на то, что ему следует делать, локальные и, в некоторой степени, случайные взаимодействия приводят к возникновению интеллектуального группового поведения, неконтролируемого отдельными боидами.

Алгоритм Boids имеет достаточно много внешних параметров, и каждый из них значительно влияет на характер движения боидов. Посмотрим на эти параметры:

1. cohesionWeight – вес сцепления, определяет силу притягивания членов стаи друг к другу.

2. cohesionDist – расстояние сцепления, определяет расстояние между членами стаи, при котором они начинают притягиваться друг к другу.

3. separationWeight – вес разделения, определяет, насколько сильно члены стаи будут отталкиваться друг от друга.

4. separationDist – расстояние разделения, определяет расстояние между членами стаи, при котором они начинают отталкиваться друг от друга.

5. alignmentWeight – вес выравнивания, определяет, насколько сильно члены стаи будут выравниваться по направлению движения друг друга.

6. alignmentDist – расстояние выравнивания, определяет расстояние между членами стаи, при котором они начинают выравниваться по направлению движения друг друга.

7. minSpeed – минимальная скорость, параметр необходим для предотвращения остановки движения боидов.

8. maxSpeed – максимальную скорость, с которой может двигаться боид.

Важно провести серию экспериментов для настройки этих параметров, чтобы получить желаемое поведение стаи. Можно начать с каких–то заранее заданных и рассчитанных значений из других моделей и постепенно их корректировать, чтобы увидеть, как они влияют на поведение стаи. Стоит учитывать, что нет "правильных" или "лучших" значений параметров для алгоритма Boids в абсолютном смысле, все зависит от конкретной задачи и сценария.

Как алгоритм может работать:

1. Создаётся набор боидов (например, 100 штук), у каждого – начальное положение и скорость.

2. Для каждого боида производится поиск соседей в некотором радиусе и вычисляется три составляющие вектора движения:

 Вектор отталкивания от самых близких соседей.

 Вектор выравнивания со средней скоростью соседей.

 Вектор движения к центру масс соседей.

3. производится сложение эти векторов (обычно с разными весами, чтобы можно было регулировать, какое правило сильнее всего влияет на боид), получается итоговая скорость.

4. Меняется положение боида, исходя из обновлённой скорости.

5. производится переход к следующей итерации симуляции.

Со временем, если параметры (радиус взаимодействия, веса векторов) подобраны удачно, стая начинает двигаться согласованно и генерировать реалистичные паттерны. [5]

С привлечением современных технологий на базе уже существующих моделей была разработана программа на языке Matlab, которая симулирует движение стай на 20 разных особях в течении 200 итераций.

Она работает по тем же правилам, которые были описаны ранее. В окне программы отображаются 2 графика

На левом графике отображается 20 разноцветных кругов – это боиды. За каждым тянется цветной хвост – её путь. Стрелки показывают направление движения боида в данную итерацию

Правое окно показывает, как правила работают для одного конкретного боида (чёрный кружок). Круги разного цвета вокруг него – зоны влияния: красный круг – зона в которой боиды начинают отталкиваться друг от друга, синий круг – зона выравнивания, зелёный круг – зона, с которой боиды начинают притягиваться.

Изначально, боиды появляются в случайных местах, летят в случайных направлениях. На каждой итерации боиды проверяют наличие соседей. Далее применяются правила.

Далее обновляется положение каждого боида: Птички немного смещаются по новому направлению, после этого итерации повторяются. Сначала боиды летят хаотично, но постепенно они перестают сталкиваться (работает правило "не толкаться"), начинают лететь в одном направлении (правило "лететь в ту же сторону"), держатся группой (правило "держаться вместе").

Соседние файлы в папке Движение стай (Boids)