Поиск оптимальных маршрутов для выполнения парных заказов

Доступно с лицензией Network Analyst.

Цель этого упражнения — найти наиболее оптимальные маршруты для автопарка, чтобы перевозить людей, у которых нет другого доступа к транспорту, из дома до больницы для прохождения лечения. Упражнение будет выполнено путем решения задачи нахождения транспортного маршрута (VRP) с учетом парных заказов, которая связывает два последовательных заказа (остановки) так, что транспорт будет подбирать людей и доставлять их в нужную больницу. Также будут соблюдены дополнительные требования с помощью других характеристик слоя анализа задачи VRP. Например, введите максимальное время исполнения для пары заказов, чтобы транспорт не проводил слишком много времени в пути; используйте временные окна для заказов, чтобы водители не опаздывали на встречи. Некоторым людям требуются кресла-коляски, поэтому для них нужно будет отправить транспорт со специальными подъемниками для кресел-колясок. После определения маршрутов опубликуйте их в ArcGIS.com, чтобы водители могли получить к ним доступ через Navigator.

Внимание:
Если вы запускаете упражнение, используя ArcGIS Online, будут расходоваться кредиты.

Получение данных

Данные для этого учебного руководства доступны для скачивания.

  1. Перейдите на страницу загрузки данных.
  2. Щелкните Загрузить и сохраните файл на свой компьютер.
  3. Разархивируйте загруженный файл.

Создание карты

  1. Откройте ArcGIS Pro.
  2. Создайте новый проект на основе шаблона Map.aptx.

    Появится новый проект с картой.

Добавление в проект учебных данных

Набор сетевых данных – интеллектуальная модель дорожной сети. Он содержит не только местоположение и атрибуты дорог, но и информацию об отношении дорог друг к другу, например, о том, какие дороги соединены, какие повороты с одной дороги на другую разрешены, а какие запрещаются, и другие данные, влияющие на доступность различных дорог и время, проведенное в дороге. Алгоритм VRP использует набор сетевых данных, определяющий самые короткие пути между остановками.

Если вы выполняете анализ используя ArcGIS Online, механизм расчета использует высококачественный набор сетевых данных по всему миру, хранящийся в облаке ArcGIS Online, при этом расходуются кредиты ArcGIS Online. При использовании собственных данных, кредиты не расходуются, но необходимо связать свой набор сетевых данных с проектом.

Для этого добавьте набор сетевых данных на карту.

  1. На панели Каталог, находящейся по умолчанию на стороне приложения, щелкните правой кнопкой Папки и выберите Добавить подключение к папке Добавить подключение к папке.

    Появится диалоговое окно Добавить подключение к папке.

  2. Перейдите к папке, в которую вы разместили учебные данные, дважды щелкните Network Analyst и укажите Tutorial для выбора папки.
  3. Щёлкните OK.

    Будет создано подключение к папке Tutorial

  4. После этого добавьте один из наборов сетевых данных из папки на карту.

  5. На панели Каталог разверните Папки > Руководство пользователя > SanFrancisco.gdb > Транспорт.
  6. Перетащите на карту Streets_ND со значком набора сетевых данных Набор сетевых данных.

    Набор сетевых данных добавляется на панель Содержание и на карту.

  7. Щелкните правой кнопкой Streets_ND на панели Содержание и выберите Приблизить к слою Приблизить к слою, чтобы увидеть область Сан-Франциско.

    По умолчанию, наборы сетевых данных строятся с данными о дорожном движении на текущее время их добавления на карту. Этот набор сетевых данных содержит историю трафика, то есть вы можете увидеть типичные условия дорожного движения для конкретного времени и дня недели. Не все дороги набора сетевых данных содержат данные о трафике, поэтому только некоторые из них по умолчанию показываются.

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

    Просмотр набора сетевых данных не требуется для выполнения анализа, так что в последующем вы его скроете.

  8. На панели Содержание снимите отметку Streets_ND, чтобы отображать только базовую карту.
  9. Добавьте точки, которые представляют местоположения депо для машин на карте.
  10. На панели Каталог выберите Tutorial > SanFrancisco.gdb > Analysis.
  11. На панели Каталог правой кнопкой мыши щелкните слой CentralDepots и выберите Добавить к текущей картеДобавить данные.
    Примечание:

    Также можно добавить слой, перетащив его с панели Каталог на карту.

    Слой CentralDepots добавляется на панель Содержание и на карту.

