Crear capa de problema de generación de rutas para vehículos (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á a la tabla de contenido en ArcMap.
Sintaxis
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 6 de marzo de 2011, el valor de hora completo para el campo es 9:00, 6 de marzo de 2011. 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 históricos, 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. | String |
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) |
Restrinja o permita giros en U en cruces que pudieran ocurrir durante el trazado poligonal de la red entre las paradas.
| 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) |
Legado: Antes de la versión 10, este parámetro le permitía cambiar los rangos de jerarquía para su análisis de los rangos de jerarquía predeterminados establecidos en el dataset de red. En la versión 10, este parámetro ya no es compatible y se debe especificar como una cadena de caracteres vacía. Si desea cambiar los rangos de jerarquía para su análisis, actualice los rangos de jerarquía predeterminados en el dataset de red. | Network Analyst Hierarchy Settings |
output_path_shape (Opcional) |
| String |
Ejemplo de código
Ejecutar la herramienta utilizando sólo los parámetros requeridos
import arcpy arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb" arcpy.MakeVehicleRoutingProblemLayer_na("Transportation/Streets_ND", "DeliveryRoutes","Minutes")
Ejecutar la herramienta utilizando todos los parámetros
import arcpy arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb" arcpy.MakeVehicleRoutingProblemLayer_na("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")
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" outNALayer = "StoreDeliveryRoute" impedanceAttribute = "TravelTime" distanceAttribute = "Meters" timeUntis = "Minutes" distanceUntis = "Miles" inOrders = "Analysis/Stores" inDepots = "Analysis/DistributionCenter" inRoutes = "RoutesTable" orderFieldMappings = "Name Name #; ServiceTime ServiceTime #; " + \ "TimeWindowStart1 TimeStart1 #; " + \ "TimeWindowEnd1 TimeEnd1 #; MaxViolationTime1 # 0; " + \ "DeliveryQuantities Demand #" depotFieldMappings = "Name Name #; TimeWindowStart1 # 8 AM; " + \ "TimeWindowEnd1 # 5 PM" outLayerFile = "C:/data/output" + "/" + outNALayer + ".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. arcpy.MakeVehicleRoutingProblemLayer_na(inNetworkDataset,outNALayer, impedanceAttribute,distanceAttribute, timeUntis, distanceUntis, "", 1, UTurn_policy="NO_UTURNS", output_path_shape="STRAIGHT_LINES") #Load the store locations as orders. Using field mappings we map the Name, #ServiceTime, TimeWindowStart1, TimeWindowEnd1 and DeliveryQuantities #properties for Orders from the fields of store features and assign a value #of 0 to MaxViolationTime1 property arcpy.AddLocations_na(outNALayer, "Orders", 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 arcpy.AddLocations_na(outNALayer, "Depots", inDepots, depotFieldMappings,"") #Load the routes from a table containing information about routes #In this case, since the fields on the table and property names for Routes #are same, we will just use the default field mappings arcpy.AddLocations_na(outNALayer, "Routes", inRoutes, "", "") #Solve the VRP layer arcpy.Solve_na(outNALayer) #Save the solved VRP layer as a layer file on disk with relative paths arcpy.SaveToLayerFile_management(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)