Создание слоя задачи маршрута транспортного средства (Make Vehicle Routing Problem Layer) (Network Analyst)

Уровень лицензии:BasicStandardAdvanced

Резюме

Создает слой сетевого анализа для выбора маршрута транспортного средства и задает его свойства. Задача выбора маршрута транспортного средства используется при оптимизации маршрутов движения транспортных средств.

ПримечаниеПримечание:

Инструменты Создать слой задачи выбора маршрута транспорта (Make Vehicle Routing Problem Layer) и Решить задачу выбора маршрута транспорта (Solve Vehicle Routing Problem) похожи, но предназначены для различных целей. Используйте инструмент Решить задачу выбора маршрута транспорта (Solve Vehicle Routing Problem) при настройке сервиса геообработки; это упростит процесс настройки. В противном случае используйте инструмент Создать слой задачи выбора маршрута транспорта (Make Vehicle Routing Problem Layer).

Для создания сервиса геообработки VRP с использованием инструмента Решить задачу выбора слоя маршрута транспорта (Solve Vehicle Routing Problem Layer) вам необходимо настроить один инструмент и опубликовать его как сервис. Иначе вам необходимо создать модель при помощи Создать слой задачи выбора маршрута транспорта (Make Vehicle Routing Problem Layer), правильно подключить ее к различным другим инструментам и опубликовать модель для создания сервиса.

Использование

Синтаксис

MakeVehicleRoutingProblemLayer_na (in_network_dataset, out_network_analysis_layer, time_impedance, {distance_impedance}, {time_units}, {distance_units}, {default_date}, {capacity_count}, {time_window_factor}, {excess_transit_factor}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape})
ПараметрОбъяснениеТип данных
in_network_dataset

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

Network Dataset Layer
out_network_analysis_layer

Имя создаваемого слоя анализа для выбора маршрута транспортного средства.

String
time_impedance

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

String
distance_impedance
(дополнительно)

Атрибут стоимости расстояния, используемый для определения длины пути по элементам сети. Атрибут стоимости расстояния является необязательным.

String
time_units
(дополнительно)

Единицы времени, используемые в полях времени вложенных слоев и таблиц слоя анализа (классов сетевого анализа). Они не обязательно должны соответствовать единицам атрибута стоимости времени.

  • Секунды (Seconds)
  • Минуты (Minutes)
  • Часы (Hours)
  • Дни (Days)
String
distance_units
(дополнительно)

Единицы расстояния, используемые в полях расстояния вложенных слоев и таблиц слоя анализа (классов сетевого анализа). Они не обязательно должны соответствовать единицам необязательного атрибута стоимости времени.

  • Мили
  • Километры
  • Футы
  • Ярды
  • Метры
  • Дюймы
  • Сантиметры
  • Миллиметры
  • Дециметры (Decimeters)
  • Морские мили
String
default_date
(дополнительно)

Предполагаемая дата для значений поля времени, которые не привязаны к дате. Если поле времени для объекта заказа, например, TimeWindowStart1, имеет значение только времени, принимается дата по умолчанию. Например, если для параметра TimeWindowStart1 задано «9:00 AM», а дата по умолчанию «6 марта 2013 года», то все значение времени будет иметь вид «9:00 A.M., March 6, 2013». Дата по умолчанию не влияет на значения в поле времени, для которых указана дата.

Также с помощью следующих дат в качестве даты по умолчанию можно указать день недели.

  • Сегодня – 12/30/1899
  • Воскресенье – 12/31/1899
  • Понедельник – 1/1/1900
  • Вторник – 1/2/1900
  • Среда – 1/3/1900
  • Четверг – 1/4/1900
  • Пятница – 1/5/1900
  • Суббота – 1/6/1900
Например, чтобы указать предполагаемую дату для значений поля времени «вторник» (Tuesday), задайте значение параметра 1/2/1900.

Если набор сетевых данных включает данные о движении, результаты анализа могут меняться в зависимости от указанной здесь даты. Например, если маршруты начинаются в 8:00 утра в воскресенье, когда дорога не слишком загруженная, то по сравнению с ними дорога в 8:00 утра в понедельник (во время часа пик) займет больше времени. Кроме того, лучший путь может меняться в зависимости от дорожных условий.

Date
capacity_count
(дополнительно)

