Resumen
Resuelve un problema de generación de rutas para vehículos (VRP) para hallar las mejores rutas para una flota de vehículos.
Un controlador encargado de administrar una flota de vehículos se ve a menudo obligado a tomar decisiones sobre las rutas que deben tomar los vehículos. Tales decisiones implican encontrar la mejor forma de asignar un grupo de clientes a una flota de vehículos, así como de secuenciar y programar sus visitas. Los objetivos para resolver tales VRP consisten en proporcionar un alto nivel de servicio al cliente respetando cualquier ventana de tiempo y manteniendo al mismo tiempo los costes operativos y de inversión lo más bajos posible para cada ruta. Las restricciones consisten en completar las rutas con los recursos disponibles y dentro de los límites horarios impuestos por los turnos de trabajo de los conductores, las velocidades máximas y los compromisos con los clientes.
Este servicio se puede usar para encontrar soluciones para estas tareas de administración de flotas complejas.
Considere como ejemplo la distribución de género depositado un almacén central entre una serie de supermercados. El almacén central dispone de una flota de tres camiones El almacén solo funciona en una ventana de tiempo determinada, de 8.00 a. m. a 5.00 p. m.Durante este tiempo, todos los camiones deben regresar al almacén. Cada camión tiene una capacidad de 15,000 libras, que limita el volumen de género que puede transportar. Cada tienda demanda una determinada cantidad de género (en libras) que se le debe entregar; además, tiene sus propias ventanas de tiempo que delimitan los momentos en los que se pueden realizar entregas. Además, un conductor solo puede trabajar ocho horas al día, necesita un descanso para comer y se le paga el tiempo que invierta en conducir el camión y entregar el género en las tiendas. El objetivo consiste en proponer un itinerario (o ruta) para cada conductor tal que permita realizar todas las entregas cumpliendo todos los requisitos de servicio y minimizando el tiempo total que debe invertir un conductor en una ruta en concreto. La siguiente imagen muestra tres rutas obtenidas a partir de la resolución de este problema de generación de rutas para vehículos.
Más información sobre la salida de Solucionar problema de generación de rutas para vehículos
Ilustración
Uso
-
La herramienta Solucionar problema de generación de rutas para vehículos genera rutas para flotas de vehículos que necesitan visitar muchos lugares para realizar entregas, recogidas o responder a llamadas de servicio. La herramienta se ejecuta en modo asíncrono y resulta adecuada para los problemas grandes que tardan más tiempo en resolverse.
Las herramientas de la caja de herramientas listas para usar son servicios de geoprocesamiento de ArcGIS Online que usan datos alojados y capacidades de análisis de ArcGIS Online.
-
Puede añadir hasta 2000 órdenes y 100 rutas. Además, puede asignar un máximo de 200 órdenes a una ruta.
Puede añadir hasta 250 barreras de punto. Puede añadir cualquier cantidad de barreras de línea o polígono, pero las barreras de línea no se pueden intersecar con más de 500 entidades de calle ni las barreras de polígono se pueden intersecar con más de 2000 entidades.
-
Con independencia de que el parámetro use_hierarchy_in_analysis esté activado (True), la jerarquía siempre se usa cuando la distancia en línea recta entre las órdenes o los depósitos o las órdenes y los depósitos supera los 50 millas (80,46 kilómetros).
-
La distancia en línea recta entre cualquier orden o depósito no puede ser superior a 27 millas (43,45 kilómetros) cuando travel_mode está definido como A pie o cuando está definido como Personalizado y se utiliza la restricción A pie.
Si la distancia entre un punto de entrada y la calle más próxima que se puede atravesar es mayor que 12.42 millas (20 kilómetros), el punto se excluye del análisis.
El uso de este servicio consume créditos. Para obtener más información, consulte Descripción general de los créditos de servicio.
Sintaxis
arcpy.agolservices.SolveVehicleRoutingProblem(orders, depots, routes, breaks, time_units, distance_units, {analysis_region}, {default_date}, {uturn_policy}, {time_window_factor}, {spatially_cluster_routes}, {route_zones}, {route_renewals}, {order_pairs}, {excess_transit_factor}, {point_barriers}, {line_barriers}, {polygon_barriers}, {use_hierarchy_in_analysis}, restrictions, {attribute_parameter_values}, {populate_route_lines}, {route_line_simplification_tolerance}, {populate_directions}, {directions_language}, {directions_style_name}, {travel_mode}, {impedance}, {time_zone_usage_for_time_fields}, {save_output_layer}, {overrides}, {save_route_data}, {time_impedance}, {distance_impedance}, {populate_stop_shapes}, {output_format}, {ignore_invalid_order_locations})
Parámetro | Explicación | Tipo de datos |
orders | Especifica una o varias ubicaciones que visitarán las rutas del análisis de VRP. Una orden puede representar una entrega (por ejemplo, una entrega de muebles), una recogida (como un autobús que recoge pasajeros para ir al aeropuerto) o algún tipo de servicio o inspección (un trabajo para cortar un árbol o una inspección de una construcción, por ejemplo). Cuando se especifican las órdenes, se pueden definir propiedades para cada una, como su nombre o tiempo de servicio, mediante los siguientes atributos: ObjectID Campo de Id. administrado por el sistema. Name El nombre de la orden. El nombre debe ser único. Si el nombre queda nulo, en el momento de resolución se genera automáticamente un nombre. Description La información descriptiva sobre la orden. Puede contener cualquier información textual para la orden y no tiene ninguna restricción de singularidad. Es posible que desee almacenar el número de Id. de un cliente en el campo Name y el nombre real del cliente o la dirección en el campo Description. ServiceTime Esta propiedad especifica la cantidad de tiempo que se pasará en la ubicación de red cuando la ruta la visite; es decir, almacena el valor de impedancia de la ubicación de red. Un valor de cero o nulo indica que la ubicación de red no requiere ningún tiempo de servicio. La unidad para este valor de campo la especifica el parámetro time_units. TimeWindowStart1 El tiempo inicial de la primera ventana de tiempo para la ubicación de red. Este campo puede contener un valor nulo; un valor nulo no indica ningún tiempo inicial. Una ventana de tiempo solo indica cuando puede llegar un vehículo a una orden; no indica cuándo se debe completar el tiempo de servicio. Para tener en cuenta el tiempo de servicio y partida antes de que se agote la ventana de tiempo, reste ServiceTime al campo TimeWindowEnd1. Los campos de la ventana de tiempo (TimeWindowStart1, TimeWindowEnd1, TimeWindowStart2 y TimeWindowEnd2) pueden contener un valor solo de hora o un valor de fecha y hora en un campo de fecha y no pueden ser enteros que representen milisegundos desde un tiempo. La zona horaria de los campos de ventana de tiempo se especifica con el parámetro time_zone_usage_for_time_fields. Si un campo de hora como TimeWindowStart1 tiene un valor solo de hora (por ejemplo, 8:00 a.m.), se asume que la fecha es la predeterminada que se define para el análisis. El uso de valores de fecha y hora (por ejemplo, 7/11/2010 8:00 AM) permite establecer ventanas de tiempo que abarcan varios días. Cuando se resuelve un problema que afecta a varias zonas horarias, los valores de la ventana de tiempo de cada orden hacen referencia a la zona horaria en la que se encuentra la orden. TimeWindowEnd1 El tiempo final de la primera ventana para la ubicación de red. Este campo puede contener un valor nulo; un valor nulo no indica ningún tiempo final. TimeWindowStart2 El tiempo inicial de la segunda ventana de tiempo para la ubicación de red. Este campo puede contener un valor nulo; un valor nulo indica que no hay segunda ventana de tiempo. Si la primera ventana de tiempo es nula, según lo especificado por los campos TimeWindowStart1 y TimeWindowEnd1, la segunda ventana de tiempo también debe ser nula. Si ambas ventanas de tiempo son no nulas, no pueden superponerse. Además, la segunda ventana de tiempo debe ocurrir después de la primera. TimeWindowEnd2 El tiempo final de la segunda ventana de tiempo para la ubicación de red. Este campo puede contener un valor nulo. Cuando tanto TimeWindowStart2 como TimeWindowEnd2 son nulos, no hay segunda ventana de tiempo. Cuando TimeWindowStart2 no es nulo, pero TimeWindowEnd2 es nulo, hay una segunda ventana de tiempo que tiene una hora inicial, pero no tiene hora final. Esto es válido. MaxViolationTime1 Se considera que se ha infringido una ventana de tiempo si la hora de llegada ocurre después de que la ventana de tiempo ha finalizado. Este campo especifica la hora máxima permitida de infracción de la primera ventana de tiempo de la orden. Puede contener un valor cero pero no puede contener valores negativos. Un valor cero indica que no es aceptable una infracción de ventana de tiempo en la primera ventana de tiempo de la orden; es decir, la primera ventana de tiempo es estricta. Por el contrario, un valor nulo indica que no existe ningún límite en el tiempo de infracción permitido. Un valor distinto de cero especifica la cantidad máxima de retraso; por ejemplo, una ruta puede llegar a una orden hasta 30 minutos después del final de su primera ventana de tiempo. La unidad para este valor de campo la especifica el parámetro Unidades de campo de tiempo El solucionador puede realizar un seguimiento y ponderación de las infracciones de la ventana de tiempo. Como consecuencia, puede dirigir el solucionador de VRP para que realice una de las siguientes opciones:
Al asignar un nivel de importancia para el parámetro Importancia de violación de ventana de tiempo, está eligiendo en esencia una de estas tres opciones. En cualquier caso, sin embargo, el solucionador devolverá un error si el valor establecido para MaxViolationTime1 se supera. MaxViolationTime2 Tiempo máximo de infracción permitido para la segunda ventana de tiempo de la orden. Este campo es análogo al campo MaxViolationTime1. InboundArriveTime Define el momento en que el elemento que se va a entregar a la orden estará listo en el depósito inicial. La orden solo se puede asignar a una ruta si la hora de llegada de la entrada precede al valor de la última hora de inicio; de este modo, la ruta no podrá salir del depósito antes de que el elemento esté preparado para cargarse en ella. Este campo puede resultar útil en escenarios de modelos en los que se producen transbordos de ondas entrantes. Sería el caso, por ejemplo, de un trabajo de una orden que requiere materiales especiales que, en ese momento, no están disponibles en el depósito. Los materiales se están enviando desde otra ubicación y llegarán al depósito a las 11:00. Para asegurarse de que a la orden no se va a asignar ninguna ruta que salga antes de que llegue el envío, la hora de llegada de la entrada de la orden se establece a las 11:00. Los materiales especiales llegan a las 11:00, se cargan en el vehículo y este sale del depósito para visitar las órdenes asignadas. Notas:
OutboundDepartTime Define el momento en que el elemento que se va a recoger en la orden debe llegar al depósito final. La orden solo se puede asignar a una ruta si esta puede visitar la orden y llegar a su depósito final antes de la hora de partida de la salida que se haya especificado. Este campo puede resultar útil en escenarios de modelos en los que se producen transbordos de ondas salientes. Supongamos que una empresa de transportes envía camiones de reparto para recoger paquetes de órdenes y los entrega en un depósito donde, a continuación, se llevan a otras instalaciones para entregarlos a su destino final. Cada día, a las 15:00, un tráiler para en el depósito para recoger los paquetes urgentes y los lleva directamente a una estación de central de procesamiento. Para evitar retrasar la entrega de los paquetes urgentes hasta las 15:00 del día siguiente, la empresa de transportes intenta que los camiones de reparto recojan los paquetes urgentes de las órdenes y los lleven del depósito antes de las 15:00. Esto se consigue estableciendo la hora de partida de la salida a las 15:00. Notas:
DeliveryQuantities El tamaño de la entrega. Puede especificar el tamaño en cualquier dimensión como peso, volumen o cantidad. También puede especificar varias dimensiones, por ejemplo, peso y volumen. Introduzca las cantidades de entrega sin indicar unidades. Por ejemplo, si es necesario entregar un objeto de 300 libras a una orden, introduzca 300. Es necesario recordar que el valor es en libras. Si está realizando un rastreo de varias dimensiones, separe los valores numéricos con un espacio. Por ejemplo, si está registrando el peso y el volumen de una entrega que pesa 2.000 libras y tiene un volumen de 100 pies cúbicos, introduzca 2000 100. De nuevo, es necesario recordar las unidades; en este caso, libras y pies cúbicos. También es necesario recordar la secuencia en la que se introducen los valores y sus unidades correspondientes. Asegúrese de que Capacities para Rutas y DeliveryQuantities y PickupQuantities para Órdenes se especifiquen de igual forma, es decir, los valores deben estar en las mismas unidades. Si está utilizando varias dimensiones, esas dimensiones deben aparecer en la misma secuencia para todos los parámetros. Por ejemplo, si especifica el peso en libras seguido del volumen en pies cúbicos para DeliveryQuantities, es necesario especificar la capacidad de las rutas y las cantidades de recogida de las órdenes de la misma manera: el peso en libras y el volumen en pies cúbicos. Si combina unidades o cambia la secuencia, obtendrá resultados no deseados sin ningún mensaje de advertencia. Una cadena vacía o un valor nulo equivale a que todas las dimensiones que son cero. Si la cadena de caracteres tiene un número de valores insuficiente en relación al recuento de capacidad o dimensiones rastreadas, los valores restantes se tratan como ceros. Las cantidades de entrega no pueden ser negativas. PickupQuantities El tamaño de la recogida. Puede especificar el tamaño en cualquier dimensión como peso, volumen o cantidad. También puede especificar varias dimensiones, por ejemplo, peso y volumen. No se puede, sin embargo, utilizar valores negativos. Este campo es análogo al campo DeliveryQuantities de Órdenes. En el caso de una visita de intercambio, una orden puede tener cantidades de entrega y de recogida. Revenue El ingreso generado si la orden se incluye en una solución. Este campo puede contener un valor nulo (un valor nulo indica una renta de cero), pero no puede tener un valor negativo. Los ingresos se incluyen al optimizar el valor de la función objetivo, pero no forma parte del coste operativo de la solución; es decir, el campo TotalCost de las rutas nunca incluye los ingresos en su salida. Sin embargo, las rentas ponderan la importancia relativa de servir las órdenes. Los ingresos se incluyen al optimizar el valor de la función objetivo, pero no forma parte del coste operativo de la solución; es decir, el campo TotalCost de la clase de ruta nunca incluye los ingresos en su salida. Sin embargo, las rentas ponderan la importancia relativa de servir las órdenes. SpecialtyNames Una cadena de caracteres separada por espacios que contiene los nombres de las especialidades requeridas por la orden. Un valor nulo indica que la orden no requiere especialidades. La ortografía de cualquier especialidad enumerada para la clase Órdenes y rutas debe coincidir exactamente para que el solucionador de VRP pueda vincularlos de forma conjunta. Para ilustrar qué especialidades son y cómo funcionan, asuma que una empresa de cuidado de céspedes y poda árboles tiene una parte de sus órdenes que requiere un camión recolector a podar árboles altos. La empresa introduce BucketTruck en el campo SpecialtyNames de estas órdenes para indicar su necesidad especial. SpecialtyNames se deja nulo para el resto de órdenes. De manera similar, la empresa también introduce BucketTruck en el campo SpecialtyNames de las rutas que recorren los camiones con brazos hidráulicos. Deja el campo nulo para el resto de rutas. En el momento de la resolución, el solucionador de VRP asigna órdenes sin necesidades especiales a cualquier ruta, pero solo se asigna órdenes que necesitan camiones recolectores para las rutas que disponen de ellos. AssignmentRule Especifica la regla para asignar la orden a una ruta. El valor de campo se especifica como uno de los siguientes enteros (use el código numérico, no el nombre entre paréntesis):
Este campo no puede contener un valor nulo. CurbApproach Especifica la dirección en la que un vehículo puede llegar a la orden y partir de ella. El valor de campo se especifica como uno de los siguientes enteros (use el código numérico, no el nombre entre paréntesis):
El atributo CurbApproach se ha diseñado para trabajar con los dos tipos de estándares nacionales de circulación: por la derecha (Estados Unidos) y por la izquierda (Reino Unido). En primer lugar, considere una orden que se encuentra en el lado izquierdo de un vehículo. Siempre estará situada el lado izquierdo, independientemente de si el vehículo circula por la mitad izquierda o derecha del camino. Los estándares de circulación nacionales pueden influir en su decisión de aproximarse a la orden por una de las dos direcciones posibles, de modo que quede en el lado derecho o en el lado izquierdo del vehículo. Por ejemplo, si desea llegar a una orden y que no haya un carril entre el vehículo y la orden, elija 1 (Lado derecho del vehículo) en Estados Unidos y 2 (Lado izquierdo del vehículo) en Reino Unido. RouteName El nombre de la ruta a la que se ha asignado la orden. Este campo se utiliza para preasignar una orden a una ruta concreta. Puede contener un valor nulo que indica que la orden no se ha preasignado a ninguna ruta y el solucionador identifica la mejor asignación de ruta posible para la orden. Si está establecido en nulo, el campo Sequence también debe estar establecido en nulo. Después de una operación de resolución, si se enruta la orden, el campo RouteName contiene el nombre de la ruta a la cual se asigna la orden. Sequence Esto indica la secuencia de la orden en su ruta asignada. Este campo se utiliza para especificar la secuencia relativa de una orden en la ruta. Este campo puede contener un valor nulo que especifica que la orden se puede realizar en cualquier parte a lo largo de la ruta. Un valor nulo solo puede ocurrir junto con un valor RouteName nulo. Los valores de secuencia de entrada son positivos y exclusivos para cada ruta (compartida en las visitas al depósito de reanudación, órdenes y descansos), pero no tienen que empezar a partir de 1 ni ser contiguos. Después de una operación de resolución, el campo Sequence contiene el valor de secuencia de la orden en su ruta asignada. Los valores de secuencia de salida para una ruta se comparten en las visitas a depósito, órdenes y descansos; empiezan a partir de 1 (en el depósito de inicio); y son consecutivos. El valor de secuencia de salida más pequeño posible para una orden enrutada es 2, dado que una ruta siempre comienza en un depósito. Bearing La dirección en la que está avanzando un punto. Las unidades son grados y se miden en sentido horario desde el norte verdadero. Este campo se utiliza junto con el campo BearingTol. Los datos de rumbo normalmente se envían de forma automática desde un dispositivo móvil dotado de un receptor GPS. Intente incluir datos de rumbo si está cargando una ubicación de entrada que se mueve, como un peatón o un vehículo. Utilizar este campo tiende a evitar agregar ubicaciones a los bordes equivocados, que puede ocurrir cuando un vehículo está cerca de una intersección o un paso elevado, por ejemplo. El rumbo también ayuda a la herramienta a determinar en qué lado de la calle está el punto. Más información sobre el rumbo y la tolerancia de rumbo BearingTol El valor de tolerancia de rumbo crea un rango de valores de rumbo aceptable al ubicar los puntos en movimiento en un eje con el campo Bearing. Si el valor del campo Bearing está dentro del rango de valores aceptables que se generan a partir de la tolerancia de rumbo en un eje, el punto se puede agregar como una ubicación de red ahí; de lo contrario, se evalúa el punto más cercano sobre el próximo borde más cercano. Las unidades se expresan en grados y el valor predeterminado es 30. Los valores deben ser mayores que 0 y menores que 180. Un valor de 30 significa que cuando Network Analyst intenta agregar una ubicación de red en un eje, se genera un rango de valores de rumbo aceptable 15 grados a cada lado del eje (izquierdo y derecho) y en ambas direcciones digitalizadas del eje. Más información sobre el rumbo y la tolerancia de rumbo NavLatency Este campo solo se utiliza en el proceso de resolución si Bearing y BearingTol también tienen valores. Sin embargo, la introducción de un valor NavLatency es opcional, incluso cuando hay valores en Bearing y BearingTol. NavLatency indica cuánto coste se espera que transcurra desde el momento en que se envía la información de GPS desde un vehículo en movimiento a un servidor y el momento en que el dispositivo de navegación del vehículo recibe la ruta procesada. Las unidades de NavLatency son las mismas que las unidades del atributo de impedancia. | Feature Set |
depots | Especifica uno o varios depósitos para el problema de generación de rutas para vehículos especificado. Un depósito es una ubicación desde la que sale un vehículo al comienzo de su día laborable y a la que vuelve al final del mismo. Los vehículos (para las entregas) se cargan o descargan (para las recogidas) en los depósitos en el inicio de la ruta. En algunos casos, un depósito también puede actuar como ubicación de renovación donde el vehículo puede descargarse o volverse a cargar y seguir realizando entregas y recogidas. Un depósito tiene horas de apertura y cierre, tal y como se especifica en una ventana de tiempo estricta. Los vehículos no pueden llegar a un depósito fuera de esta ventana de tiempo. Cuando se especifican los depósitos, se pueden definir propiedades para cada uno, como su nombre o tiempo de servicio, mediante los siguientes atributos: ObjectID Campo de Id. administrado por el sistema. Name El nombre del depósito. Los campos StartDepotName y EndDepotName de las rutas hacen referencia a los nombres que especifique aquí. Las renovaciones de ruta también hacen referencia a los mismos, cuando se utilizan. Los nombres de depósitos no hacen distinción entre mayúsculas y minúsculas, pero tienen que ser únicos y no estar vacíos. Description La información descriptiva sobre la ubicación del depósito. Puede contener cualquier información textual y no tiene ninguna restricción de singularidad. Por ejemplo, si desea tener en cuenta en qué región está un depósito o la dirección y número de teléfono del mismo, puede introducir la información aquí en lugar de en el campo Name. TimeWindowStart1 El tiempo inicial de la primera ventana de tiempo para la ubicación de red. Este campo puede contener un valor nulo; un valor nulo no indica ningún tiempo inicial. Los campos de la ventana de tiempo (TimeWindowStart1, TimeWindowEnd1, TimeWindowStart2 y TimeWindowEnd2) pueden contener un valor solo de hora o un valor de fecha y hora en un campo de fecha y no pueden ser enteros que representen milisegundos desde un tiempo. La zona horaria de los campos de ventana de tiempo se especifica con el parámetro time_zone_usage_for_time_fields. Si un campo de hora como TimeWindowStart1 tiene un valor solo de hora (por ejemplo, 8:00 a.m.), se asume que la fecha es la predeterminada que se define para el análisis. El uso de valores de fecha y hora (por ejemplo, 7/11/2010 8:00 AM) permite establecer ventanas de tiempo que abarcan varios días. Cuando se resuelve un problema que afecta a varias zonas horarias, los valores de la ventana de tiempo de cada depósito hacen referencia a la zona horaria en la que se encuentra el depósito. TimeWindowEnd1 El tiempo final de la primera ventana para la ubicación de red. Este campo puede contener un valor nulo; un valor nulo no indica ningún tiempo final. TimeWindowStart2 El tiempo inicial de la segunda ventana de tiempo para la ubicación de red. Este campo puede contener un valor nulo; un valor nulo indica que no hay segunda ventana de tiempo. Si la primera ventana de tiempo es nula, según lo especificado por los campos TimeWindowStart1 y TimeWindowEnd1, la segunda ventana de tiempo también debe ser nula. Si ambas ventanas de tiempo son no nulas, no pueden superponerse. Además, la segunda ventana de tiempo debe ocurrir después de la primera. TimeWindowEnd2 El tiempo final de la segunda ventana de tiempo para la ubicación de red. Este campo puede contener un valor nulo. Cuando tanto TimeWindowStart2 como TimeWindowEnd2 son nulos, no hay segunda ventana de tiempo. Cuando TimeWindowStart2 no es nulo, pero TimeWindowEnd2 es nulo, hay una segunda ventana de tiempo que tiene una hora inicial, pero no tiene hora final. Esto es válido. CurbApproach
El atributo CurbApproach se ha diseñado para trabajar con los dos tipos de estándares nacionales de circulación: por la derecha (Estados Unidos) y por la izquierda (Reino Unido). En primer lugar, considere un depósito en el lado izquierdo de un vehículo. Siempre estará situada el lado izquierdo, independientemente de si el vehículo circula por la mitad izquierda o derecha del camino. Las normas de circulación nacionales pueden influir en su decisión de aproximarse a un depósito desde una de las dos direcciones posibles, de modo que quede en el lado derecho o en el lado izquierdo del vehículo. Por ejemplo, si desea llegar a un depósito y que no haya un carril entre el vehículo y el depósito, elija 1 (Lado derecho del vehículo) en Estados Unidos y 2 (Lado izquierdo del vehículo) en Reino Unido. Bearing La dirección en la que está avanzando un punto. Las unidades son grados y se miden en sentido horario desde el norte verdadero. Este campo se utiliza junto con el campo BearingTol. Los datos de rumbo normalmente se envían de forma automática desde un dispositivo móvil dotado de un receptor GPS. Intente incluir datos de rumbo si está cargando una ubicación de entrada que se mueve, como un peatón o un vehículo. Utilizar este campo tiende a evitar agregar ubicaciones a los bordes equivocados, que puede ocurrir cuando un vehículo está cerca de una intersección o un paso elevado, por ejemplo. El rumbo también ayuda a la herramienta a determinar en qué lado de la calle está el punto. Más información sobre el rumbo y la tolerancia de rumbo BearingTol El valor de tolerancia de rumbo crea un rango de valores de rumbo aceptable al ubicar los puntos en movimiento en un eje con el campo Bearing. Si el valor del campo Bearing está dentro del rango de valores aceptables que se generan a partir de la tolerancia de rumbo en un eje, el punto se puede agregar como una ubicación de red ahí; de lo contrario, se evalúa el punto más cercano sobre el próximo borde más cercano. Las unidades se expresan en grados y el valor predeterminado es 30. Los valores deben ser mayores que 0 y menores que 180. Un valor de 30 significa que cuando Network Analyst intenta agregar una ubicación de red en un eje, se genera un rango de valores de rumbo aceptable 15 grados a cada lado del eje (izquierdo y derecho) y en ambas direcciones digitalizadas del eje. Más información sobre el rumbo y la tolerancia de rumbo NavLatency Este campo solo se utiliza en el proceso de resolución si Bearing y BearingTol también tienen valores. Sin embargo, la introducción de un valor NavLatency es opcional, incluso cuando hay valores en Bearing y BearingTol. NavLatency indica cuánto coste se espera que transcurra desde el momento en que se envía la información de GPS desde un vehículo en movimiento a un servidor y el momento en que el dispositivo de navegación del vehículo recibe la ruta procesada. Las unidades de NavLatency son las mismas que las unidades del atributo de impedancia. | Feature Set |
routes | Especifica una o varias rutas que describen las características del vehículo y del conductor. Una ruta puede tener los tiempos de servicio de inicio y fin en el depósito, un tiempo de inicio fijo o flexible, costes operativos basados en el tiempo, costes operativos basados en la distancia, varias capacidades, diversas restricciones en un día laborable del conductor y así sucesivamente. Las rutas se pueden especificar con los siguientes atributos: Name El nombre de la ruta. El nombre debe ser único. La herramienta genera un nombre exclusivo en el momento de la resolución si el valor del campo es nulo; por consiguiente, la introducción de un valor es opcional en la mayoría de los casos. Sin embargo, debe introducir un nombre si su análisis incluye descansos, reanudaciones de ruta, zonas de ruta u órdenes preasignadas porque el nombre de ruta se utiliza como clave externa en estos casos. En los nombres de ruta no se distingue entre mayúsculas y minúsculas. StartDepotName El nombre del depósito inicial para la ruta. Este campo es una clave externa para el campo Name en Depósitos. Si el valor StartDepotName es nulo, la ruta comenzará desde la primera orden asignada. Omitir el depósito inicial es útil cuando no se conoce la ubicación inicial del vehículo o es irrelevante para el problema. Sin embargo, cuando StartDepotName es nulo, EndDepotName no puede ser nulo. No se permiten depósitos iniciales virtuales si las órdenes o los depósitos están en varias zonas horarias. Si la ruta está realizando entregas y StartDepotName es nulo, se supone que el cargamento se carga en el vehículo en un depósito virtual antes de que comience la ruta. Para una ruta que no tiene visitas de renovación, sus órdenes de entrega (aquellas con valores DeliveryQuantities distintos de cero en Órdenes) se cargan en el depósito de inicio o en el depósito virtual. Para una ruta que tiene visitas de reanudación, solo se cargan en el depósito de inicio o en el depósito virtual las órdenes de entrega antes de la primera visita de reanudación. EndDepotName El nombre del depósito final para la ruta. Este campo es una clave externa para el campo Name en Depósitos. StartDepotServiceTime El tiempo de servicio en el depósito inicial. Esto se puede utilizar para modelar el tiempo dedicado a cargar el vehículo. Este campo puede contener un valor nulo; un valor nulo indica un tiempo de servicio cero. La unidad para este valor de campo la especifica el parámetro Unidades de campo de tiempo. Los tiempos de servicio de los depósitos inicial y final son valores fijos (dados por los valores de campo StartDepotServiceTime y EndDepotServiceTime) y no tienen en cuenta la carga real para una ruta. Por ejemplo, el tiempo necesario para cargar un vehículo en el depósito inicial puede depender del tamaño de los pedidos. A los tiempos de servicio de los depósitos se les pueden asignar valores que correspondan a un camión completamente cargado, con una carga media o hacer su propia estimación de tiempo. EndDepotServiceTime El tiempo de servicio en el depósito final. Se puede utilizar para modelar el tiempo dedicado a descargar el vehículo. Este campo puede contener un valor nulo; un valor nulo indica un tiempo de servicio cero. La unidad para este valor de campo la especifica el parámetro Unidades de campo de tiempo. Los tiempos de servicio de los depósitos inicial y final son valores fijos (dados por los valores de campo StartDepotServiceTime y EndDepotServiceTime) y no tienen en cuenta la carga real para una ruta. Por ejemplo, el tiempo necesario para cargar un vehículo en el depósito inicial puede depender del tamaño de los pedidos. A los tiempos de servicio de los depósitos se les pueden asignar valores que correspondan a un camión completamente cargado, con una carga media o hacer su propia estimación de tiempo. EarliestStartTime El tiempo de inicio más temprano permitido para la ruta. El solucionador utiliza esto junto con la ventana de tiempo del depósito inicial para determinar los tiempos de inicio de ruta factibles. Este campo no puede contener valores nulos y tiene un valor solo de hora predeterminado de 8:00 AM. El valor predeterminado se interpreta como 8:00 a.m. en la fecha predeterminada definida para el análisis. Cuando se resuelve un problema que abarca varias zonas horarias, la zona horaria EarliestStartTime coincide con la zona horaria en la que se encuentra el depósito inicial. LatestStartTime El tiempo de inicio más tardío permitido para la ruta. Este campo no puede contener valores nulos y tiene un valor solo de hora predeterminado de 10:00 AM. El valor predeterminado se interpreta como 10:00 a.m. en la fecha predeterminada definida para el análisis. Cuando se resuelve un problema que abarca varias zonas horarias, la zona horaria LatestStartTime coincide con la zona horaria en la que se encuentra el depósito inicial. ArriveDepartDelay Este campo almacena la cantidad de tiempo de viaje necesario para acelerar el vehículo a velocidades de viaje normales, decelerarlo hasta una parada y meterlo y sacarlo de la red (por ejemplo, entrar y salir del aparcamiento). Al incluir un valor ArriveDepartDelay, se impide que el solucionador de VRP envíe muchas rutas para dar servicio a órdenes físicamente coincidentes. El coste para esta propiedad se incurre entre visitas a órdenes no coincidentes, depósitos y reanudaciones de ruta. Por ejemplo, cuando una ruta empieza en un depósito y visita la primera orden, el retraso de llegada/salida se agrega al tiempo de viaje. Lo mismo es aplicable al viajar desde la primera orden a la segunda. Si la segunda y la tercera orden coinciden, el valor ArriveDepartDelay no se agrega entre ellas, puesto que el vehículo no tiene que desplazarse. Si la ruta viaja a una reanudación de ruta, el valor se añade de nuevo al tiempo de viaje. Aunque un vehículo deba reducir la velocidad y detenerse en un descanso y acelerar después, el solucionador de VRP no puede agregar el valor ArriveDepartDelay para los descansos. Esto significa que, si una ruta deja una orden, para durante un descanso y continúa en la siguiente orden, el retardo de llegada/salida se añade solo una vez, no dos veces. Por ejemplo, supongamos que hay cinco órdenes coincidentes en un edificio alto y a las que dan servicio tres rutas diferentes. Significa que se incurre en tres retrasos de llegada/salida; es decir, tres conductores tienen que buscar estacionamiento por separado y entrar en el mismo edificio. Sin embargo, si en cambio una ruta puede dar servicio a las órdenes, tan solo un conductor tiene que aparcar y entrar en el edificio y solo se incurre en un retraso de llegada/salida. Dado que el solucionador de VRP intenta minimizar el coste, trata de limitar los retrasos de llegada/salida y, de este modo, identificar la opción de ruta única. (Observe que es posible que sea necesario enviar varias rutas cuando otras restricciones, tales como especialidades, ventanas de tiempo o capacidades, lo requieran.) La unidad para este valor de campo la especifica el parámetro time_units. Capacities La capacidad máxima del vehículo. Puede especificar la capacidad de cualquier dimensión como peso, volumen o cantidad. También puede especificar varias dimensiones, por ejemplo, peso y volumen. Introduzca capacidades sin indicar las unidades. Por ejemplo, si el vehículo puede llevar un máximo de 40.000 libras; introduzca 40000. Recuerde que el valor se indica en libras. Si está realizando un rastreo de varias dimensiones, separe los valores numéricos con un espacio. Por ejemplo, si está registrando el peso y el volumen de una entrega que pesa 2.000 libras y tiene un volumen de 100 pies cúbicos, introduzca 2000 100. De nuevo, es necesario recordar las unidades; en este caso, libras y pies cúbicos. También es necesario recordar la secuencia en la que se introducen los valores y sus unidades correspondientes. Es importante recordar las unidades y la secuencia de las unidades por un par de razones: la primera, para interpretar la información más tarde; la segunda, para introducir correctamente los valores de los campos DeliveryQuantities y PickupQuantities para las órdenes. Tenga en cuenta que el solucionador de VRP simultáneamente se refiere a Capacities, DeliveryQuantities y PickupQuantities para verificar que no se sobrecargue ninguna ruta. Las unidades no se pueden introducir en el campo y la herramienta VRP no puede hacer conversiones de unidades. Debe introducir los valores para los tres campos utilizando las mismas unidades y la misma secuencia de unidades para garantizar que los valores se interpreten correctamente. Si combina unidades o cambia la secuencia en cualquiera de los tres campos, se producen resultados no deseados sin ningún mensaje de advertencia. Se recomienda establecer una unidad y una secuencia de unidades estándar de antemano y consultarla continuamente al introducir los valores para estos tres campos. Una cadena vacía o un valor nulo equivale a que todos los valores son cero. Los valores de capacidad no pueden ser negativos. Si el campo Capacities tiene un número insuficiente de valores en relación con los campos DeliveryQuantities o PickupQuantities para las órdenes, los valores restantes se tratan como cero. El solucionador de VRP solo realiza una comprobación booleana simple para determinar si se superan las capacidades. Si el valor de capacidad de una ruta es mayor o igual a la cantidad total transportada, el solucionador de VRP supondrá que la carga cabe en el vehículo. Esto podría ser incorrecto, dependiendo de la forma real de la carga y el vehículo. Por ejemplo, el solucionador de VRP le permite ajustar una esfera de 1.000 pies cúbicos en un camión de 1.000 pies cúbicos que tiene 8 pies de ancho. En realidad, sin embargo, dado que la esfera tiene un diámetro de 12,6 pies, no cabría en el camión de 8 pies de ancho. FixedCost Un coste monetario fijo en el que solo se incurre si la ruta se utiliza en una solución (es decir, tiene órdenes asignadas a la misma). Este campo puede contener valores nulos; un valor nulo indica un coste fijo cero. Este coste forma parte del coste operativo de ruta total. CostPerUnitTime El coste monetario incurrido, por tiempo unitario de trabajo, para la duración total de la ruta, incluidos los tiempos de viaje así como los tiempos de servicio y de espera en órdenes, depósitos y descansos. Este campo no puede contener un valor nulo y tiene un valor predeterminado de 1,0. La unidad para este valor de campo la especifica el parámetro time_units. CostPerUnitDistance El coste monetario incurrido, por unidad de distancia viajada, para la longitud de la ruta (distancia de viaje total). Este campo puede contener valores nulos; un valor nulo indica un coste cero. La unidad para este valor de campo la especifica el parámetro distance_units. OvertimeStartTime La duración de tiempo de trabajo normal antes de que se inicie el cálculo de horas extra. Este campo puede contener valores nulos; un valor nulo indica que no se aplican horas extraordinarias. La unidad para este valor de campo la especifica el parámetro time_units. Por ejemplo, si al conductor se le pagan horas extra cuando la duración total de la ruta supera las ocho horas, OvertimeStartTime se especifica como 480 (8 horas * 60 minutos/hora), siempre que las unidades de tiempo sean minutos. CostPerUnitOvertime El coste monetario en el que se incurre por unidad de tiempo de hora extra. Este campo puede contener valores nulos; un valor nulo indica que el valor CostPerUnitOvertime es igual que el valor CostPerUnitTime. MaxOrderCount El máximo número permitido de órdenes en la ruta. Este campo no puede contener valores nulos y tiene un valor predeterminado de 30. MaxTotalTime La duración máxima permitida de la ruta. La duración de la ruta incluye los tiempos de viaje, así como los tiempos de servicio y de espera en órdenes, depósitos y descansos. Este campo puede contener valores nulos; un valor nulo indica que no hay ninguna restricción en la duración de la ruta. La unidad para este valor de campo la especifica el parámetro time_units. MaxTotalTravelTime El tiempo de viaje máximo permitido para la ruta. El tiempo de viaje incluye solo el tiempo empleado en conducir en la red y no incluye tiempos de servicio o de espera. Este campo puede contener valores nulos; un valor nulo indica que no hay ninguna restricción en el tiempo máximo de viaje permitido. Este valor de campo no puede ser mayor que el valor de campo MaxTotalTime. La unidad para este valor de campo la especifica el parámetro time_units. MaxTotalDistance La distancia de viaje máxima permitida para la ruta. La unidad para este valor de campo la especifica el parámetro distance_units. Este campo puede contener valores nulos; un valor nulo indica que no hay ninguna restricción en la distancia máxima de viaje permitida. SpecialtyNames Una cadena de caracteres separada por espacios que contiene los nombres de las especialidades requeridas por la orden. Un valor nulo indica que la orden no requiere especialidades. La ortografía de cualquier especialidad enumerada para la clase Órdenes y rutas debe coincidir exactamente para que el solucionador de VRP pueda vincularlos de forma conjunta. Para ilustrar qué especialidades son y cómo funcionan, asuma que una empresa de cuidado de céspedes y poda árboles tiene una parte de sus órdenes que requiere un camión recolector a podar árboles altos. La empresa introduce BucketTruck en el campo SpecialtyNames de estas órdenes para indicar su necesidad especial. SpecialtyNames se deja nulo para el resto de órdenes. De manera similar, la empresa también introduce BucketTruck en el campo SpecialtyNames de las rutas que recorren los camiones con brazos hidráulicos. Deja el campo nulo para el resto de rutas. En el momento de la resolución, el solucionador de VRP asigna órdenes sin necesidades especiales a cualquier ruta, pero solo se asigna órdenes que necesitan camiones recolectores para las rutas que disponen de ellos. AssignmentRule Especifica la regla para asignar la orden a una ruta. El valor de campo se especifica como uno de los siguientes enteros (use el código numérico, no el nombre entre paréntesis): Este campo no puede contener un valor nulo.
| Record Set |
breaks | Son los periodos de pausa o descansos de las rutas en un problema de generación de rutas para vehículos determinado. Un descanso está asociado a una ruta exactamente y puede realizarse después de finalizar una orden, mientras se encuentra en ruta para dar servicio a una orden o antes de dar servicio a una orden. Tiene una hora de inicio y una duración y el conductor puede cobrar o no durante el mismo. Existen tres opciones para establecer el momento en que comienza un descanso: una ventana de tiempo, un tiempo de viaje máximo o un tiempo de trabajo máximo. No se permiten descansos de ventana de tiempo si las órdenes o los depósitos están en varias zonas horarias, a no ser que las horas estén en UTC. Cuando se especifican los descansos, se pueden definir propiedades para cada uno, como su nombre o tiempo de servicio, mediante los siguientes atributos: ObjectID Campo de Id. administrado por el sistema. RouteName El nombre de la ruta a la cual se aplica el descanso. Aunque un descanso se asignado a exactamente una ruta, puede haber muchos descansos asignados a la misma ruta. Este campo es una clave externa para el campo Name de las rutas, por lo que no puede tener ningún valor nulo. Precedence Los valores de precedencia ordenan en secuencia los descanso de una ruta determinada. Los descansos con un valor de precedencia de 1 aparecen antes de aquéllos con un valor 2, etc. Todos los descansos deben tener un valor de precedencia, sin tener en cuenta si son descansos de ventana de tiempo, tiempo máximo de viaje o tiempo máximo de trabajo. ServiceTime La duración del descanso. Este campo no puede contener valores nulos. El valor predeterminado es 60. La unidad para este valor de campo la especifica el parámetro time_units. TimeWindowStart La hora de inicio de la ventana de tiempo del descanso. Debe especificare el tiempo de inicio y el tiempo de fin. Si este campo tiene un valor, los valores de campo MaxTravelTimeBetweenBreaks y MaxCumulWorkTime deben ser nulos y el resto de descansos del análisis deben tener valores nulos para MaxTravelTimeBetweenBreaks y MaxCumulWorkTime. Durante la resolución aparecerá un error si una ruta tiene varios descansos con ventanas de tiempo solapadas. Los campos de la ventana de tiempo de los descansos pueden contener un valor solo de hora o un valor de fecha y hora en un campo de fecha y no pueden ser enteros que representen milisegundos desde un tiempo. La zona horaria de los campos de ventana de tiempo se especifica con el parámetro time_zone_usage_for_time_fields. Si un campo de hora como TimeWindowStart tiene un valor solo de hora (por ejemplo, 12:00 p. m.), se asume que la fecha es la especificada por el parámetro Fecha predeterminada (default_date en Python). El uso de valores fecha y hora (por ejemplo, 11/7/2012 12:00 p.m.) le permite especificar ventanas de tiempo que abarquen dos o más días. Es beneficioso cuando se debe realizar un descanso en algún momento antes o después de medianoche. TimeWindowEnd La hora de finalización de la ventana de tiempo del descanso. Debe especificare el tiempo de inicio y el tiempo de fin. Si este campo tiene un valor, MaxTravelTimeBetweenBreaks y MaxCumulWorkTime deben ser nulos y el resto de descansos del análisis deben tener valores nulos para MaxTravelTimeBetweenBreaks y MaxCumulWorkTime. MaxViolationTime Este campo especifica el tiempo de infracción máximo permitido para una ventana de tiempo de descanso. Se considera que se ha infringido una ventana de tiempo si la hora de llegada fuera del intervalo de tiempo. Un valor cero indica que no se puede infringir la ventana de tiempo; es decir, la ventana de tiempo es estricta. Un valor distinto de cero especifica la cantidad máxima de retraso. Por ejemplo, el descanso puede comenzar hasta 30 minutos después del final de su ventana de tiempo, pero el retraso se sanciona según el parámetro Importancia de infracción de la ventana de tiempo. Esta propiedad puede ser nula. Un valor nulo con valores de TimeWindowStart y TimeWindowEnd indica que no existe ningún límite en el tiempo de infracción permitido. Si MaxTravelTimeBetweenBreaks o MaxCumulWorkTime tienen un valor, MaxViolationTime debe ser nulo. La unidad para este valor de campo la especifica el parámetro time_units. MaxTravelTimeBetweenBreaks La cantidad máxima de tiempo de viaje que se puede acumular antes de realizar un descanso. El tiempo de viaje se acumula desde el fin del descanso anterior o, si todavía no se ha realizado un descanso, desde el inicio de la ruta. Si se trata del descanso final de la ruta, MaxTravelTimeBetweenBreaks también indica el tiempo máximo de viaje que se puede acumular desde el descanso final hasta depósito final. Este campo está diseñado para limitar cuánto tiempo puede conducir una persona hasta que sea necesario un descanso. Por ejemplo, si la unidad de tiempo del análisis está establecida en minutos y MaxTravelTimeBetweenBreaks tiene un valor de 120, el conductor realizará un descanso después de conducir dos horas. Para asignar un segundo descanso después de dos horas más de conducción, la propiedad MaxTravelTimeBetweenBreaks del segundo descanso debe ser 120. Si este campo tiene un valor, TimeWindowStart, TimeWindowEnd, MaxViolationTime y MaxCumulWorkTime deben ser nulos para que un análisis se resuelva correctamente. La unidad para este valor de campo la especifica el parámetro time_units. MaxCumulWorkTime La cantidad máxima de tiempo de trabajo que se puede acumular antes de realizar un descanso. El tiempo de trabajo siempre se acumula desde el inicio de la ruta. El tiempo de trabajo es la suma de tiempo de viaje y de los tiempos de servicio en órdenes, depósitos y descansos. Tenga en cuenta, sin embargo, que esto excluye el tiempo de espera, que es el tiempo que una ruta (o conductor) espera en una orden o depósito a que comience una ventana de tiempo. Este campo limita el tiempo que puede trabajar una persona hasta que se necesite un descanso. Por ejemplo, si la unidad de tiempo del análisis está establecida en minutos, MaxCumulWorkTime tiene un valor de 120 y ServiceTime tiene un valor de 15, el conductor obtendrá un descanso de 15 minutos después de dos horas de trabajo. Continuando con el último ejemplo, suponga que se necesita un segundo descanso después de tres horas más de trabajo. Para especificar este descanso, introduzca 315 (cinco horas y 15 minutos) como el valor MaxCumulWorkTime del segundo descanso. Este número incluye los valores MaxCumulWorkTime y ServiceTime del descanso anterior, junto con las tres horas adicionales de trabajo antes de conceder el segundo descanso. Para evitar realizar descansos de tiempo de trabajo máximo prematuramente, recuerde que acumulan el tiempo de trabajo desde el principio de la ruta y ese tiempo de trabajo incluye el tiempo de servicio en los depósitos, órdenes y descansos visitados previamente. Si este campo tiene un valor, TimeWindowStart, TimeWindowEnd, MaxViolationTime y MaxTravelTimeBetweenBreaks deben ser nulos para que un análisis se resuelva correctamente. La unidad para este valor de campo la especifica el parámetro time_units. IsPaid Un valor booleano que indica si se paga o no durante el descanso. Al definir este valor de campo como 1 se indica que el tiempo que se pasa en el descanso está incluido en el cómputo de coste de la ruta y la determinación de horas extra. Un valor de 0 indica lo contrario. El valor predeterminado es 1. Sequence Indica la secuencia del descanso en su ruta. Este campo puede contener valores nulos, lo que provoca que el solucionador asigne la secuencia de descanso. Si se especifican valores de secuencia, deben ser positivos y únicos para cada ruta (compartida en las visitas al depósito de renovación, órdenes y descansos), pero no tienen que empezar a partir de 1 ni ser contiguos. | Record Set |
time_units | Las unidades de tiempo para todos los valores de campo basados en el tiempo para el análisis. Muchas entidades y registros de un análisis de VRP tienen campos para almacenar valores de tiempo como, por ejemplo, ServiceTime para órdenes y CostPerUnitTime para rutas. Para minimizar los requisitos de entrada de datos, estos valores de campo no incluyen unidades. En lugar de ello, todos los valores de campo basados en la distancia, se deben introducir en las mismas unidades y este parámetro se utiliza para especificar las unidades de esos valores.
Tenga en cuenta que los campos de salida basados en el tiempo utilizan las mismas unidades especificadas por este parámetro. | String |
distance_units | Las unidades de distancia para todos los valores de campo basados en la distancia para el análisis. Muchas entidades y registros en un análisis de VRP tienen campos para almacenar valores de distancia como, por ejemplo, MaxTotalDistance y CostPerUnitDistance para rutas. Para minimizar los requisitos de entrada de datos, estos valores de campo no incluyen unidades. En lugar de ello, todos los valores de campo basados en la distancia, se deben introducir en las mismas unidades y este parámetro se utiliza para especificar las unidades de esos valores.
Tenga en cuenta que los campos de salida basados en la distancia utilizan las mismas unidades especificadas por este parámetro. | String |
analysis_region (Opcional) | La región en la que se realizará el análisis. Si no se especifica un valor para este parámetro, la herramienta calcula automáticamente el nombre de la región en función de la ubicación de los puntos de entrada. Es obligatorio definir el nombre de la región solamente si la detección automática del nombre de la región no es precisa para sus entradas. Para especificar una región, utilice uno de los siguientes valores:
Heredado:Ya no se admiten los siguientes nombres de regiones, que se eliminarán en versiones futuras. Si especifica uno de los nombres de región obsoletos, la herramienta asignará automáticamente un nombre compatible para su región.
| String |
default_date (Opcional) | La fecha predeterminada para los valores del campo de hora que especifica una hora del día sin incluir una fecha. Puede encontrar estos campos de hora en diversos parámetros de entrada, como los atributos ServiceTime de los parámetros de las órdenes y los descansos. | Date |
uturn_policy (Opcional) | Especifica si se restringe o se permite que en el área de servicio se realicen cambios de sentido en los cruces. Para comprender los valores del parámetro, plantéese la siguiente terminología: un cruce es un punto en el que termina un segmento de calle y puede conectar con uno o varios segmentos distintos; un pseudocruce es un punto exacto en el que dos calles se conectan entre sí; una intersección es un punto en el que se conectan tres o más calles; y un callejón sin salida es el punto en el que un segmento de calle acaba sin conectar con otro.
El valor introducido para este parámetro se ignora a menos que el parámetro Modo de viaje esté establecido en Personalizado, que es el valor predeterminado. | String |
time_window_factor (Opcional) | Especifica la importancia de respetar las ventanas de tiempo.
| String |
spatially_cluster_routes (Opcional) | Especifica si las rutas se agruparán espacialmente.
| Boolean |
route_zones (Opcional) | Delinea los territorios de trabajo para determinadas rutas. Una zona de ruta es una entidad poligonal que se utiliza para restringir rutas a fin de dar servicio solo a las órdenes que queden dentro o cerca del área especificada. A continuación, se muestran algunos ejemplos que indican cuándo pueden ser útiles las zonas de ruta:
Al especificar las zonas de ruta, debe establecer propiedades para cada una, como su ruta asociada, mediante los siguientes atributos: ObjectID Campo de Id. administrado por el sistema. RouteName El nombre de la ruta a la que se aplica esta zona. Una zona de ruta puede tener un máximo de una ruta asociada. Este campo no puede contener valores nulos y es una clave externa para el campo Name en las rutas. IsHardZone Un valor booleano que indica una zona de ruta estricta o no. Un valor True indica que la zona de ruta es estricta; es decir, una orden que caiga fuera del polígono de la zona de ruta no se puede asignar a la ruta. El valor predeterminado es 1 (Verdadero). Un valor Falso (0) indica que se pueden seguir asignando dichas órdenes, pero el coste de atender la orden se pondera mediante función basada en la distancia euclidiana desde la zona de ruta. Básicamente, esto significa que como la distancia en línea recta desde la zona no estricta a la orden aumenta, disminuye la probabilidad de asignar la orden a la ruta. | Feature Set |
route_renewals (Opcional) | Especifica los depósitos intermedios que las rutas pueden visitar para volver a cargar o descargar la carga que están entregando o recogiendo. Concretamente, una reanudación de ruta vincula una ruta a un depósito. La relación indica que la ruta se puede reanudar (volver a cargar o descargar en ruta) en el depósito asociado. Las renovaciones de ruta se pueden utilizar para modelar escenarios en los que un vehículo recoge una carga completa de entregas en el depósito inicial, da servicio a las órdenes, vuelve al depósito para reanudar su carga de entregas y sigue dando servicio a más órdenes. Por ejemplo, en la entrega de gas propano, el vehículo podría realizar varias entregas hasta que el depósito se quede casi vacío o vacío por completo, visita un punto de recarga y realiza más entregas. Aquí aparecen algunas reglas y opciones a tener en cuenta:
Al especificar las renovaciones de ruta, debe establecer propiedades para cada una, como el nombre del depósito en el que puede producirse la renovación de ruta, mediante los siguientes atributos: ObjectID Campo de Id. administrado por el sistema. DepotName El nombre del depósito donde tiene lugar esta reanudación. Este campo no puede contener ningún valor nulo y es una clave externa para el campo Name en los depósitos. RouteName El nombre de la ruta a la que corresponde esta renovación. Este campo no puede contener ningún valor nulo y es una clave externa para el campo Name en las rutas. ServiceTime El tiempo del servicio para la reanudación. Este campo puede contener un valor nulo; un valor nulo indica un tiempo de servicio cero. La unidad para este valor de campo la especifica el parámetro time_units. El tiempo que tarda en cargarse un vehículo en un depósito de reanudación puede depender del tamaño del vehículo y de lo lleno o vacío que esté el vehículo. Sin embargo, el tiempo de servicio para una reanudación de ruta es un valor fijo y no tiene en cuenta la carga real. En consecuencia, al tiempo de servicio de reanudación se le debería dar un valor correspondiente a un camión completamente cargado, con una carga media o podría realizar otra estimación de tiempo propia. | Record Set |
order_pairs (Opcional) | Empareja las órdenes de recogida y entrega de modo que sean atendidas en la misma ruta. Especificar pares de órdenes evita que el análisis asigne solo una de las órdenes a una ruta: o bien se asignan ambas órdenes a la misma ruta o no se asigna ninguna. A veces se requiere que se emparejen la recogida y entrega de las órdenes. Por ejemplo, una compañía de mensajería podría necesitar tener una ruta para recoger un paquete de alta prioridad de una orden y entregarlo a otra sin volver a un depósito o estación de ordenación para minimizar el tiempo de entrega. Estas órdenes relacionadas pueden estar asignadas a la misma ruta con la secuencia adecuada utilizando pares de órdenes. Las restricciones sobre cuánto tiempo puede permanecer el paquete en el vehículo también se pueden asignar; por ejemplo, el paquete puede ser una muestra de sangre que se debe transportar desde la consulta del médico al laboratorio antes de dos horas. Algunas situaciones podrían requerir dos pares de órdenes. Por ejemplo, supongamos que desea transportar a una persona mayor desde su casa al médico y llevarla de regreso a casa. El trayecto desde su casa al médico es un par de órdenes con una hora de llegada deseada al médico, mientras que el trayecto del médico a casa es otro par con un tiempo de recogida deseado. Cuando se especifican los pares de órdenes, se deben establecer propiedades para cada uno, como los nombres de las dos órdenes, mediante los siguientes atributos: ObjectID Campo de Id. administrado por el sistema. FirstOrderName El nombre de la primera orden del par. Este campo es una clave externa para el campo Name en las órdenes. SecondOrderName El nombre de la segunda orden del par. Este campo es una clave externa para el campo Name en las órdenes. La primera orden del par debe ser una orden de recogida; es decir, el valor del campo DeliveryQuantities es nulo. La segunda orden del par debe ser una orden de entrega; es decir, el valor del campo PickupQuantities es nulo. La cantidad que se recoge en la primera orden debe coincidir con la cantidad que se entrega en la segunda orden. Como caso especial, ambas órdenes pueden tener cantidades cero para escenarios donde no se utilizan las capacidades. Las cantidades de órdenes no se cargan o descargan en los depósitos. MaxTransitTime El tiempo máximo de tránsito para el par. El tiempo de tránsito es la duración de tiempo desde la hora de salida de la primera orden a la hora de llegada en la segunda orden. Esta restricción limita el tiempo en vehículo o tiempo de trayecto, entre las dos órdenes. Cuando un vehículo lleva personas o bienes perecederos, el tiempo de trayecto suele ser más corto que el de un vehículo que transporta paquetes o bienes no perecederos. Este campo puede contener valores nulos; un valor nulo indica que no hay ninguna restricción en el tiempo de trayecto. La unidad de este valor de campo la especifica la propiedad timeUnits del objeto de análisis. El solucionador puede realizar el seguimiento y ponderar el tiempo de tránsito en exceso (medido con respecto al tiempo de viaje directo entre pares de órdenes). Por ello, puede dirigir el solucionador de VRP para que adopte uno de estos tres enfoques:
Al asignar un nivel de importancia para el parámetro excess_transit_factor, está eligiendo, de hecho, uno de estos tres enfoques. Sin tener en cuenta el nivel de importancia, el solucionador devolverá siempre un error si se supera el valor MaxTransitTime. | Record Set |
excess_transit_factor (Opcional) | Especifica la importancia de reducir el exceso de tiempo de tránsito de los pares de órdenes. 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 puede ser causado por los descansos del conductor o por viajes a las órdenes y los depósitos intermedios.
| String |
point_barriers (Opcional) | Utilice este parámetro para especificar uno o varios puntos que actuarán como restricciones temporales o representen el tiempo o la distancia adicionales que puede que se necesiten para viajar en las calles subyacentes. Por ejemplo, una barrera de punto se puede usar para representar un árbol caído en una calle o el retraso acumulado en un cruce de ferrocarril. La herramienta impone un límite de 250 puntos que se pueden añadir como barreras. Cuando se especifican las barreras de punto, se pueden definir propiedades para cada una de ellas, como su nombre o el tipo de barrera, mediante el uso de los siguientes atributos: Name El nombre de la barrera. BarrierType Especifica si la barrera de punto restringe el recorrido completamente o agrega tiempo o distancia cuando se cruza. El valor de este atributo se especifica como uno de los siguientes enteros (use el código numérico, no el nombre entre paréntesis):
Additional_Time El tiempo de viaje agregado cuando se realiza el trazado poligonal de la barrera. Este campo solo se aplica a barreras con coste agregado. El valor de este campo debe ser mayor o igual que cero, y sus unidades son las mismas que las especificadas en el parámetro Unidades de medida. Additional_Distance La distancia agregada cuando se realiza el trazado poligonal de la barrera. Este campo solo se aplica a barreras con coste agregado. El valor de este campo debe ser mayor o igual que cero, y sus unidades son las mismas que las especificadas en el parámetro Unidades de medida. Additional_Cost El coste agregado cuando se realiza el trazado poligonal de la barrera. Este campo solo se aplica a barreras con coste agregado. FullEdge Especifica cómo se aplican las barreras de punto de restricción a los elementos de eje durante el análisis. El valor de campo se especifica como uno de los siguientes enteros (use el código numérico, no el nombre entre paréntesis):
CurbApproach Especifica la dirección de tráfico que se ve afectada por la barrera. El valor de campo se especifica como uno de los siguientes enteros (use el código numérico, no el nombre entre paréntesis):
Debido a que los cruces son puntos y no tienen lados, las barreras sobre cruces afectan a todos los vehículos, independientemente de la aproximación a borde. El atributo CurbApproach trabaja con los dos tipos de estándares nacionales de circulación: por la derecha (Estados Unidos) y por la izquierda (Reino Unido). En primer lugar, considere una instalación en el lado izquierdo de un vehículo. Siempre estará situada el lado izquierdo, independientemente de si el vehículo circula por la mitad izquierda o derecha del camino. Los estándares de circulación nacionales pueden influir en su decisión de aproximarse a una instalación por una de las dos direcciones posibles, de modo que quede en el lado derecho o en el lado izquierdo del vehículo. Por ejemplo, para llegar a una instalación y que no haya un carril entre el vehículo y la instalación, elija 1 (Lado derecho del vehículo) en Estados Unidos y 2 (Lado izquierdo del vehículo) en Reino Unido. Bearing La dirección en la que está avanzando un punto. Las unidades son grados y se miden en sentido horario desde el norte verdadero. Este campo se utiliza junto con el campo BearingTol. Los datos de rumbo normalmente se envían de forma automática desde un dispositivo móvil dotado de un receptor GPS. Intente incluir datos de rumbo si está cargando una ubicación de entrada que se mueve, como un peatón o un vehículo. Utilizar este campo tiende a evitar agregar ubicaciones a los bordes equivocados, que puede ocurrir cuando un vehículo está cerca de una intersección o un paso elevado, por ejemplo. El rumbo también ayuda a la herramienta a determinar en qué lado de la calle está el punto. Más información sobre el rumbo y la tolerancia de rumbo BearingTol El valor de tolerancia de rumbo crea un rango de valores de rumbo aceptable al ubicar los puntos en movimiento en un eje con el campo Bearing. Si el valor del campo Bearing está dentro del rango de valores aceptables que se generan a partir de la tolerancia de rumbo en un eje, el punto se puede agregar como una ubicación de red ahí; de lo contrario, se evalúa el punto más cercano sobre el próximo borde más cercano. Las unidades se expresan en grados y el valor predeterminado es 30. Los valores deben ser mayores que 0 y menores que 180. Un valor de 30 significa que cuando Network Analyst intenta agregar una ubicación de red en un eje, se genera un rango de valores de rumbo aceptable 15 grados a cada lado del eje (izquierdo y derecho) y en ambas direcciones digitalizadas del eje. Más información sobre el rumbo y la tolerancia de rumbo NavLatency Este campo solo se utiliza en el proceso de resolución si Bearing y BearingTol también tienen valores. Sin embargo, la introducción de un valor NavLatency es opcional, incluso cuando hay valores en Bearing y BearingTol. NavLatency indica cuánto coste se espera que transcurra desde el momento en que se envía la información de GPS desde un vehículo en movimiento a un servidor y el momento en que el dispositivo de navegación del vehículo recibe la ruta procesada. Las unidades de NavLatency son las mismas que las unidades del atributo de impedancia. | Feature Set |
line_barriers (Opcional) | Utilice este parámetro para especificar una o varias líneas que prohíban viajar a cualquier ubicación en la que las líneas se intersequen con las calles. Por ejemplo, un desfile o una protesta que bloquee el tráfico por varios segmentos de calle se puede modelar con una barrera de línea. Una barrera de línea también puede cercar rápidamente varios caminos para que no se puedan atravesar, alejando así las posibles rutas de las partes no deseadas de la red de calles. La herramienta impone un límite en el número de calles que se pueden restringir usando el parámetro Barreras de línea. Aunque no existe un límite para el número de líneas que se pueden especificar como barreras de línea, el número combinado de calles que se intersecan con todas las líneas no puede ser superior a 500. Cuando se especifican las barreras de línea, puede definir propiedades de nombre y tipo de barrera para cada una de ellas mediante los siguientes atributos: Name El nombre de la barrera. | Feature Set |
polygon_barriers (Opcional) | Utilice este parámetro para especificar polígonos que restrinjan completamente el viaje o ajusten de una forma proporcional el tiempo o la distancia que se requieren para viajar por las calles que se intersecan con los polígonos. El servicio impone un límite en el número de calles que se pueden restringir usando el parámetro Barreras de polígono. Aunque no existe un límite para el número de polígonos que se pueden especificar como barreras de polígono, el número combinado de calles que se intersecan con todos los polígonos no puede ser superior a 2000. Cuando se especifican las barreras de polígono, se pueden definir propiedades para cada una de ellas, como su nombre o el tipo de barrera, mediante el uso de los siguientes atributos: Name El nombre de la barrera. BarrierType Especifica si la barrera restringe el viaje completamente o si escala el coste (por ejemplo, el tiempo o la distancia) para viajar a través de ella. El valor de campo se especifica como uno de los siguientes enteros (use el código numérico, no el nombre entre paréntesis):
ScaledTimeFactor Este es el factor por el cual se multiplica el tiempo de viaje de las calles que intersecan con la barrera. El valor del campo debe ser mayor que cero. Este campo solo se aplica a barreras con coste escalado. ScaledDistanceFactor Este es el factor por el cual se multiplica la distancia de las calles que intersecan con la barrera. El valor del campo debe ser mayor que cero. Este campo solo se aplica a barreras con coste escalado. ScaledCostFactor Este es el factor por el cual se multiplica el coste de las calles que se intersecan con la barrera. El valor del campo debe ser mayor que cero. Este campo solo se aplica a barreras con coste escalado. | Feature Set |
use_hierarchy_in_analysis (Opcional) | Especifica si la jerarquía se usará para buscar las mejores rutas.
La herramienta vuelve automáticamente a usar la jerarquía si la distancia en línea recta entre órdenes, depósitos, o entre órdenes y depósitos es de más de 50 millas (80,47 km), incluso si este parámetro está desactivado (False). Este parámetro se ignora a menos que Modo de viaje esté establecido en Personalizado, que es el valor predeterminado. | Boolean |
restrictions [restrictions,...] | Las restricciones que la herramienta respetará a la hora de buscar las mejores rutas. Una restricción representa una preferencia o un requisito de conducción. En la mayoría de los casos, las restricciones ocasionan la prohibición de carreteras. Por ejemplo, al usar la restricción Evitar carreteras con peaje, se generará una ruta que solo incluirá carreteras con peaje cuando sea necesario viajar por ellas para llegar a un incidente o a una instalación. Restricción de altura permite circular evitando cualquier altura que sea inferior a la altura de su vehículo. Si está transportando materiales corrosivos en el vehículo, utilizar la restricción Prohibidos todos los materiales peligrosos impide transportar los materiales en las carreteras en las que está marcado como ilegal hacerlo. Nota:Los valores introducidos para este parámetro se ignoran a menos que el parámetro Modo de viaje esté establecido en Personalizado. Nota:Algunas restricciones requieren la especificación de un valor adicional para poder usarlas. Este valor se debe asociar con el nombre de la restricción y con un parámetro concreto creado para funcionar con la restricción. Puede identificar esas restricciones si sus nombres aparecen en la columna AttributeName del parámetro Valores de los parámetros de atributos. El campo ParameterValue se debe especificar en el Valores de los parámetros de atributos para que la restricción se use correctamente para encontrar carreteras transitables. Nota:Algunas restricciones solo se admiten en ciertos países. Su disponibilidad se indica por región en la lista siguiente. Para las restricciones con una disponibilidad limitada dentro de una región, puede determinar si están disponibles en un país concreto revisando la tabla de la sección Lista de países de Cobertura de análisis de red. Si un país tiene el valor Sí en la columna Atributos de logística, la restricción con disponibilidad de selección en la región se admite en ese país. Si se especifican nombres de restricción que no están disponibles en el país en el que se encuentran sus incidentes, el servicio pasa por alto las restricciones no válidas. El servicio también pasa por alto las restricciones cuando el valor del parámetro de atributos Uso de restricciones está comprendido entre 0 y 1 (consulte el parámetro Valor de parámetro de atributos). Prohíbe todas las restricciones cuando el valor del parámetro Uso de restricciones es mayor que 0. La herramienta admite las siguientes restricciones:
| String |
attribute_parameter_values (Opcional) | Utilice este parámetro para especificar valores adicionales requeridos por un atributo o restricción, como por ejemplo para especificar si la restricción prohíbe, evita o prefiere circular en carreteras restringidas. Si la restricción se ha ideado para evitar carreteras o darles preferencia, puede especificar en qué medida se deben evitar o se les debe dar preferencia usando este parámetro. Por ejemplo, puede elegir que nunca se usen carreteras de peaje, que se eviten en la medida de lo posible o que se les dé preferencia. Nota:Los valores introducidos para este parámetro se ignoran a menos que el parámetro Modo de viaje esté establecido en Personalizado. Si especifica el parámetro Valores de los parámetros de atributos de una clase de entidad, los nombres de los campos de la clase de entidad deben coincidir con los campos que se describen a continuación:
El parámetro Valores de los parámetros de atributos depende del parámetro Restricciones. El campo ParameterValue solo se usa si el nombre de la restricción se ha especificado como valor del parámetro Restricciones. En Valores de los parámetros de atributos, cada restricción (mostrada como AttributeName) tiene un valor de campo ParameterName, Uso de restricción, que especifica si la restricción prohíbe, evita o prefiere los viajes por las carreteras asociadas con la restricción, además de en qué medida las carreteras se evitan o tienen preferencia. El Uso de restricción ParameterName se puede asignar a cualquiera de los siguientes valores de cadena de caracteres o a los valores numéricos equivalentes que se muestran entre paréntesis:
En la mayoría de casos, puede usar el valor predeterminado, PROHIBITED, como valor de Uso de restricción si la restricción depende de una característica del vehículo como su altura. Sin embargo, en algunos casos, el valor de Uso de restricción depende de las preferencias de generación de rutas del usuario. Por ejemplo, la restricción Evitar carreteras con peaje tiene el valor predeterminado AVOID_MEDIUM para el atributo Uso de restricción. Esto significa que, cuando se utilice la restricción, la herramienta intentará circular fuera de las carreteras con peaje siempre que sea posible. AVOID_MEDIUM también indica lo importante que es evitar las carreteras con peaje al buscar la mejor ruta; tiene una prioridad media. Si se selecciona AVOID_LOW, se da una importancia menor a evitar los peajes, mientras que si se selecciona AVOID_HIGH se le da más importancia y, por lo tanto, es más aceptable que el servicio genere rutas más largas para evitar los peajes. Elegir PROHIBITED no permite viajar en las carreteras con peaje y hará imposible que una ruta viaje por cualquier parte de una carretera de peaje. Tenga en cuenta que evitar o prohibir carreteras con peaje, y evitando así los pagos de peaje, es el objetivo para algunos. En cambio, otros prefieren conducir en las carreteras con peaje porque evitar el tráfico es más valioso para ellos que el dinero gastado en los peajes. En el último caso, elija PREFER_LOW, PREFER_MEDIUM o PREFER_HIGH como valor de Uso de la restricción. Cuanto más alta sea la preferencia, más se apartará la herramienta de su camino para viajar por las carreteras asociadas con la restricción. | Record Set |
populate_route_lines (Opcional) | Especifica si se generará la línea de ruta de salida.
Cuando el parámetro Forma de la ruta se ha definido como Forma verdadera, la generalización de la forma de la ruta se puede controlar mejor usando los valores apropiados para el parámetro Tolerancia de simplificación de líneas de ruta. Sea cual sea el valor elegido para el parámetro Forma de la ruta, las mejores rutas siempre se determinan minimizando el viaje por las calles, nunca usando la distancia en línea recta. Esto significa que solo las formas de la ruta son diferentes, no las calles subyacentes en las que se realizan las búsquedas para encontrar la ruta. | Boolean |
route_line_simplification_tolerance (Opcional) | La cantidad por la que se simplificará la geometría de las líneas de salida para rutas e indicaciones. El valor introducido para este parámetro se ignora a menos que el parámetro Modo de viaje esté establecido en Personalizado, que es el valor predeterminado. La herramienta ignora este parámetro si el parámetro populate_route_lines está desactivado (False). La simplificación mantiene puntos críticos de una ruta, como los giros en intersecciones, para definir la forma esencial de la ruta y quita el resto de los puntos. La distancia de simplificación que especifique será el desplazamiento máximo permisible que puede apartarse la línea simplificada de la línea original. La simplificación de una línea reduce el número de vértices que forman parte de la geometría de la ruta. Esto mejora el tiempo de ejecución de la herramienta. | Linear Unit |
populate_directions (Opcional) | Especifica si la herramienta generará indicaciones de conducción para cada ruta.
| Boolean |
directions_language (Opcional) | El idioma que se utilizará para generar las indicaciones de viaje. Este parámetro solo se usa cuando el parámetro Completar indicaciones está activado (True en Python). El valor del parámetro se puede especificar usando uno de los siguientes códigos de idiomas de dos o cinco caracteres:
Primero, la herramienta busca una coincidencia exacta del idioma especificado, incluida cualquier localización de idioma. Si no se encuentra ninguna coincidencia exacta, intenta hacer una coincidencia con la familia lingüística. Si no se encuentra ninguna coincidencia, la herramienta devuelve las indicaciones en inglés, el idioma predeterminado. Por ejemplo, si el idioma de las indicaciones se especifica como es-MX (español de México), la herramienta generará las indicaciones en español, puesto que admite el código de idioma es, pero no es-MX. Precaución:Si un idioma admite la localización, como el portugués brasileño (pt-BR) y el portugués europeo (pt-PT), especifique la familia lingüística y la localización. Si solo especifica la familia lingüística, la herramienta no hará coincidir dicha familia y, en su lugar, devolverá indicaciones en inglés, el idioma predeterminado. Por ejemplo, si el idioma de las indicaciones se especifica como pt, la herramienta generará las indicaciones en inglés porque no puede determinar si se deben generar en pt-BR o pt-PT. | String |
directions_style_name (Opcional) | Especifica el nombre del estilo de formato para las indicaciones. Este parámetro solo se usa cuando el parámetro Completar indicaciones está activado (True en Python).
| String |
travel_mode (Opcional) | El modo de transporte que se debe modelar en el análisis. Los modos de viaje se administran en ArcGIS Online y el administrador de su organización puede configurarlos para reflejar los flujos de trabajo de la organización. Debe especificar el nombre de un modo de viaje admitido con su organización. Para obtener una lista de los nombres de modos de viaje admitidos, ejecute la herramienta Obtener modos de viaje de la caja de herramientas Utilidades en la misma conexión de servidor SIG que utilizó para acceder a la herramienta. La herramienta Obtener modos de viaje agrega una tabla, Supported Travel Modes, a la aplicación. Cualquier valor del campo Travel Mode Name de la tabla Supported Travel Modes se puede especificar como entrada. También puede especificar el valor del campo Travel Mode Settings como entrada. De esta forma, se acelera la ejecución de la herramienta, ya que esta no tiene que buscar la configuración a partir del nombre del modo de viaje. El valor predeterminado, Personalizado, le permite configurar su propio modo de viaje usando los parámetros de modo de viaje personalizado (Giros en U en cruces, Utilizar jerarquía, Restricciones, Valores de los parámetros de atributos e Impedancia). Los valores predeterminados de los parámetros de modo de viaje personalizado se basan en viajes en coche. Puede elegir el modo Personalizado y establecer los parámetros de modo de viaje personalizado enumerados arriba para modelar un peatón con una velocidad de caminata rápida o un camión con una altura y un peso determinados y con una carga de ciertos materiales peligrosos. Puede probar distintas configuraciones hasta conseguir los resultados de análisis que desee. Una vez que haya identificado la configuración de análisis, trabaje con el administrador de su organización y guardar esta configuración como parte de un modo de viaje nuevo o existente para que todos los usuarios de su organización puedan ejecutar el análisis con la misma configuración. Precaución:Al elegir el modo Personalizado, los valores que establezca para los parámetros del modo de viaje personalizado se incluirán en el análisis. Si se especifica otro modo de viaje definido por su organización, se pasará por alto cualquier valor que haya establecido para los parámetros del modo de viaje personalizado; la herramienta los sobrescribirá con valores del modo de viaje especificado. | String |
impedance (Opcional) | Especifica la impedancia, que es un valor que representa el esfuerzo o el coste de viajar a lo largo de segmentos de carretera o en otras partes de la red de transporte. El tiempo de viaje es una impedancia: un coche puede tardar 1 minuto en viajar un kilómetro a lo largo de una carretera vacía. Los tiempos de viaje pueden variar según el modo de viaje: un peatón puede tardar más de 20 minutos en caminar el mismo kilómetro, por lo que es importante elegir la impedancia correcta para el modo de viaje que se está modelando. La distancia de viaje también puede ser una impedancia; la longitud de una carretera en kilómetros se puede considerar impedancia. En este sentido, la distancia de viaje es la misma para todos los modos: un kilómetro para un peatón es, igualmente, un kilómetro para un coche. (Lo que puede cambiar son los caminos por los que los diferentes modos tienen permitido viajar, lo cual afecta a la distancia entre puntos, que se modela mediante la configuración del modo de viaje.) Precaución:El valor introducido para este parámetro se ignora a menos que el parámetro Modo de viaje esté establecido en Personalizado, que es el valor predeterminado.
Si elige una impedancia basada en el tiempo, como TravelTime, TruckTravelTime, Minutes, TruckMinutes o WalkTime, el parámetro Unidades de descanso se debe configurar con un valor basado en el tiempo; si prefiere una impedancia basada en la distancia, como Millas o Kilómetros, las Unidades de descanso deben estar basadas en la distancia. Heredado:Los valores de impedancia de Tiempo de conducción, Tiempo en camión, Tiempo de recorrido a pie y Distancia de viaje ya no se admiten y se eliminarán en versiones futuras. Si utiliza uno de estos valores, la herramienta usa el valor del parámetro Impedancia de tiempo para valores basados en el tiempo y del parámetro Impedancia de distancia para valores basados en la distancia. | String |
time_zone_usage_for_time_fields (Opcional) | Especifica la zona horaria para los campos de fecha/hora de entrada que admite la herramienta. Este parámetro especifica la zona horaria para los siguientes campos: TimeWindowStart1, TimeWindowEnd1, TimeWindowStart2, TimeWindowEnd2, InboundArriveTime y OutboundDepartTime en órdenes. TimeWindowStart1, TimeWindowEnd1, TimeWindowStart2 y TimeWindowEnd2 en depósitos. EarliestStartTime y LatestStartTime en rutas. TimeWindowStart y TimeWindowEnd en descansos.
Especificar valores de fecha y hora en UTC resulta útil si no conoce la zona horaria en la que se encuentran las órdenes o depósitos, o si tiene órdenes y depósitos en varias zonas horarias y desea que todos los valores de fecha y hora empiecen simultáneamente. La opción UTC solo es aplicable cuando su dataset de red define un atributo de zona horaria. De lo contrario, todos los valores de fecha y hora se tratan siempre como GEO_LOCAL. | String |
save_output_layer (Opcional) | Especifica la configuración del análisis se guardará como un archivo de capa de análisis de red. No puede trabajar directamente con este archivo, aunque lo abra en una aplicación de ArcGIS Desktop, por ejemplo, ArcMap. Se debe enviar al Soporte técnico de Esri para diagnosticar la calidad de los resultados devueltos por la herramienta.
| Boolean |
overrides (Opcional) | Ajustes adicionales que pueden influir en el comportamiento del solucionador al buscar soluciones para problemas de análisis de red. Se debe especificar el valor para este parámetro en la notación de objetos JavaScript (JSON). Por ejemplo, un valor válido tiene el siguiente formato: {"overrideSetting1" : "value1", "overrideSetting2" : "value2"}. El nombre del parámetro de invalidación siempre está incluido entre comillas dobles. Los valores pueden ser un número, operador booleano o cadena de caracteres. El valor predeterminado para este parámetro es ningún valor, lo que indica que no se debe invalidar ningún parámetro del solucionador. Las invalidaciones son parámetros avanzados que se deben utilizar solamente después de un análisis cuidadoso de los resultados obtenidos antes y después de aplicar los parámetros. Para obtener una lista de los parámetros de invalidación admitidos para cada solucionador y sus valores admisibles, póngase en contacto con el Soporte técnico de Esri. | String |
save_route_data (Opcional) | Especifica si la salida incluye un archivo .zip que contiene una geodatabase de archivos con las entradas y las salidas del análisis en un formato que se puede usar para compartir las capas de ruta con ArcGIS Online o Portal for ArcGIS.
| Boolean |
time_impedance (Opcional) | La impedancia basada en el tiempo es un valor que representa el tiempo de viaje a lo largo de segmentos de carretera o en otras partes de la red de transporte. Nota:Si la impedancia del modo de viaje, según se especifica con el parámetro Impedancia, está basada en el tiempo, los valores de los parámetros Impedancia de tiempo e Impedancia deben ser los mismos. De lo contrario, el servicio devolverá un error.
| String |
distance_impedance (Opcional) | La impedancia basada en la distancia es un valor que representa la distancia de viaje a lo largo de segmentos de carretera o en otras partes de la red de transporte. Nota:Si la impedancia del modo de viaje, según se especifica con el parámetro Impedancia, está basada en la distancia, los valores de los parámetros Impedancia de distancia e Impedancia deben ser los mismos. De lo contrario, el servicio devolverá un error.
| String |
populate_stop_shapes (Opcional) | Especifica si la herramienta creará las formas de las paradas asignadas y sin asignar de salida.
| Boolean |
output_format (Opcional) | Especifica el formato en el que se crearán las entidades de salida.
Cuando se especifica un formato de salida basado en archivos, como Archivo JSON o Archivo GeoJSON, no se agregará ninguna salida a la visualización, puesto que la aplicación, por ejemplo, ArcMap o ArcGIS Pro, no puede dibujar el contenido del archivo de resultados. En cambio, el archivo de resultados se descarga en un directorio temporal en su equipo. En ArcGIS Pro, la ubicación del archivo descargado se puede determinar visualizando el valor del parámetro Archivo de resultados de salida en la entrada correspondiente a la ejecución de la herramienta en el historial de geoprocesamiento del proyecto. En ArcMap, la ubicación del archivo se puede determinar accediendo a la opción Copiar ubicación del menú de acceso directo del parámetro Archivo de resultados de salida de la entrada correspondiente a la ejecución de la herramienta en la ventana Resultados de geoprocesamiento. | String |
ignore_invalid_order_locations (Opcional) | Especifica si las órdenes no válidas se deben ignorar al resolver el problema de generación de rutas para vehículos.
| Boolean |
Salida derivada
Nombre | Explicación | Tipo de datos |
solve_succeeded | Determina si la solución del análisis del problema de generación de rutas para vehículos se realizó correctamente. | Booleano |
out_unassigned_stops | Ofrece acceso a las órdenes que ninguna otra ruta pudo visitar. Asimismo, puede determinar la razón por la que las órdenes no se pudieron visitar y realizar los cambios necesarios para corregir el problema. | Conjunto de entidades |
out_stops | Proporciona información acerca de las paradas realizadas en los depósitos, órdenes y descansos. La información indica cuales rutas hacen las paradas, las horas de llegada y salida y la secuencia de paradas. | Conjunto de entidades |
out_routes | Ofrece acceso a los conductores, vehículos y vías de rutas de un análisis de problema de generación de rutas para vehículos. | Conjunto de entidades |
out_directions | Ofrece acceso a las indicaciones paso a paso para cada ruta resultante. | Conjunto de entidades |
out_network_analysis_layer | La capa de análisis de red con propiedades configuradas en los parámetros de la herramienta que se puede utilizar para análisis posteriores o para depurar el mapa. | Archivo |
out_route_data | Archivo .zip que contiene toda la información para una ruta en concreto. | Archivo |
out_result_file | Un archivo .zip que contiene los resultados del análisis, con uno o varios archivos para cada salida. El formato de los archivos individuales viene especificado por el parámetro Formato de salida. | Archivo |
Muestra de código
El siguiente script de Python muestra cómo usar la herramienta Solve Vehicle Routing Problem en un script.
"""This example shows how to obtain the schema for the inputs, populate the inputs,
excute the tool and save the results.
"""
import sys
import time
import arcpy
# Change the username and password applicable to your own ArcGIS Online account
username = "<your user name>"
password = "<your password>"
vrp_service = "https://logistics.arcgis.com/arcgis/services;World/VehicleRoutingProblem;{0};{1}".format(username, password)
# Add the geoprocessing service as a toolbox.
# Check https://pro.arcgis.com/en/pro-app/arcpy/functions/importtoolbox.htm for
# other ways in which you can specify credentials to connect to a geoprocessing service.
arcpy.ImportToolbox(vrp_service)
vrp_tool_name = "SolveVehicleRoutingProblem_VehicleRoutingProblem"
# Set the variables to store results from the tool. Overwrite the results if they already exist.
arcpy.env.overwriteOutput = True
output_routes = "C:/data/Results.gdb/Routes"
assigned_orders = "C:/data/Results.gdb/AssignedOrders"
unassigned_orders = "C:/data/Results.gdb/UnassignedOrders"
# Get the schema for input orders, depots and routes
input_orders = arcpy.GetParameterValue(vrp_tool_name, 0)
input_depots = arcpy.GetParameterValue(vrp_tool_name, 1)
input_routes = arcpy.GetParameterValue(vrp_tool_name, 2)
# Create two orders as input. The coordinate values are in WGS84 spatial reference.
# AssignmentRule for orders is 3 which specifies that the tool should assign a new
# sequence and route for every order.
orders = [(-122.51, 37.7724), (-122.4889, 37.7538)]
sr = arcpy.SpatialReference(4326)
with arcpy.da.InsertCursor(input_orders, ("SHAPE@", "Name", "AssignmentRule")) as cursor:
for i, order in enumerate(orders):
order_shape = arcpy.PointGeometry(arcpy.Point(order[0], order[1]), sr)
row = (order_shape, "O{}".format(i + 1), 3)
cursor.insertRow(row)
# Create one depot as input. The coordinate values are in WGS84 spatial reference
depots = [(-122.3943, 37.7967)]
with arcpy.da.InsertCursor(input_depots, ("SHAPE@", "Name")) as cursor:
for i, depot in enumerate(depots):
depot_shape = arcpy.PointGeometry(arcpy.Point(depot[0], depot[1]), sr)
row = (depot_shape, "D{}".format(i + 1))
cursor.insertRow(row)
# Create one route as input. Ensure that the StartDepotName and EndDepotName fields on
# routes has same value as the Name field on input depots. AssignmentRule for routes
# is 1 which specifies that the tool must include the route.
# CostPerUnitTime and MaxOrderCount are fields that cannot have null values if the route
# is to be considered as a valid route.
with arcpy.da.InsertCursor(input_routes, ("Name", "StartDepotName",
"EndDepotName", "AssignmentRule",
"CostPerUnitTime", "MaxOrderCount")) as cursor:
row = ("R1", "D1", "D1", 1, 1, 10)
cursor.insertRow(row)
# Call the tool
result = arcpy.SolveVehicleRoutingProblem_VehicleRoutingProblem(input_orders, input_depots, input_routes)
arcpy.AddMessage("Running the analysis with result ID: {}".format(result.resultID))
# Check the status of the result object every 1 second until it has a
# value of 4 (succeeded) or greater
while result.status < 4:
time.sleep(1)
# print any warning or error messages returned from the tool
result_severity = result.maxSeverity
if result_severity == 2:
arcpy.AddError("An error occured when running the tool")
arcpy.AddError(result.getMessages(2))
sys.exit(2)
elif result_severity == 1:
arcpy.AddWarning("Warnings were returned when running the tool")
arcpy.AddWarning(result.getMessages(1))
# Save the output routes and orders to a local geodatabase
result.getOutput(0).save(unassigned_orders)
result.getOutput(1).save(assigned_orders)
result.getOutput(2).save(output_routes)
El siguiente ejemplo muestra cómo realizar un análisis de problema de generación de rutas para vehículos con un modo de viaje personalizado que modela camiones que transportan cargas anchas.
"""This example shows how to perform a vehicle routing problem analysis using a custom travel mode that
models trucks carrying wide load."""
import sys
import time
import json
import arcpy
# Change the username and password applicable to your own ArcGIS Online account
username = "<your user name>"
password = "<your password>"
vrp_service = "https://logistics.arcgis.com/arcgis/services;World/VehicleRoutingProblem;{0};{1}".format(username, password)
# Add the geoprocessing service as a toolbox.
arcpy.ImportToolbox(vrp_service)
vrp_tool_name = "SolveVehicleRoutingProblem_VehicleRoutingProblem"
# Set the variables to store results from the tool. Overwrite the results if they already exist.
arcpy.env.overwriteOutput = True
output_routes = "C:/data/Results.gdb/Routes"
assigned_orders = "C:/data/Results.gdb/AssignedOrders"
unassigned_orders = "C:/data/Results.gdb/UnassignedOrders"
# Get the schema for input orders, depots and routes
input_orders = arcpy.GetParameterValue(vrp_tool_name, 0)
input_depots = arcpy.GetParameterValue(vrp_tool_name, 1)
input_routes = arcpy.GetParameterValue(vrp_tool_name, 2)
# Create two orders as input. The coordinate values are in WGS84 spatial reference.
# AssignmentRule for orders is 3 which specifies that the tool should assign a new
# sequence and route for every order.
orders = [(-122.51, 37.7724), (-122.4889, 37.7538)]
sr = arcpy.SpatialReference(4326)
with arcpy.da.InsertCursor(input_orders, ("SHAPE@", "Name", "AssignmentRule")) as cursor:
for i, order in enumerate(orders):
order_shape = arcpy.PointGeometry(arcpy.Point(order[0], order[1]), sr)
row = (order_shape, "O{}".format(i + 1), 3)
cursor.insertRow(row)
# Create one depot as input. The coordinate values are in WGS84 spatial reference
depots = [(-122.3943, 37.7967)]
with arcpy.da.InsertCursor(input_depots, ("SHAPE@", "Name")) as cursor:
for i, depot in enumerate(depots):
depot_shape = arcpy.PointGeometry(arcpy.Point(depot[0], depot[1]), sr)
row = (depot_shape, "D{}".format(i + 1))
cursor.insertRow(row)
# Create one route as input. Ensure that the StartDepotName and EndDepotName fields on routes has same
# value as the Name field on input depots. AssignmentRule for routes is 1 which specifies that the tool
# must include the route. CostPerUnitTime and MaxOrderCount are fields that cannot have null values if
# the route is to be considered as a valid route.
with arcpy.da.InsertCursor(input_routes, ("Name", "StartDepotName",
"EndDepotName", "AssignmentRule",
"CostPerUnitTime", "MaxOrderCount")) as cursor:
row = ("R1", "D1", "D1", 1, 1, 10)
cursor.insertRow(row)
# Change Vehicle Width attribute parameter value to 4.5 (about 15 feet) for the Trucking Time travel mode
# used for the analysis
portal_url = "https://www.arcgis.com"
arcpy.SignInToPortal(portal_url, username, password)
travel_mode_list = arcpy.na.GetTravelModes(portal_url)
tt = travel_mode_list["Trucking Time"]
tt_json = str(tt)
tt_dict = json.loads(tt_json)
tt_dict["restrictionAttributeNames"].append("Width Restriction")
for attr_param in tt_dict["attributeParameterValues"]:
if attr_param['attributeName'] == 'Width Restriction' and attr_param['parameterName'] == 'Vehicle Width (meters)':
attr_param['value'] = 4.5
travel_mode = json.dumps(tt_dict)
# Call the tool
result = arcpy.SolveVehicleRoutingProblem_VehicleRoutingProblem(input_orders, input_depots,
input_routes, travel_mode=travel_mode)
arcpy.AddMessage("Running the analysis with result ID: {}".format(result.resultID))
# Check the status of the result object every 1 second until it has a
# value of 4 (succeeded) or greater
while result.status < 4:
time.sleep(1)
# print any warning or error messages returned from the tool
result_severity = result.maxSeverity
if result_severity == 2:
arcpy.AddError("An error occured when running the tool")
arcpy.AddError(result.getMessages(2))
sys.exit(2)
elif result_severity == 1:
arcpy.AddWarning("Warnings were returned when running the tool")
arcpy.AddWarning(result.getMessages(1))
# Save the output routes and orders to a local geodatabase
result.getOutput(0).save(unassigned_orders)
result.getOutput(1).save(assigned_orders)
result.getOutput(2).save(output_routes)