1classLeaderFollowerSystem: 2def__init__(self): 3self.leader=Robot("leader") 4self.followers=[Robot(f"follower_{i}")foriinrange(3)] 5 6defexecute_mission(self): 7# Лидер планирует маршрут 8path=self.leader.plan_path() 910# Последователи следуют за лидером11forfollowerinself.followers:12follower.follow_leader(self.leader.position)1314# Адаптация при смене лидера15ifself.leader.is_disabled():16self.elect_new_leader()
1classReliableCommunication: 2defsend_message(self,message,recipient): 3# Добавление контрольной суммы 4message.checksum=self.calculate_checksum(message) 5 6# Повтор при отсутствии подтверждения 7forattemptinrange(3): 8ifself.transmit(message,recipient): 9ifself.wait_for_ack(timeout=1000):10returnTrue1112returnFalse# Сообщение не доставлено1314defreceive_message(self,message):15# Проверка целостности16ifself.verify_checksum(message):17self.send_acknowledgment(message.sender)18returnmessage19else:20returnNone# Поврежденное сообщение
🌐 Топологии сети
Звезда:
1 [R2]
2 |
3[R1]─[C]─[R3] # C = центральный узел
4 |
5 [R4]
Кольцо:
1[R1]─[R2]
2 | |
3[R4]─[R3]
Полносвязная сеть:
1[R1]─[R2]
2 |\ /|
3 | X |
4 |/ \|
5[R4]─[R3]
Mesh-сеть:
1[R1]─[R2]─[R3]
2 |\ /|\ /|
3 | X | X |
4 |/ \|/ \|
5[R4]─[R5]─[R6]
🎭 Распределение ролей и задач
👔 Специализация роботов
По функциям:
Разведчики - сбор информации о местности
Рабочие - выполнение основных задач
Транспортировщики - перемещение грузов
Охранники - обеспечение безопасности
Координаторы - управление группой
По физическим характеристикам:
Летающие - воздушная разведка
Наземные - работа на поверхности
Подводные - исследование водоемов
Манипуляторы - точные операции
🔄 Динамическое распределение
Алгоритм аукциона:
1classTaskAuction: 2def__init__(self,robots): 3self.robots=robots 4self.tasks=[] 5 6defassign_task(self,task): 7# Запрос ставок от всех роботов 8bids={} 9forrobotinself.robots:10ifrobot.can_perform(task):11bid=robot.calculate_bid(task)12bids[robot.id]=bid1314# Выбор лучшей ставки15ifbids:16winner=min(bids.keys(),key=lambdax:bids[x])17self.robots[winner].assign_task(task)18returnwinner1920returnNone# Задачу некому выполнить2122defcalculate_bid(self,robot,task):23# Учитываем расстояние, загрузку, специализацию24distance_cost=robot.distance_to(task.location)25workload_cost=robot.current_workload*226specialization_bonus=-10ifrobot.specialized_for(task)else02728returndistance_cost+workload_cost+specialization_bonus
⚖️ Балансировка нагрузки
Проблема:
Некоторые роботы перегружены, другие простаивают
Решение - миграция задач:
1defbalance_workload(robots): 2# Находим перегруженных и недогруженных роботов 3overloaded=[rforrinrobotsifr.workload>0.8] 4underloaded=[rforrinrobotsifr.workload<0.3] 5 6# Перераспределяем задачи 7forbusy_robotinoverloaded: 8forfree_robotinunderloaded: 9# Ищем задачи, которые может выполнить свободный робот10transferable_tasks=busy_robot.get_transferable_tasks()1112fortaskintransferable_tasks:13iffree_robot.can_perform(task):14busy_robot.transfer_task(task,free_robot)15break
🚨 Обработка отказов
Обнаружение отказа:
1classFailureDetector: 2def__init__(self,robots): 3self.robots=robots 4self.heartbeat_timeout=5.0# секунд 5 6defmonitor_robots(self): 7forrobotinself.robots: 8time_since_heartbeat=time.now()-robot.last_heartbeat 910iftime_since_heartbeat>self.heartbeat_timeout:11self.handle_robot_failure(robot)1213defhandle_robot_failure(self,failed_robot):14# Перераспределяем задачи отказавшего робота15fortaskinfailed_robot.active_tasks:16self.reassign_task(task)1718# Уведомляем остальных роботов19self.broadcast_failure_notification(failed_robot.id)2021# Перестраиваем формацию если нужно22iffailed_robot.role=="leader":23self.elect_new_leader()
🛠️ Практическая работа
📋 Сценарии для разработки
🔥 Сценарий 1: “Команда пожарных роботов”
1 разведчик-дрон
2 наземных робота с огнетушителями
1 координатор-диспетчер
Задача: потушить лесной пожар
🏗️ Сценарий 2: “Строительная бригада”
1 робот-архитектор (планирование)
3 робота-строителя (сборка)
2 робота-транспортера (доставка материалов)
Задача: построить сооружение
🗺️ Сценарий 3: “Исследователи пещеры”
2 робота-картографа
1 робот с буровым оборудованием
1 робот-аналитик (анализ образцов)
Задача: исследовать неизвестную пещеру
📊 Структура модели
Обязательные компоненты:
1. Состав команды:
Количество и типы роботов
Специализация каждого робота
Техническое оснащение
2. Архитектура взаимодействия:
Централизованная/децентрализованная
Схема коммуникации
Иерархия управления
3. Протоколы связи:
Типы сообщений
Формат данных
Обработка ошибок
4. Распределение задач:
Алгоритм назначения
Приоритеты выполнения
Механизм перераспределения
⏱️ План работы (30 минут)
1Этап 1: Планирование (5 мин)
2• Выбор сценария
3• Определение состава команды
4• Распределение ролей в группе
5 6Этап 2: Проектирование (15 мин)
7• Разработка архитектуры взаимодействия
8• Создание протоколов коммуникации
9• Планирование распределения задач
1011Этап 3: Моделирование (7 мин)
12• Проверка модели на разных ситуациях
13• Анализ возможных проблем
14• Оптимизация решения
1516Этап 4: Подготовка презентации (3 мин)
17• Оформление схемы
18• Подготовка объяснения
🎤 Презентация моделей
📊 Защита проектов
План выступления (3 минуты на группу):
Сценарий - какую задачу решает команда роботов?
Состав - сколько и каких роботов в команде?
Архитектура - как организовано взаимодействие?
Коммуникация - как роботы обмениваются информацией?