Число измерений ограничений вместимости, необходимое для описания соответствующих лимитов транспортных средств. В случае доставки заказов у каждого транспортного средства может быть ограниченный вес и объем, которые оно может перевозить одновременно, в зависимости от физических и законодательных ограничений. В этом случае при отслеживании веса и объема заказов можно использовать эти две характеристики вместимости для предотвращения перегрузки транспортных средств. Число характеристик вместимости для этого сценария равно двум (вес и объем). В зависимости от задачи может понадобиться отслеживать разные типы величин вместимости. Характеристики вместимости, которые вводятся в поля вместимости (DeliveryQuantities и PickupQuantities для класса «Заказы» (Orders) и Capacities для класса «Маршруты» (Routes)), представляют собой разделяемые пробелами строки чисел, которые могут содержать вплоть до максимального количества значений, указанного свойством «Счетчик вместимости» (Capacity Count). Каждое измерение вместимости должно отображаться на той же позиции во всех значениях полей вместимости в одном и том же слое анализа задачи выбора маршрута транспорта. Сами характеристики вместимости не имеют имен, поэтому во избежание случайного перемещения измерений вместимости убедитесь, что разделяемые пробелами списки характеристик вместимости всегда вводятся в одинаковом порядке для всех значений полей вместимости.

Long
time_window_factor
(дополнительно)

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

Решение при выборе маршрута транспорта может меняться в соответствии с выбранным значением для параметра Важность нарушения временных окон (Time Window Violation Importance). В следующем списке перечислены значения и результаты анализа при выборе маршрута.

  • Высокий (High)Механизм расчета пытается найти решение с минимальным нарушением временных окон путем увеличения общего времени пути. Выберите Высокий (High), если прибытие вовремя важнее, чем минимизация общей стоимости решения. Это может быть необходимо, если вы встречаетесь с клиентами по вашей просьбе и не хотите создавать им неудобства в случае опоздания (альтернативным вариантом является использование жесткого временного окна, которое нельзя нарушить).При наличии других ограничений задачи выбора маршрута транспорта может быть невозможно посетить все заказы в пределах выделенных для них временных окон. В этом случае даже настройка «Высокий» (High) может вызывать нарушения.
  • Средний (Medium)Это установка по умолчанию. Механизм расчета будет стремиться найти компромиссное решение с одновременным соблюдением временных окон и обеспечением минимальной общей стоимости решения.
  • Низкий (Low)Механизм расчета пытается найти решение с минимальным общим временем пути, независимо от временных окон. Выберите Низкий (Low), если учет временных окон не столь важен, как сокращение общей стоимости решения. Этот параметр также можно использовать при накоплении отставания в обработке заказов. Для обработки как можно большего количества заказов в день и сокращения отставания можно выбрать Низкий (Low) несмотря на то, что клиенты будут испытывать неудобства из-за позднего прибытия транспортных средств.
String
excess_transit_factor
(дополнительно)

Этот параметр позволяет ранжировать важность сокращения лишнего времени в пути. Лишнее время в пути — это время сверх необходимого для перемещения от одного пункта заказа к другому. Лишнее время может возникать по причине перерывов или возвращения в гараж между парами заказов.

Решение при выборе маршрута транспорта может меняться в соответствии с выбранным значением для параметра Значимость избыточного времени нахождения в пути (Excess Transit Time Importance). В следующем списке перечислены значения и результаты анализа при выборе маршрута.

  • Высокий (High)Механизм расчета пытается найти решение с минимальным лишним временем между заказами за счет увеличения общего времени в пути. Имеет смысл использовать этот параметр при необходимости перевозки людей между парами заказов и вы хотите сократить их время в пути. Это характерно для сервисов такси.
  • Средний (Medium)Это установка по умолчанию. Механизм расчета будет стремиться найти компромиссное решение с одновременным сокращением лишнего времени и обеспечением минимальной общей стоимости решения.
  • Низкий (Low)Механизм расчета пытается найти решение с минимальной общей стоимостью, независимо от избыточного времени в пути. Этот параметр обычно используется курьерской службой. Поскольку курьерская служба перевозит грузы, а не людей, ей не приходится заботиться о времени в пути. Значение Низкий (Low) позволяет курьерской службе обрабатывать парные заказы в должной очередности с минимальной общей стоимостью решения.
String
UTurn_policy
(дополнительно)

