Disponible con una licencia de Network Analyst.
Resumen
Crea una capa de análisis de red de problema de generación de rutas para vehículos (VRP) y establece sus propiedades de análisis. Una capa de análisis de un problema de generación de rutas para vehículos es útil para optimizar un conjunto de rutas que transita una flota de vehículos.
Uso
Después de crear la capa de análisis con esta herramienta, puede agregarle objetos de análisis de red usando la herramienta Agregar ubicaciones, resolver el análisis usando la herramienta Resolver y guardar los resultados en el disco usando la herramienta Guardar en archivo de capa.
-
Cuando se utiliza esta herramienta en modelos de geoprocesamiento, si el modelo se ejecuta como una herramienta, la capa de análisis de red de salida debe ser un parámetro de modelo; de lo contrario, la capa de salida no se agregará al contenido del mapa.
Sintaxis
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})
Parámetro | Explicación | Tipo de datos |
in_network_dataset | El dataset de red donde se realizará el análisis del problema de generación de rutas para vehículos. El dataset de red debe tener un atributo de coste basado en el tiempo debido a que el solucionador de VRP minimiza el tiempo. | Network Dataset Layer |
out_network_analysis_layer | El nombre de la capa de análisis de red de problema de generación de rutas para vehículos que se creará. | String |
time_impedance | El atributo de coste de tiempo utilizado para definir el tiempo de recorrido de los elementos de la red. Se requiere el atributo de coste de tiempo, dado que el solucionador del problema de generación de rutas para vehículos minimiza el tiempo. | String |
distance_impedance (Opcional) | El atributo de coste de distancia utilizado para definir la longitud de los elementos de la red. El atributo de coste de distancia es opcional. | String |
time_units (Opcional) | Las unidades de tiempo utilizadas por los campos temporales de las subcapas y tablas de la capa de análisis (clases de análisis de red). No tiene que ser igual que las unidades del atributo de coste de tiempo.
| String |
distance_units (Opcional) | Las unidades de distancia utilizadas por los campos de distancia de las subcapas y tablas de la capa de análisis (clases de análisis de red). No tiene que ser igual que las unidades del atributo de coste de distancia opcional.
| String |
default_date (Opcional) |
La fecha implícita para los valores del campo de hora sin una fecha especificada con el tiempo. Si un campo de hora de un objeto de orden, como TimeWindowStart1, tiene un valor de sólo hora, la fecha será la fecha predeterminada. Por ejemplo, si una orden tiene un valor TimeWindowStart1 de 9:00 y la fecha predeterminada es el 06.03.2013, el valor de hora completo para el campo es 9:00, 06.03.2013. La fecha predeterminada no afecta a los valores de campo de hora que ya tienen una fecha. También se puede especificar el día de la semana como fecha predeterminada utilizando las siguientes fechas.
Si el dataset de red incluye datos de tráfico, los resultados del análisis podrían cambiar dependiendo de la fecha que especifique aquí. Por ejemplo, si las rutas empiezan a las 8:00 a.m. el domingo, cuando no hay mucho tráfico, frente a las 8:00 a.m. el lunes durante la hora punta, en la ruta del lunes se tardaría más tiempo. Es más, la mejor trayectoria podría cambiar dependiendo del estado del tráfico. | Date |
capacity_count (Opcional) |
El número de dimensiones de restricción de capacidad requerido para describir los límites pertinentes de los vehículos. En un caso de entrega de orden, cada vehículo puede tener una limitación de peso y volumen que puede transportar a la vez dependiendo de las limitaciones físicas y legales. En este caso, si realiza el seguimiento del peso y volumen en las órdenes, puede utilizar estas dos capacidades para evitar una sobrecarga en los vehículos. El recuento de capacidad en este supuesto es dos (peso y volumen). Dependiendo del problema, es posible que tenga que realizar el seguimiento de distintos tipos o cantidades de capacidades. Las capacidades introducidas en los campos de capacidad (DeliveryQuantities y PickupQuantities para la clase Órdenes y Capacidades para la clase Rutas) son cadenas de números delimitadas por espacios, que pueden contener hasta el número de valores especificado en Cálculo de capacidad. Cada dimensión de capacidad debería aparecer en el mismo orden posicional para todos los valores de campo de capacidad en la misma capa de análisis de VRP. Las capacidades mismas no tienen nombre, por tanto para evitar transponer las dimensiones de capacidad accidentalmente, asegúrese de que las listas de capacidad delimitadas por espacios se introduzcan siempre en el mismo orden para todos los valores de campo de capacidad. | Long |
time_window_factor (Opcional) | Este parámetro permite considerar la importancia de respetar las ventanas de tiempo sin causar violaciones. La violación de ventana de tiempo ocurre cuando una ruta llega a una orden, depósito o corte después de que se cierra la ventana de tiempo. La violación es el intervalo entre el final de la ventana de tiempo y la hora de llegada de una ruta. La solución del VRP puede cambiar según el valor que elija para el parámetro de Importancia de la violación de la ventana de tiempo. La siguiente lista describe el significado de los valores y cómo puede variar la solución del VRP resultante:
| String |
excess_transit_factor (Opcional) | Este parámetro permite considerar la importancia de reducir el exceso de tiempo de tránsito. El exceso de tiempo de tránsito es la cantidad de tiempo que excede el tiempo requerido para viajar directamente entre las órdenes asociadas. El exceso de tiempo resulta de los descansos o viajes a otras órdenes o depósitos entre las visitas a las órdenes asociadas. La solución del VRP puede cambiar según el valor que elija para el parámetro de Importancia del exceso de tiempo de tránsito. La siguiente lista describe el significado de los valores y cómo puede variar la solución del VRP resultante:
| String |
UTurn_policy (Opcional) | Política de cambios de sentido en los cruces. Permitir cambios de sentido implica que el solucionador puede dar la vuelta en un cruce y regresar por la misma calle. Debido a que los cruces representan intersecciones de calles y callejones sin salida, los diferentes vehículos pueden ser capaces de dar la vuelta en algunos cruces, pero no en otros. Ello depende de que el cruce sea una intersección o un callejón sin salida. Para acomodar, el parámetro de la política de cambios de sentido se especifica implícitamente por la cantidad de bordes que se conectan en el cruce, que se conoce como valencia de cruce. Los valores aceptables para este parámetro se enumeran a continuación; cada uno seguido de una descripción de su significado en términos de valencia de cruce.
Si necesita una política más definida respecto a la política de cambios de sentido, considere agregar un evaluador de retraso de giro global con un atributo de coste de red, o ajustar su configuración si existe, y prestar especial atención a la configuración de los giros de 180 grados. Asimismo, examine la configuración de la propiedad CurbApproach de las ubicaciones de la red. | String |
restriction_attribute_name [restriction_attribute_name,...] (Opcional) | Lista de atributos de restricción que se aplicarán durante el análisis. | String |
hierarchy (Opcional) |
El parámetro no se utiliza si no se definen atributos de jerarquía en el dataset de red utilizado para realizar el análisis. En tales casos, utilice "#" como el valor de parámetro. | Boolean |
hierarchy_settings (Opcional) | Network Analyst Hierarchy Settings | |
output_path_shape (Opcional) |
| String |
Ejemplo de código
Ejemplo 1 de MakeVehicleRoutingProblemLayer (ventana de Python)
Ejecutar la herramienta utilizando solo los parámetros requeridos.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
"DeliveryRoutes","Minutes")
Ejemplo 2 de MakeVehicleRoutingProblemLayer (ventana de Python)
Ejecutar la herramienta utilizando todos los parámetros.
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")
Ejemplo 3 de MakeVehicleRoutingProblemLayer (flujo de trabajo)
La siguiente secuencia de comandos de Python independiente muestra cómo se puede utilizar la herramienta MakeVehicleRoutingProblemLayer para cumplir con un conjunto de órdenes con una flota de vehículos.
# 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)
Entornos
Información sobre licencias
- ArcGIS for Desktop Basic: Sí
- ArcGIS for Desktop Standard: Sí
- ArcGIS for Desktop Advanced: Sí