Создайте слой Vehicle Routing Problem

Слой Vehicle Routing Problem (VRP) предоставляет структуру и свойства, необходимые для настройки и решения множества проблем с маршрутизацией транспортных средств. Он также содержит результаты расчета.

  1. На вкладке Анализ в группе Инструменты щелкните Сетевой анализ > Vehicle Routing Problem Задача выбора маршрута транспорта.

    Слой VRP добавляется на панели Содержание. От включает подслои со входными и выходными данными анализа.

    Маршрут основан на наборе сетевых данных San Francisco, поскольку эта сеть находилась на панели Содержание при создании слоя маршрута.

    Примечание:

    Чтобы просмотреть или изменить источник сетевых данных, который используется для создания слоя анализа сети, на вкладке Анализ в группе Инструменты щелкните ниспадающее меню Сетевой анализ и просмотрите раздел Источник сетевых данных.

  2. На панели Содержание щелкните Vehicle Routing Problem для выбора составного слоя.

    Вкладка Vehicle Routing Problem появляется в группе Сетевой анализ в верхней части ArcGIS Pro.

  3. Щелкните VRP, чтобы увидеть на вкладке элементы управления.
    Вкладка VRP

    Вы будете использовать эти элементы управления для определения модели VRP, которую вы хотите сгенерировать.

    Подсказка:

    Вкладка VRP появится только при выборе вами слоя VRP на панели Содержание. Если имеется несколько слоев VRP, для каждого имеется своя вкладка.

Добавьте заказы

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

АтрибутОписание

OrderName1

Имя пациента, которого нужно перевезти

PatientAddress

Адрес, по которому нужно забрать пациента

OrderName2

Уникальное имя адреса назначения

HospitalAddress

Адрес, по которому нужно доставить пациента

PickFrom

Самое раннее время, когда пациента можно забрать по адресу PatientAddress

PickTo

Самое позднее время, когда пациента можно забрать по адресу PatientAddress

TotalPassengers

Общее число пассажиров, которых нужно забрать

MaxTransitTime

Максимальное время, которое пациент может провести в машине

SpecialityNames

Указывает особые потребности пассажира, например, кресло-коляску

В данном случае пассажиры и больницы связаны, поскольку каждый пациент должен попасть в определенную больницу. Этот сценарий можно моделировать с помощью парных заказов, загрузив обоих пациентов и адреса больниц в классы анализа сети Заказы и связав их с новыми объектами парных заказов.