Правила разворота на соединениях. При разрешении U-образных разворотов неявно предполагается, что механизм расчета может развернуться на соединении и продолжить движение по той же улице в обратную сторону. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Для соответствия, параметр правил разворотов в неявном виде указывает количество ребер, участвующих в соединении, что представляет собой валентность соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.

  • ALLOW_UTURNSРазвороты разрешены в соединениях с любым количеством смежных ребер. Это значение выбрано по умолчанию.
  • NO_UTURNSРазвороты запрещены во всех соединениях, вне зависимости от их валентности. Обратите внимание, что, даже при выборе этого параметра, развороты все же разрешены в сетевых положениях. Чтобы запретить развороты и в положениях сети, можно задать индивидуальное свойство положения CurbApproach.
  • ALLOW_DEAD_ENDS_ONLYРазвороты запрещены во всех соединениях, кроме тех, у которых имеется только одно смежное ребро (тупик).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYРазвороты запрещены в соединениях с ровно двумя смежными ребрами, но разрешены на перекрестках (в соединениях с тремя смежными ребрами или более) и в тупиках (соединениях с ровно одним смежным ребром). Зачастую сети имеют избыточные соединения в середине сегмента дороги. Этот вариант позволяет предотвратить развороты транспортных средств в подобных точках.
ПодсказкаПодсказка:

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

String
restriction_attribute_name
[restriction_attribute_name,...]
(дополнительно)

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

String
hierarchy
(дополнительно)
  • USE_HIERARCHY Для анализа используется атрибут иерархии. Применение иерархии приводит к предпочтению при расчете ребер высшего порядка по сравнению с ребрами низшего порядка. Расчеты с иерархией выполняются быстрее, и они могут использоваться для моделирования предпочтений водителя, который скорее выберет для проезда автостраду, нежели местную дорогу – даже если это приведет к увеличению длины пути. Данная опция доступна, если входной набор сетевых данных имеет атрибут иерархии.
  • NO_HIERARCHYДля анализа атрибут иерархии не используется. Расчет без применения иерархии дает точный маршрут для набора сетевых данных.

Параметр не используется, если атрибут иерархии не задан для набора сетевых данных, используемого для выполнения анализа. В таких случаях используйте в качестве значения параметра "#".

Boolean
hierarchy_settings
(дополнительно)

Прежние версииПрежние версии:

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

Network Analyst Hierarchy Settings
output_path_shape
(дополнительно)
  • TRUE_LINES_WITH_MEASURESПолученные маршруты будут иметь точную форму лежащих ниже источников сети. Более того, в состав результатов будут входить также измерения маршрута в системе линейных координат. Эти измерения отсчитываются от первой остановки и записывают накапливаемый импеданс для достижения данного положения.
  • TRUE_LINES_WITHOUT_MEASURESПолученные маршруты будут иметь точную форму лежащих ниже источников сети.
  • STRAIGHT_LINESНа выходе будут прямые линии формы маршрута, соединяющие пункты заказов и гараж, с учетом последовательности маршрута.
  • NO_LINESДля маршрутов на выходе форма не создается. Вы также не сможете создавать направления движения.
String

Пример кода

MakeVehicleRoutingProblemLayer , пример 1 (окно Python)

Выполните инструмент с использованием только необходимых параметров.

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
                                        "DeliveryRoutes","Minutes")
MakeVehicleRoutingProblemLayer , пример 2 (окно Python)

Выполните инструмент с использованием всех параметров.

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
                                        "FridayRoutes","Minutes","Meters",
                                        "Minutes","Miles", "1/2/1900", "1",
                                        "High","Medium","ALLOW_DEAD_ENDS_ONLY",
                                        ["Oneway"],"USE_HIERARCHY","",
                                        "TRUE_LINES_WITHOUT_MEASURES")
MakeVehicleRoutingProblemLayer , пример 3 (рабочий процесс)

В следующем автономном скрипте Python показано, как с помощью инструмента MakeVehicleRoutingProblemLayer можно создать маршрут для обработки набора заказов.

# Name: MakeVehicleRoutingProblemLayer_Workflow.py
# Description: Find the best routes for a fleet of vehicles, which is operated 
#              by a distribution company, to deliver goods from a main 
#              distribution center to a set of grocery stores.
# Requirements: Network Analyst Extension 

