Crear capa de problema de generación de rutas para vehículos (ArcGIS 10.1 Network Analyst)

Nivel de licencia:BasicStandardAdvanced

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.

NotaNota:

Las herramientas Crear capa de problema de generación de rutas para vehículos y Resolver problema de generación de rutas para vehículos son similares, pero están diseñadas para diferentes propósitos. Utilice la herramienta Resolver problema de generación de rutas para vehículos si está configurando un servicio de geoprocesamiento; esto simplificará el proceso de instalación. De lo contrario, utilice la herramienta Crear capa de problema de generación de rutas para vehículos.

Para crear un servicio de geoprocesamiento de VRP utilizando la capa Resolver problema de generación de rutas para vehículos, solo necesita configurar una herramienta y publicarla como un servicio. En cambio, debe crear un modelo con Crear capa de problema de generación de rutas para vehículos, conectarla debidamente a diversas herramientas, y publicar el modelo para crear un servicio.

Uso

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ámetroExplicaciónTipo 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.

  • Segundos
  • Minutos
  • Horario
  • Días
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.

  • Millas
  • Kilómetros
  • Pies
  • Yardas
  • Metros
  • Pulgadas
  • Centímetros
  • Milímetros
  • Decímetros
  • Millas náuticas
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.

  • Hoy, 30/12/1899
  • Domingo, 31/12/1899
  • Lunes, 1/1/1900
  • Martes, 2/1/1900
  • Miércoles, 3/1/1900
  • Jueves, 4/1/1900
  • Viernes, 5/1/1900
  • Sábado, 6/1/1900
Por ejemplo, para especificar que la fecha implícita para los valores de campo de hora sea el martes, especifique el valor de parámetro como 2/1/1900.

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:

  • AltoEl solucionador intenta encontrar una solución que minimice las violaciones de ventana de tiempo a costa de incrementar el tiempo total del viaje. Elija Alto si considera que llegar a tiempo a las órdenes es más importante que minimizar el coste total de la solución. Un ejemplo de esto es cuando se encuentra con los clientes en las órdenes y no desea causarles una molestia con una llegada tarde (otra opción es usar ventanas de tiempo estrictas que no se puedan violar de ninguna manera).Dadas otras restricciones de un problema de generación de rutas para vehículos, podría resultar imposible visitar todas las órdenes dentro de sus ventanas de tiempo. Incluso en este caso, un parámetro Alta podría provocar infracciones.
  • Medioes la configuración predeterminada. El solucionador busca un equilibrio entre cumplir con las ventanas de tiempo y reducir el costo total de la solución.
  • BajoEl solucionador intenta encontrar una solución que minimice el tiempo total del viaje, independientemente de las ventanas de tiempo. Elija Bajo si considera que respetar las ventanas de tiempo es menos importante que reducir el coste total de la solución. Puede utilizar esta configuración si tiene varios trabajos atrasados de solicitudes de servicio. Para poder cumplir con más órdenes en un día y reducir el trabajo atrasado, puede elegir Bajo aunque los clientes sufran las molestias de las llegadas tarde de la flota.
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:

  • AltoEl solucionador intenta encontrar una solución con un menor exceso de tiempo de tránsito entre las órdenes asociadas a costa de incrementar el coste total del viaje. Resulta lógico utilizar esta configuración si está transportando personas entre órdenes asociadas y desea acortar el tiempo de viaje. Esto es característico de los servicios de taxi.
  • Medioes la configuración predeterminada. El solucionador busca un equilibrio entre reducir el exceso de tiempo de tránsito y reducir el coste total de la solución.
  • BajoEl solucionador intenta encontrar una solución que minimice el coste total de la solución, independientemente del exceso de tiempo de tránsito. En general, esta configuración se usa para servicios de correo. Debido a que los servicios de correo transportan paquetes y no personas, no necesitan preocuparse por el tiempo de viaje. Al utilizar Bajo, los servicios de correo pueden cumplir con las órdenes asociadas en la secuencia adecuada y minimizar el coste total de la solución.
String
UTurn_policy
(Opcional)

Política de giro en U en los cruces. Permitir giros en U 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, depende de que el cruce sea una intersección o un callejón sin salida. Para acomodar, el parámetro de la política del giro en U 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.

  • ALLOW_UTURNSSe permiten los giros en U en los cruces con cualquier cantidad de bordes adyacentes. Este es el valor predeterminado.
  • NO_UTURNSLos giros en U están prohibidos en todos los cruces, independientemente de la valencia de cruce. Tenga en cuenta, sin embargo, que los giros en U seguirán estando permitidos en las ubicaciones de red aunque haya elegido esta configuración; sin embargo, también puede establecer la propiedad CurbApproach de cada ubicación de red individual para prohibir los giros en U en ella.
  • ALLOW_DEAD_ENDS_ONLYLos giros en U están prohibidos en todos los cruces, excepto los que tienen sólo un borde adyacente (una calle sin salida).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYLos giros en U están prohibidos en los cruces donde se encuentran dos bordes adyacentes pero están permitidos en las intersecciones (cruces con tres o más bordes adyacentes) o calles sin salida (cruces con exactamente un borde adyacente). A menudo, las redes tienen cruces extraños en medio de segmentos de carretera. Esta opción evita que los vehículos hagan giros en U en estas ubicaciones.
SugerenciaSugerencia:

Si necesita una política más definida respecto a la política de giros en U, 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)
  • USE_HIERARCHY Usa el atributo de jerarquía para el análisis. Utilizar una jerarquía hace que el solucionador prefiera bordes de orden superior en lugar de bordes de orden inferior. Las soluciones jerárquicas son más rápidas y se pueden utilizar para simular la preferencia de un conductor que elige viajar en autopistas por sobre las carreteras locales cuando es posible, incluso si eso significa un viaje más largo. Esta opción es válida sólo si el dataset de red de entrada tiene atributos de jerarquía.
  • NO_HIERARCHYNo usa el atributo de jerarquía para el análisis. No utilizar una jerarquía produce una ruta exacta para el dataset de red.

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)

HerenciaHerencia:

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.

ArcGIS 10.1 Network Analyst Hierarchy Settings
output_path_shape
(Opcional)
  • TRUE_LINES_WITH_MEASURESLas rutas de salida tendrán la misma forma que las fuentes de red subyacentes. Además, la salida incluye mediciones de salida para la referencia lineal. Las mediciones aumentan desde la primera parada y registran la impedancia acumulativa para alcanzar una posición determinada.
  • TRUE_LINES_WITHOUT_MEASURESLas rutas de salida tendrán la misma forma que las fuentes de red subyacentes.
  • STRAIGHT_LINESLa forma de ruta de salida será de líneas rectas que conectan órdenes y visitas a depósito según la secuencia de la ruta.
  • NO_LINESNo se generará ninguna forma para las rutas de salida. Tampoco podrá generar indicaciones para conducir.
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

Temas relacionados

Información sobre licencias

ArcGIS for Desktop Basic: Sí
ArcGIS for Desktop Standard: Sí
ArcGIS for Desktop Advanced: Sí
9/11/2013