Представлен бенчмарк для оценки различных алгоритмов в контексте многоквадрокоптерной задачи назначения задач. Расширенная модель проблемы ориентирования команды используется для моделирования одной из таких задач. Реализованы три интеллектуальных алгоритма: Генетический алгоритм, оптимизация колоний муравьёв и частичное общественное обучение. Выполнены серии экспериментов с различными настройками для оценки этих трёх алгоритмов. Моделированная проблема и результаты оценки образуют бенчмарк, который может использоваться для оценки других алгоритмов, применяемых к задачам назначения задач для множества квадрокоптеров.
Обратите внимание, что три алгоритма выполняются на трёх ядрах процессора соответственно, что означает отсутствие параллельной оптимизации в этом бенчмарке.
Для получения более подробной информации обратитесь к статье:К. Сяо, Ж. Лю, Ю. Ние, Л. Ма, Х. Уанг и Г. Уанг, "Бенчмарк для многоквадрокоптерной задачи назначения задач расширенной проблемы ориентирования команды", 2022 China Automation Congress (CAC), Ксиамень, Китай, 2022, с. 6966-6970, DOI: 10.1109/CAC57257.2022.10054991.Препринт ArXiv arXiv:2003.09700
Ввод алгоритма включает количество квадрокоптеров (скаляр), скорости квадрокоптеров ($n \times 1$ массив), количество целей (скаляр $n$), цели (($n + 1) \times 4$ массив, первая строка — депо, первый столбец — позиция x, второй столбец — позиция y, третий столбец — вознаграждение, четвертый столбец — затраченное время на завершение миссии), временные ограничения (скаляр). Ниже приведён пример инициализации класса GA в файле ga.py
:
def __init__(self, vehicle_num, vehicles_speed, target_num, targets, time_lim):
В классе алгоритма должна быть функция run()
, которая должна возвращать план назначения задач (массив, например, [[[28, 19, 11], [25, 22, 7, 16, 17, 23], [21, 26, 12, 9, 6, 3], [5, 15, 1], [18, 20, 29]]]), где каждый подмассив представляет маршрут одного квадрокоптера), и используемое вычислительное время (скаляр).
Вы можете заменить один алгоритм ниже другим в файле evaluate.py
, а затем выполнить команду python evaluate.py
. Если вы не хотите одновременно оценивать три алгоритма, вам следует правильно модифицировать код (это легко сделать).```python
ga = GA(vehicle_num, env.vehicles_speed, target_num, env.targets, env.time_lim)
aco = ACO(vehicle_num, target_num, env.vehicles_speed, env.targets, env.time_lim)
pso = PSO(vehicle_num, target_num, env.vehicles_speed, env.targets, env.time_lim)
ga_result = p.apply_async(ga.run)
aco_result = p.apply_async(aco.run)
pso_result = p.apply_async(pso.run)
p.close()
p.join()
ga_task_assignment = ga_result.get()[0]
env.run(ga_task_assignment, 'GA', i + 1, j + 1)
re_ga[i].append((env.total_reward, ga_result.get()[1]))
env.reset()
aco_task_assignment = aco_result.get()[0]
env.run(aco_task_assignment, 'ACO', i + 1, j + 1)
re_aco[i].append((env.total_reward, aco_result.get()[1]))
env.reset()
pso_task_assignment = pso_result.get()[0]
env.run(pso_task_assignment, 'PSO', i + 1, j + 1)
re_pso[i].append((env.total_reward, pso_result.get()[1]))
Здесь нет необходимости в переводе, поскольку весь текст представляет собой код на Python, который не требует перевода.### 3. Обучение с подкреплением
В функции `Env()` файла `evaluate.py` используется метод `step` для обучения с подкреплением. Поскольку этот процесс находится в разработке, демонстрация недоступна. Если ваш алгоритм использует обучение с подкреплением, вы можете попробовать его обучить с помощью `Env()`. Ваши pull requests и issues приветствуются.
## Улучшения
Этот [репозиторий](https://github.com/dietmarwo/Multi-UAV-Task-Assignment-Benchmark) обеспечивает существенное улучшение производительности и может использоваться для высокопроизводительной работы. Благодарим [dietmarwo](https://github.com/dietmarwo) за отличную работу.
1) Алгоритм ГА использует библиотеку [numba](https://numba.pydata.org/) для значительного увеличения скорости. Параметры настроены таким образом, чтобы время выполнения оставалось прежним: размер популяции 50 -> 300, количество итераций 500 -> 6000. Поэтому ГА теперь работает значительно быстрее по сравнению с оригинальной версией.2) Эксперименты настроены таким образом, чтобы время выполнения для малых задач было сбалансировано. Это значит: увеличенное усилие для ГА, уменьшенное усилие для АКО. Для средних/больших размеров задач вы видите, какие алгоритмы плохо масштабируются: увеличение времени выполнения сверхлинейно относительно размера задачи. Избегайте этих алгоритмов при работе с большими задачами.
3) Добавляет стандартный алгоритм непрерывной оптимизации: [BiteOpt](https://github.com/avaneev/biteopt)
от Алексея Ванеева — использует ту же функцию приспособленности, что и `GA.py`.
BiteOpt является единственным включенным алгоритмом, который хорошо работает с большим размером задачи.
Это самый простой реализованный вариант, требуется только написание функции приспособленности,
поскольку мы можем использовать библиотеку непрерывной оптимизации [fcmaes](https://github.com/dietmarwo/fast-cma-es).
Выполните команду `pip install fcmaes`, чтобы использовать её.
4) Использует `NestablePool` для включения многопоточного процесса BiteOpt: много запусков оптимизации BiteOpt выполняется параллельно, а лучший результат возвращается. Установите `workers=1`, если вы хотите протестировать BiteOpt в однопоточном режиме.5) Все результаты создаются с использованием процессора AMD 5950X с 16 ядрами, который использует все ядра: 29 параллельных потока BiteOpt, остальные три алгоритма остаются однопоточными.
6) Добавлен тестовый файл `test_bite.py`, где можно отслеживать прогресс применения BiteOpt к задаче.
7) Добавлен тестовый файл `test_mode.py`, где можно отслеживать прогресс применения многокритериального оптимизатора fcmaes-MODE к задаче и сравнивать его с BiteOpt для одной и той же ситуации. fcmaes-MODE — это многокритериальный оптимизатор, применяемый к варианту задачи с несколькими целями. Цели следующие: награда (должна максимизироваться), максимальное время (должно минимизироваться), энергия (должна минимизироваться). Ограничение по времени из однокритериальной задачи всё ещё действует. Расход энергии приближенно рассчитывается как `sum(dt * v * v)`
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )