Я пытаюсь написать программу для размещения студентов в автомобилях для приведения в движение на мероприятие. У меня есть адреса для каждого учащегося, и я могу геокодировать каждый адрес, чтобы получить координаты (адреса достаточно близки, чтобы я мог просто использовать евклидовы расстояния между координатами.) Некоторые из студентов имеют автомобили и могут управлять другими. Как я могу эффективно группировать студентов в автомобилях? Я знаю, что группирование обычно выполняется с использованием таких алгоритмов, как K-Mean, но я могу только найти алгоритмы для группировки N точек в M произвольных групп. Мои группы имеют определенный размер и расположение. Где я могу начать? Я просто жадный алгоритм гарантирует, что первые назначенные автомобили имеют минимальную дистанцию, но, как я полагаю, средний уровень будет высоким.Специальный случай группировки координат
ответ
Скажите, что вы пытаетесь свести к минимуму пройденное пройденное расстояние. Очевидно, что проблема коммивояжера - это особый случай вашей проблемы, поэтому ваша проблема NP-hard. Это ставит нас в область алгоритмов эвристики/аппроксимации.
Проблема также требует некоторой дополнительной спецификации, например, как много студентов могут поместиться в данной машине. Скажем, сколько угодно.
Как насчет того, чтобы вы разрешили его как минимальное остовное дерево, укорененное в конечном месте назначения. Тогда каждый ученик с автомобилем отвечает за сбор всех своих дочерних узлов. Таким образом, общее расстояние пробегалось не более чем на 2x общей длины остовного дерева, которое находится там непосредственно. Конечно, это смешно, потому что узлы рядом с корнем будут управлять мега-автобусом вместо автомобиля в этом случае.
Итак, вы начинаете играть в упаковочную игру, где вы пытаетесь заполнить автомобили жадно.
Я знаю, что это не решение, но это может помочь вам лучше определить проблему.
Это старый вопрос, но, поскольку я нашел его, другие будут также.
Группа студентов вместе на расстоянии. Найдите расстояние между всеми наборами двух учеников. Начните с самых близких учеников и добавьте их в группу и продолжайте добавлять до тех пор, пока все учащиеся не станут группами. Если ученики находятся за пределами порогового расстояния, например, 50 миль, не объединяйте их в группу (это приведет к тому, что несколько учеников пойдут соло). Если у студентов есть автомобили различного размера, прекратите добавлять их, когда максимальный размер автомобиля достигнут между учащимися в группе (и в зависимости от того, что вы пытаетесь добавить).
Для поиска оптимального (вы спросили об эффективном) решении потребуется более определенная проблема, которая кажется, что у вас ее нет. Если бы вы хотели устранить отдельные драйверы, хотя, взяв вышеуказанное решение и специальный корпус, выбросы, работая их индивидуально в группы и заменяя людей вокруг смежных групп, чтобы соответствовать им, могли найти очень сильное решение.
- 1. MySQL специальный случай pivot
- 2. Специальный случай краха OpenMP
- 3. специальный случай умножения матрицы
- 4. Обращение с автозагрузкой специальный случай
- 5. Двоичный дерево поиска специальный случай
- 6. Специальный случай с линеарным программированием
- 7. Специальный случай умножения матрицы Используя CUDA
- 8. Разделить абзацы на предложения - специальный случай
- 9. Автоматизация проверки в Yii (специальный случай)
- 10. Java generics - специальный случай расширенного и суперпотребления
- 11. Счетные инверсии в массиве - специальный случай
- 12. Symfony2 get parameters.yml в сущности, специальный случай
- 13. Специальный случай в методе общего класса C#
- 14. Именование пакетов Java. Подчеркивания: Специальный случай
- 15. Импорт модуля из другой папки: специальный случай
- 16. Java группировки координат на основе массива позиций
- 17. r: как сделать умножение матрицы быстрее (специальный случай)
- 18. R - обработка первого элемента списка как специальный случай
- 19. Добавить специальный случай для запроса мощности BI (M)
- 20. Должно ли разделение на один получить специальный случай?
- 21. Если строка является подстрокой некоторой строки в python: специальный случай
- 22. file_get_contents - Специальные символы в URL-адресе - Специальный случай
- 23. Что такое специальный случай, который делает `str1 == str2` логической ошибкой?
- 24. iPhone Objective-C конвертировать строку в NSDate * специальный случай
- 25. Нарезка строки Python, специальный случай, если конец строки включен?
- 26. css Другой случай заполнения оставшейся высоты, но специальный
- 27. Для петли в R (специальный случай: процесс Винера)
- 28. Специальный случай при вызове InvokeScript с помощью элемента управления WebBrowser
- 29. ngRepeat: обман даже с треком по индексу $ (специальный случай)
- 30. leafref внутри группировки для группировки
Вы даже хотите минимизировать пройденное расстояние? Я вижу, что какой-то студент довольно раздражен, если, чтобы свести к минимуму общее число, один человек заканчивает езду по всему городу. –
Я пытаюсь наиболее эффективно разместить студентов в автомобилях. Часть вопроса включает в себя выяснение, что именно это означает, потому что я честно не могу сказать сам. Это для того, чтобы сделать автомобиль * в каком-то месте, поэтому у меня также есть конечный пункт назначения, который может перекосить вещи. Я хочу, чтобы лучшее решение сидило с листом Excel и Google Earth и имело на нем. – dlras2