Создание слоя задачи маршрута транспортного средства (Make Vehicle Routing Problem Layer) (Network Analyst)
Резюме
Создает слой сетевого анализа для выбора маршрута транспортного средства и задает его свойства. Задача выбора маршрута транспортного средства используется при оптимизации маршрутов движения транспортных средств.
Инструменты Создать слой задачи выбора маршрута транспорта (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), правильно подключить ее к различным другим инструментам и опубликовать модель для создания сервиса.
Использование
После создания слоя анализа при помощи данного инструмента, вы можете добавлять в него объекты сетевого анализа при помощи инструмента Добавить положения (Add Locations), выполнять анализ при помощи инструмента Расчет (Solve) и сохранять результаты на диске при помощи инструмента Сохранить в файл слоя (Save To Layer File).
-
При использовании данного инструмента в моделях геообработки, если модель запускается, как инструмент, то выходной слой сетевого анализа должен быть задан параметром модели, в противном случае слой не добавляется в таблицу содержания ArcMap.
Синтаксис
Параметр | Объяснение | Тип данных |
in_network_dataset |
Набор сетевых данных, для которого выполняется анализ маршрута транспортного средства. Набор сетевых данных должен содержать стоимостный атрибут на основе времени, поскольку механизм расчета задач выбора маршрута транспортного средства ориентирован на минимизацию времени. | Network Dataset Layer |
out_network_analysis_layer |
Имя создаваемого слоя анализа для выбора маршрута транспортного средства. | String |
time_impedance |
Атрибут стоимости времени, используемый для определения времени прохождения по элементам сети. Атрибут стоимости времени является обязательным, поскольку механизм решения задачи выбора маршрута транспорта ориентирован на минимизацию времени. | String |
distance_impedance (дополнительно) |
Атрибут стоимости расстояния, используемый для определения длины пути по элементам сети. Атрибут стоимости расстояния является необязательным. | String |
time_units (дополнительно) |
Единицы времени, используемые в полях времени вложенных слоев и таблиц слоя анализа (классов сетевого анализа). Они не обязательно должны соответствовать единицам атрибута стоимости времени.
| String |
distance_units (дополнительно) |
Единицы расстояния, используемые в полях расстояния вложенных слоев и таблиц слоя анализа (классов сетевого анализа). Они не обязательно должны соответствовать единицам необязательного атрибута стоимости времени.
| String |
default_date (дополнительно) |
Предполагаемая дата для значений поля времени, которые не привязаны к дате. Если поле времени для объекта заказа, например, TimeWindowStart1, имеет значение только времени, принимается дата по умолчанию. Например, если для параметра TimeWindowStart1 задано «9:00 AM», а дата по умолчанию «6 марта 2013 года», то все значение времени будет иметь вид «9:00 A.M., March 6, 2013». Дата по умолчанию не влияет на значения в поле времени, для которых указана дата. Также с помощью следующих дат в качестве даты по умолчанию можно указать день недели.
Если набор сетевых данных включает данные о движении, результаты анализа могут меняться в зависимости от указанной здесь даты. Например, если маршруты начинаются в 8:00 утра в воскресенье, когда дорога не слишком загруженная, то по сравнению с ними дорога в 8:00 утра в понедельник (во время часа пик) займет больше времени. Кроме того, лучший путь может меняться в зависимости от дорожных условий. | Date |
capacity_count (дополнительно) |
Число измерений ограничений вместимости, необходимое для описания соответствующих лимитов транспортных средств. В случае доставки заказов у каждого транспортного средства может быть ограниченный вес и объем, которые оно может перевозить одновременно, в зависимости от физических и законодательных ограничений. В этом случае при отслеживании веса и объема заказов можно использовать эти две характеристики вместимости для предотвращения перегрузки транспортных средств. Число характеристик вместимости для этого сценария равно двум (вес и объем). В зависимости от задачи может понадобиться отслеживать разные типы величин вместимости. Характеристики вместимости, которые вводятся в поля вместимости (DeliveryQuantities и PickupQuantities для класса «Заказы» (Orders) и Capacities для класса «Маршруты» (Routes)), представляют собой разделяемые пробелами строки чисел, которые могут содержать вплоть до максимального количества значений, указанного свойством «Счетчик вместимости» (Capacity Count). Каждое измерение вместимости должно отображаться на той же позиции во всех значениях полей вместимости в одном и том же слое анализа задачи выбора маршрута транспорта. Сами характеристики вместимости не имеют имен, поэтому во избежание случайного перемещения измерений вместимости убедитесь, что разделяемые пробелами списки характеристик вместимости всегда вводятся в одинаковом порядке для всех значений полей вместимости. | Long |
time_window_factor (дополнительно) |
Этот параметр позволяет ранжировать важность учета временных окон без их нарушений. Нарушение временного окна происходит в случае прибытия транспортного средства в точку заказа, в гараж или на остановку после окончания временного окна. Нарушение — это интервал времени между моментом окончания временного окна и моментом прибытия. Решение при выборе маршрута транспорта может меняться в соответствии с выбранным значением для параметра Важность нарушения временных окон (Time Window Violation Importance). В следующем списке перечислены значения и результаты анализа при выборе маршрута.
| String |
excess_transit_factor (дополнительно) |
Этот параметр позволяет ранжировать важность сокращения лишнего времени в пути. Лишнее время в пути — это время сверх необходимого для перемещения от одного пункта заказа к другому. Лишнее время может возникать по причине перерывов или возвращения в гараж между парами заказов. Решение при выборе маршрута транспорта может меняться в соответствии с выбранным значением для параметра Значимость избыточного времени нахождения в пути (Excess Transit Time Importance). В следующем списке перечислены значения и результаты анализа при выборе маршрута.
| String |
UTurn_policy (дополнительно) |
Правила разворота на соединениях. При разрешении U-образных разворотов неявно предполагается, что механизм расчета может развернуться на соединении и продолжить движение по той же улице в обратную сторону. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Для соответствия, параметр правил разворотов в неявном виде указывает количество ребер, участвующих в соединении, что представляет собой валентность соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.
Подсказка: При необходимости более точного определения правил разворотов, рассмотрите возможность добавления оценки задержек на универсальных поворотах к атрибуту сетевой стоимости или настройки его параметров, если таковой существует, а также обратите особое внимание на конфигурацию обратных поворотов. Кроме того, ознакомьтесь с заданным свойством CurbApproach для ваших сетевых положений. | String |
restriction_attribute_name [restriction_attribute_name,...] (дополнительно) |
Список атрибутов ограничений, которые будут применены во время анализа. | String |
hierarchy (дополнительно) |
Параметр не используется, если атрибут иерархии не задан для набора сетевых данных, используемого для выполнения анализа. В таких случаях используйте в качестве значения параметра "#". | Boolean |
hierarchy_settings (дополнительно) |
Прежние версии: До версии 10 данный параметр позволял вам изменять ранги иерархии для анализа, относительно рангов по умолчанию, установленных в наборе сетевых данных. В версии 10 данный параметр больше не поддерживается и должен быть указан как пустая строка. Если вам необходимо изменить ранги иерархии для анализа, обновите ранги иерархии по умолчанию в наборе сетевых данных. | Network Analyst Hierarchy Settings |
output_path_shape (дополнительно) |
| String |
Пример кода
Выполните инструмент с использованием только необходимых параметров.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
"DeliveryRoutes","Minutes")
Выполните инструмент с использованием всех параметров.
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")
В следующем автономном скрипте 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)