WedX - журнал о программировании и компьютерных науках

Алгоритм размещения N агентов в M приютах с минимальными затратами

TL;DR: Краткое описание проблемы:

Я ищу эффективный алгоритм, оптимизирующий размещение N агентов, расположенных в двумерном пространстве, в M убежищ, сводя к минимуму расстояние, которое агенты должны пройти.

Каждое убежище может содержать только 1 агента. Если N > M (агентов больше, чем доступных убежищ), то некоторые агенты не попадут в убежища (все агенты одинаковы).

(Необязательное упрощение: в то время как агенты могут свободно располагаться в 2D-пространстве, укрытия всегда располагаются на квадратной сетке. Ни один агент не находится за пределами выпуклой оболочки укрытий.)

Это все, что вам нужно знать. Однако, если вы считаете, что у этой проблемы нет эффективного решения, то вот...


более конкретная (и наиболее актуальная для меня) версия проблемы:

Имеется ровно 9 укрытий, расположенных на квадратной сетке (на расстоянии d). Все N агентов расположены вокруг центрального укрытия (в ящике размера d*d с центром вокруг центрального укрытия). Однако в этом случае центральное убежище всегда пусто, но все остальные укрытия могут быть или не быть доступными (пустыми) в начале.

Для этого случая мне нужен алгоритм, решающий проблему произвольного количества агентов N (обычно N ‹ 9) и наличия произвольных укрытий (либо всех 9, либо в крайнем случае только центрального укрытия).

Алгоритм должен быть эффективным, так как мне нужно быстро решить многие из этих задач.

Пример:

Вот пример с N=3 агентами (черные точки) и M=5 доступными убежищами (зеленые точки). Красными точками показаны недоступные убежища. пример проблемы]1 Я использую буквы для приютов и цифры для агентов.

Что я сделал на данный момент:

Я уверен, что эта проблема имеет конкретное название и уже решалась/изучалась, но я не могу найти ни ее названия, ни каких-либо решений. Мне нужно решить многие из этих проблем быстро, и я всегда хочу найти оптимальное решение (если это невозможно, достаточно и почти оптимального решения). Вот что я пробовал/думал до сих пор:

  1. Грубая сила: я знаю, что оптимальное решение задачи можно найти методом грубой силы, проверив все возможные варианты, вычислив общее расстояние перемещения для каждого и выбрав вариант с наименьшим общим расстоянием перемещения. Это может потребовать много вычислений, если M и N велики.
  2. Быстрое, но очень неоптимальное решение работает следующим образом: для каждого агента i вычислить расстояние до центрального узла E. Начиная с агента i с наименьшим расстоянием до E, назначить i его ближайшему убежищу (в данном случае: E). Затем назначьте следующего агента в его ближайшее убежище, учитывая, что E больше не доступен, и т. д., пока все агенты не будут назначены, или остановитесь, если больше нет свободных убежищ. Это работает, быстро, но, конечно, дает неоптимальные результаты (на примере изображения: 2->E, 1->B, 3->F, тогда как оптимальное решение должно быть 3->E, 2->F , 1-›Б)
  3. Еще одна идея, над которой я работаю, состоит в том, чтобы сначала найти агентов, которые находятся под наибольшим давлением, то есть все их хорошие варианты находятся далеко. Начиная с агента, находящегося под самым высоким давлением, назначьте его в ближайшее убежище. Продолжить для всех остальных агентов. Тем не менее, я не уверен, как правильно определить давление для этой проблемы, так как, вероятно, это должна быть комбинация расстояний до первых нескольких укрытий. Также я не уверен, что это приведет к оптимальному решению, но может привести к почти оптимальному решению.
  4. Я пытаюсь думать об этой проблеме как о своего рода взвешенной перестановке, то есть мне нужно выбрать N убежищ и сопоставить их с N агентами, но каждое сопоставление имеет свою цену. Мне нужно минимизировать общую стоимость, но я понятия не имею, как это сделать.
  5. Кроме того, я думаю о каком-то симулированном отжиге или о какой-то форме алгоритма «тяни-толкай», где каждое убежище привлекает агентов, или агенты привлекаются к убежищам в зависимости от их расстояния. Хотя это может показаться интересным, я ожидаю, что это неэффективно в вычислительном отношении.

Я рад любому вкладу, особенно если у этой проблемы уже есть собственное имя и решения. Я также доволен простым и быстрым алгоритмом вычислений, который дает почти оптимальное решение.


  • Возможный ответ: https://cs.stackexchange.com/questions/2771/assign-m-agents-to-n-points-by-minimizing-the-total-distance 28.10.2020
  • Спасибо за комментарий! В ответе на сообщение, на которое вы ссылаетесь, упоминается проблема назначения и венгерский алгоритм, а в другом комментарии это описывается как мин. -весовая проблема двудольного паросочетания. Я рассмотрю эти 3 направления и опубликую обновление, если найду одно из них для решения моей проблемы. Спасибо! 28.10.2020

Ответы:


1

Как было предложено в комментариях (еще раз спасибо!), на это действительно отвечает этот пост.

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

пакет python munkres реализует этот алгоритм и очень быстро решает задачу с 9 убежищами. Если приютов больше, чем агентов, пакет обрабатывает это автоматически. В случае большего количества агентов, чем укрытий, я довольствуюсь удалением случайных агентов до тех пор, пока количество агентов не сравняется с количеством укрытий. Поэтому моя проблема решена.

28.10.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]