В следующих шагах адресам пациентов и больниц будут присвоены геокоды, и результирующие местоположения будут загружены как:

  1. На панели Каталог перейдите к местоположению данных учебника, найдите файл OrderPairs.xls и дважды щелкните его.

    Файл OrderPairs.xls развернётся и вы увидите таблицу Patients$.

  2. Примечание:
    Сообщение об ошибке появится, если требуемый драйвер Microsoft не установлен. Смотрите как работать с файлами Excel в ArcGIS Pro.
  3. Щелкните правой кнопкой мыши таблицу Patients$ и щелкните Геокодировать таблицу в контекстном меню.

    Откроется мастер Геокодирования таблицы. Начальная страница – это описание шагов, которые вы пройдете.

  4. Щелкните кнопку Запустить.
  5. На вопрос Являются ли данные, которые вы хотите геокодировать, одним полем или несколькими полями? выберите Одно поле в ниспадающем списке.
  6. Нажмите Далее.
  7. Щелкните кнопку Обзор рядом с параметром Входной локатор, перейдите к сохраненному местоположению учебных данных и выберите SanFranciscoLocator.
  8. Нажмите Далее.
  9. В ниспадающем списке Данные поля выберите поле PatientAddress и щелкните Далее.

    Сначала вы будете геокодировать домашние адреса пациентов.

  10. Для имени Входного поля убедитесь, что в нем указано Patients_Geocoded в качестве имени нового класса пространственных объектов, затем щелкните Готово.
  11. Просмотрите входные данные в инструменте геообработки Геокодировать таблицу и щелкните кнопку Запустить Запустить внизу панели.
    Инструмент геообработки Геокодировать таблицу с входными данными
  12. Щелкните Нет во всплывающем окне Геокодирование завершено.

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

  13. Повторите шаги с 1 по 11 со следующими изменениями, чтобы геокодировать местоположения больниц, в которые записаны пациенты:
    • В 8 шаге выберите HospitalAddress.
    • В 9 шаге измените имя Входного поля на DestinationHospitals_Geocoded.

    Вы можете обновить инструмент геообработки Геокодировать таблицу с указанными выше значениями и перезапустить инструмент, не возвращаясь назад к мастеру.

  14. На панели Содержание отключите два слоя результатов геокодирования, чтобы они стали невидимыми на карте.

    В следующих шагах эти слои будут загружены в класс анализа сети Заказы.

  15. На вкладке VRP в группе Входные данные щелкните Импорт ЗаказовИмпорт заказов.

    Появится панель Геообработка с инструментом Добавить положения. Инструмент Добавить положения загружает объекты в слой сетевого анализа, например, в слой VRP. Этот инструмент может загрузить точки, отображающие дома пациентов, в подслой Заказы.

  16. Убедитесь, что в качестве Входного слоя сетевого анализа установлен слой Vehicle Routing Problem, а в качестве ПодслояЗаказы.
  17. Щелкните стрелку ниспадающего меню под Входными местоположениями и выберите Patients_Geocoded. Это класс точечных объектов, созданный вами на предыдущих этапах, который был автоматически добавлен на карту.
  18. Под Сопоставлением полей выберите Имя из Свойств и выберите USER_OrderName1 в параметре Имя поля.
  19. Это указывает на то, что поле USER_OrderName1 в классе пространственных объектов должно быть сопоставлено с полем Имя при импорте заказов.
  20. Сопоставьте следующие поля, если они не автоматизированы:

    • Description > USER_PatientAddress
    • TimeWindowStart > USER_PickFrom
    • TimeWindowEnd > USER_PickTo
    • PickupQuantity_1 > USER_TotalPassengers

  21. Под Сопоставлением полей выберите ServiceTime из Свойств и введите 2 в параметре Значение по умолчанию.

    Все загруженные адреса пациентов имеют значение 2 для свойства ServiceTime, которое означает время (в минутах) посадки в машину для каждого пассажира.

  22. Под Сопоставлением полей выберите MaxViolationTime из Свойств и введите 0 в параметре Значение по умолчанию.

    Установив для всех свойств MaxViolationTime значение 0, инструмент решения задачи VRP будет искать только маршруты для заказов в указанное время.

  23. Оставьте заданные по умолчанию настройки для остальных параметров и щелкните кнопку Запустить Запустить внизу панели Геообработка.

    Всего в таблицу атрибутов Заказы добавлено 15 записей, которые отображаются на карте.

  24. Повторите шаги с 14 по 16 со следующими изменениями:
    • В шаге 16 выберите DestinationHospitals_Geocoded.
    • Сделайте следующие сопоставления полей:
      • Name > USER_OrderName2
      • Description > USER_HospitalAddress
      • DeliveryQuantity_1 > USER_TotalPassengers
    Примечание:
    Значение для атрибута Name должно быть уникальным в классе анализа сети Заказы. В данном случае есть несколько пациентов, которым нужно посетить одну и ту же больницу. Если бы адреса больниц использовались для выведения значения атрибута Name для Заказов, инструмент решатель VRP вернул бы сообщение об ошибке из-за повторяющихся значений Name.
  25. Оставьте заданные по умолчанию настройки для остальных параметров и щелкните кнопку Запустить Запустить внизу панели Геообработка.

    Всего в таблицу атрибутов Заказы добавлено 15 записей, которые отображаются на карте.

Добавьте парные заказы

Пассажиров нужно доставлять в определенную больницу. Добавляя объекты в класс анализа сети Пары заказов, можно указать, в какую больницу нужно отвезти пациентов и максимальное время, которое пациенты могут провести в машине в течение поездки в одну сторону.

  1. На вкладке VRP в группе Входные данные щелкните Импорт пар заказовВходные пары заказов в ниспадающем списке импорт опций.

    Импорт пар заказов из ниспадающего списка импорт опций

    Появится панель Геообработка с инструментом Добавить положения. Инструмент Добавить положения загружает объекты в слой сетевого анализа, например, в слой VRP. Ранее вы использовали этот инструмент для загрузки заказов из класса пространственных объектов. Теперь вы будете использовать его для загрузки данных в таблицу OrderPairs из таблицы Excel.

  2. Убедитесь, что в качестве Входного слоя сетевого анализа установлен слой Vehicle Routing Problem, а в качестве ПодслояOrder Pairs.
  3. Щелкните кнопку обзора рядом с полем Входные положения и перейдите к местоположению учебных данных, чтобы выбрать таблицу Patients$ из файла OrderPairs.xls.
  4. Убедитесь, что следующие сопоставления полей заполнены автоматически:
    • FirstOrderName > OrderName1
    • SecondOrderName > OrderName2
    • MaxTransitTime > MaxTransitTime
  5. Оставьте заданные по умолчанию настройки для остальных параметров и щелкните кнопку Запустить Запустить внизу панели Геообработка.

    Всего в таблицу OrderPairs добавлено 15 записей.