#Import system modules
import arcpy
from arcpy import env

try:
    #Check out the Network Analyst extension license
    arcpy.CheckOutExtension("Network")

    #Set environment settings
    env.workspace = "C:/data/SanFrancisco.gdb"
    env.overwriteOutput = True
    
    #Set local variables
    inNetworkDataset = "Transportation/Streets_ND"
    outNALayerName = "StoreDeliveryRoute"
    impedanceAttribute = "TravelTime"
    distanceAttribute = "Meters"
    timeUntis = "Minutes"
    distanceUntis = "Miles"
    inOrders = "Analysis/Stores"
    inDepots = "Analysis/DistributionCenter"
    inRoutes = "RoutesTable"
    outLayerFile = "C:/data/output/" + outNALayerName + ".lyr"
    
    #Create a new Vehicle routing problem (VRP) layer. Since the time-based 
    #attributes such as ServiceTime on orders and CostPerUnitTime on routes is 
    #recorded in minutes, we use minutes for time_units parameter. As we are 
    #using cost per unti distance in routes, we have to specify a 
    #distance attribute. The values for CostPerUnitDistance are in miles, so we 
    #specify miles for distance units parameter.
    outNALayer = arcpy.na.MakeVehicleRoutingProblemLayer(inNetworkDataset, outNALayerName,
                                                         impedanceAttribute,
                                                         distanceAttribute, timeUntis,
                                                         distanceUntis, "", 1,
                                                         UTurn_policy = "NO_UTURNS",
                                                         output_path_shape = "STRAIGHT_LINES")
    
    #Get the layer object from the result object. The VRP layer can now be
    #referenced using the layer object.
    outNALayer = outNALayer.getOutput(0)
    
    #Get the names of all the sublayers within the VRP layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Stores the layer names that we will use later
    ordersLayerName = subLayerNames["Orders"]
    depotsLayerName = subLayerNames["Depots"]
    routesLayerName = subLayerNames["Routes"]
        
    #Load the store locations as orders. Using field mappings we map the 
    #TimeWindowStart1, TimeWindowEnd1 and DeliveryQuantities 
    #properties for Orders from the fields of store features and assign a value
    #of 0 to MaxViolationTime1 property. The Name and ServiceTime properties have
    #the correct mapped field names when using the candidate fields from store
    #locations feature class.
    candidateFields = arcpy.ListFields(inOrders)
    orderFieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, ordersLayerName,
                                                       False, candidateFields)
    orderFieldMappings["TimeWindowStart1"].mappedFieldName = "TimeStart1"
    orderFieldMappings["TimeWindowEnd1"].mappedFieldName = "TimeEnd1"
    orderFieldMappings["DeliveryQuantities"].mappedFieldName = "Demand"
    orderFieldMappings["MaxViolationTime1"].defaultValue = 0
    arcpy.na.AddLocations(outNALayer, ordersLayerName, inOrders, orderFieldMappings,"")
    
    #Load the depots from the distribution center features. Using field mappings
    #we map the Name properties for Depots from the fields of distribution 
    #center features and assign a value of 8 AM for TimeWindowStart1 and a value
    #of 5PM for TimeWindowEnd2 properties
    depotFieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, depotsLayerName)
    depotFieldMappings["Name"].mappedFieldName = "Name"
    depotFieldMappings["TimeWindowStart1"].defaultValue = "8 AM"
    depotFieldMappings["TimeWindowEnd1"].defaultValue = "5 PM"
    arcpy.na.AddLocations(outNALayer, depotsLayerName, inDepots, depotFieldMappings, "")
    
    #Load the routes from a table containing information about routes
    #In this case, since the fields on the routes table and property names for 
    #Routes are same, we will just use the default field mappings
    arcpy.na.AddLocations(outNALayer, routesLayerName, inRoutes, "", "")
    
    #Solve the VRP layer
    arcpy.na.Solve(outNALayer)
    
    #Save the solved VRP layer as a layer file on disk with relative paths
    arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")
    
    print "Script completed successfully"

except Exception as e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "An error occured on line %i" % tb.tb_lineno
    print str(e)

Параметры среды

Связанные темы

Информация о лицензировании

ArcGIS for Desktop Basic: Да
ArcGIS for Desktop Standard: Да
ArcGIS for Desktop Advanced: Да
9/11/2013