Добавьте депо

Логистическая компания использует машины из трех депо, указанных на слое пространственных объектов CentralDepots, который вы ранее добавили на карту. Эти точечные характеристики нужно добавить в класс анализа сети Depots.

  1. На вкладке VRP в группе Входные данные щелкните Import DepotsИмпорт станций.

    Появится панель Геообработка с инструментом Добавить положения.

  2. Убедитесь, что в качестве Входного слоя сетевого анализа установлен слой Vehicle Routing Problem, а в качестве ПодслояDepots.
  3. Щелкните стрелку ниспадающего меню под Входными местоположениями и выберите CentralDepots.
  4. Под Сопоставлением полей выберите Name из Свойств и убедитесь, что Name автоматически сопоставлено в параметре Имя поля.
  5. Оставьте заданные по умолчанию настройки для остальных параметров и щелкните кнопку Запустить Запустить внизу панели Геообработка.

    Три записи добавляются в таблицу атрибутов Depots и отображаются на карте.

Добавить маршруты

У логистической компании три машины, каждая из которых может перевозить не более шести пассажиров. Машины уезжают с автобазы и возвращаются на нее после выполнения маршрута. Одна из машин, работающих в центре, оборудована для погрузки кресел-колясок.

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

  1. На панели Содержание щелкните правой кнопкой мыши Routes и выберите Таблицу атрибутов в контекстном меню.

    Появится таблица атрибутов с входными и выходными полями для каждого маршрута.

  2. Щелкните Щелкните, чтобы добавить новую строку, чтобы добавить информацию для трех маршрутов, как показано ниже:

    NameStartDepotNameEndDepotName Capacity_1

    Центр города

    Автобаза в центре города

    Автобаза в центре города

    6

    Северная бухта

    Автобаза Северной бухты (North Bay)

    Автобаза Северной бухты (North Bay)

    6

    Восточная бухта

    Автобаза Восточной бухты (East Bay Depot)

    Автобаза Восточной бухты (East Bay Depot)

    6

    Три маршрута добавлены в таблицу атрибутов Routes

  3. Щелкните вкладку Редактирование и в группе Управление изменениями щелкните кнопку Сохранить Сохранение изменений.
  4. Щелкните Да в диалоговом окне Сохранить изменения.
  5. Закройте таблицу атрибутов Routes.

Добавьте специальные условия

Некоторые из пациентов находятся в инвалидной коляске, но только у одного из фургонов есть лифт, чтобы обеспечить легкий доступ в и из транспортного средства для этих пациентов. Поэтому вы будете устанавливать специальное условие, чтобы указать, что эти пациенты нуждаются в опции, которая предоставляется только по этому маршруту. Если вы посмотрите на документ Excel, который был предоставлен вместе с учебными данными, вы увидите, что трое пациентов нуждаются в инвалидной коляске: Тони, Тим и Билл. Кроме того, на маршруте в центре города единственный фургон с возможностью подъема инвалидной коляски. В следующем наборе шагов вы добавите значения в таблицы атрибутов Order Specialties и Route Specialties, чтобы указать эту информацию.

Сначала вы введете информацию о заказе специальных условий.

  1. На панели Содержание правой кнопкой мыши щелкните Order Specialties и выберите Открыть в контекстном меню.

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

  2. Щелкните кнопку Щелкните, чтобы добавить новую строку, чтобы добавить информацию, как показано ниже:

    OrderNameSpecialtyName

    Tony (Home)

    Wheelchair

    Tony (Doctor)

    Wheelchair

    Tim (Home)

    Wheelchair

    Tim (Doctor)

    Wheelchair

    Bill (Home)

    Wheelchair

    Bill (Doctor)

    Wheelchair

    Заказ и специальные условия добавлены в таблицу атрибутов Order Specialties

  3. Щелкните вкладку Редактирование и в группе Управление изменениями щелкните кнопку Сохранить Сохранение изменений.
  4. Щелкните Да в диалоговом окне Сохранить изменения.
  5. Закройте таблицу атрибутов Order Specialties.
  6. Теперь вы будете вводить информацию о маршрутах со специальным условием.
  7. На панели Содержание щелкните правой кнопкой мыши Route Specialties и выберите Открыть в контекстном меню.

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

  8. Щелкните кнопку Щелкните, чтобы добавить новую строку.
  9. Для RouteName, введите Downtown.
  10. Для SpecialtyName, введите Wheelchair.
  11. Щелкните вкладку Редактирование и в группе Управление изменениями щелкните кнопку Сохранить Сохранение изменений.
  12. Щелкните Да в диалоговом окне Сохранить изменения.
  13. Закройте таблицу атрибутов Route Specialties.

Добавьте зоны маршрутов

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

В этом разделе вы будете рисовать границы этих зон с помощью панели Создать объекты, однако, если у вас уже есть оцифрованные зоны, их можно импортировать с помощью инструмента геообработки Добавить положения.

  1. На вкладке VRP в группе Входные данные щелкните Создать объекты Создать объекты.

    Появится панель Создать объекты, показывающая шаблоны для классов объектов, связанных с выбранным слоем VRP.

  2. На панели Создать объекты выберите Vehicle Routing Problem : Route Zones.
  3. На карте нарисуйте многоугольник, который в общих чертах охватывает центр города, как показано ниже.
    Зона маршрута, созданная для центра города
  4. На панели Содержание щелкните правой кнопкой мыши Route Zones и выберите Таблицу атрибутов в контекстном меню.

    Появится таблица атрибутов, и вы можете ввести информацию о зоне маршрута, которую вы только что создали.

  5. Дважды щелкните в первой строке под RouteName, чтобы изменить значение и тип Downtown.

    Это название маршрута, с которым связана эта зона маршрута.

  6. Проверьте, что значение IsHardZone установлено на Drone2Map.

    Машина не может обслуживать заказы, которые не входят в зону маршрута. Если это свойство имеет значение True, то машина будет получать только те заказы, которые относятся к зоне маршрута.

  7. Повторите шаги 3–5, чтобы добавить две другие зоны маршрута: одну для района Северной бухты и другую для района Восточной бухты.

    Зона маршрута создана для Ист Бэй и Норт Бэй

  8. Щелкните вкладку Редактирование и в группе Управление изменениями щелкните кнопку Сохранить Сохранение изменений.
  9. Щелкните Да в диалоговом окне Сохранить изменения.
  10. Закройте таблицу атрибутов Route Zones.

Задайте свойства для анализа задачи выбора маршрута

Далее нужно задать свойства для анализа задачи по нахождению транспортного маршрута.

  1. На вкладке VRP в Настройках передвижения убедитесь, что Режим установлен на Время в пути.

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

  2. В группе Настройки передвижения убедитесь, что Единицы поля времени установлены на Минуты и Единицы поля расстояния установлены на Мили.
  3. В группе Данные по умолчанию выберите День недели из ниспадающего списка Тип даты по умолчанию.
  4. Из ниспадающего списка с днями недели выберите Понедельник.
  5. В группе Выходная геометрия выберите Вдоль сети из ниспадающего списка Тип линейной формы выходной геометрии.
    Примечание:

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

Запуск анализа

Запустите анализ VRP, чтобы определить наилучший маршрут.

  1. На вкладке VRP щелкните Запустить Запустить.

    Инструмент решения задачи VRP вычислит маршруты для каждой машины. Каждый маршрут начинается на автобазе, фургон подбирает одного или двух человек, если время, которое они могут провести в машине, меньше значения свойства MaxTransitTime, указанного в парном заказе, отвозит их в нужную больницу, продолжает подбирать и отвозить других людей и в конце возвращается на автобазу. Маршруты обслуживают только заказы в заданных зонах маршрутов.

    VRP решение с тремя маршрутами, обслуживающее множество заказов со специальными условиями
  2. Откройте таблицу атрибутов Orders и посмотрите, когда пациентов заберут и доставят на место назначения, в поле ArriveTime. Кроме того, вы можете получить информацию о том, сколько времени займет каждый маршрут, посмотрев в поле TotalTime.