Analyse-Layer für Vehicle Routing Problem erstellen (Network Analyst)

Zusammenfassung

Erstellt einen Netzwerkanalyse-Layer für das Vehicle Routing Problem und legt seine Analyseeigenschaften fest. Ein Analyse-Layer für das Vehicle Routing Problem (VRP) ist für die Optimierung verschiedener Routen bei einer Fahrzeugflotte hilfreich. Der Layer kann mit einem lokalen Netzwerk-Dataset oder mit einem online bzw. in einem Portal gehosteten Service erstellt werden.

Verwendung

  • Nachdem Sie den Analyse-Layer mit diesem Werkzeug erstellt haben, können Sie ihm Netzwerkanalyse-Objekte mithilfe des Werkzeugs Standorte hinzufügen hinzufügen, die Analyse mit dem Werkzeug Berechnen berechnen und die Ergebnisse mit dem Werkzeug In Layer-Datei speichern auf der Festplatte speichern.

  • Bei Verwendung dieses Werkzeugs in Geoverarbeitungsmodellen muss der Ausgabe-Netzwerkanalyse-Layer in einen Modellparameter geändert werden, wenn das Modell als Werkzeug ausgeführt wird. Andernfalls wird der Ausgabe-Layer dem Inhalt der Karte nicht hinzugefügt.

Parameter

BeschriftungErläuterungDatentyp
Netzwerkdatenquelle

Das Netzwerk-Dataset oder der Service, für das bzw. den die Netzwerkanalyse ausgeführt wird. Verwenden Sie die Portal-URL für einen Service.

Network Dataset Layer; String
Layer-Name
(optional)

Der Name des zu erstellenden VRP-Netzwerkanalyse-Layers.

String
Reisemodus
(optional)

Der Name des Reisemodus, der in der Analyse verwendet werden soll. Der Reisemodus stellt eine Sammlung von Netzwerkeinstellungen (z. B. Reisebeschränkungen und Wendenregeln) dar, mit denen festgelegt wird, wie ein Fußgänger, Auto, Lkw oder anderes Transportmittel sich durch das Netzwerk bewegt. Reisemodi werden für die Netzwerkdatenquelle definiert. Ein arcpy.na.TravelMode-Objekt und eine Zeichenfolge mit der gültigen JSON-Repräsentation eines Reisemodus können ebenfalls als Eingabe für den Parameter verwendet werden.

Da die VRP-Berechnung ausschließlich mit zeitbasierter Impedanz erfolgt, stehen lediglich Reisemodi mit zeitbasierter Impedanz zur Auswahl.

String
Uhrzeitfeldeinheiten
(optional)

Gibt die Zeiteinheiten an, die von den Zeitdatenfeldern in den Sublayern und Tabellen des Analyse-Layers verwendet werden (Netzwerkanalyseklassen). Dieser Wert muss nicht mit den Einheiten des Zeitkostenattributs übereinstimmen.

Weitere Informationen zu Kostenattributen

  • MinutenDie Zeiteinheiten werden in Minuten angegeben. Dies ist die Standardeinstellung.
  • SekundenDie Zeiteinheiten werden in Sekunden angegeben.
  • StundenDie Zeiteinheiten werden in Stunden angegeben.
  • TageDie Zeiteinheiten werden in Tagen angegeben.
String
Entfernungsfeldeinheiten
(optional)

Gibt die Entfernungseinheiten an, die von den Entfernungsfeldern in den Sublayern und Tabellen des Analyse-Layers verwendet werden (Netzwerkanalyseklassen). Dieser Wert muss nicht mit den Einheiten des optionalen Entfernungskostenattributs übereinstimmen.

Weitere Informationen zu Kostenattributen

  • MeilenDie Entfernungseinheiten sind Meilen. Dies ist die Standardeinstellung.
  • KilometerDie Entfernungseinheiten sind Kilometer.
  • FußDie Entfernungseinheiten sind Fuß.
  • YardDie Entfernungseinheiten sind Yard.
  • MeterDie Entfernungseinheiten sind Meter.
  • ZollDie Entfernungseinheiten sind Zoll.
  • ZentimeterDie Entfernungseinheiten sind Zentimeter.
  • MillimeterDie Entfernungseinheiten sind Millimeter.
  • DezimeterDie Entfernungseinheiten sind Dezimeter.
  • SeemeilenDie Entfernungseinheiten sind Seemeilen.
String
Standarddatum
(optional)

Das implizite Datum für Zeitfeldwerte, für die kein Datum für die Uhrzeit angegeben wurde. Wenn ein Zeitfeld für ein Auftragsobjekt, z. B. TimeWindowStart, einen reinen Uhrzeitwert enthält, wird als Datum das Standarddatum verwendet. Das Standarddatum wirkt sich nicht auf Zeitfeldwerte aus, für die bereits ein Datum festgelegt ist.

Date
Zeitzone für Zeitfelder
(optional)

Gibt die Zeitzone an, die für die Datums-/Zeit-Eingabefelder verwendet wird, die vom Werkzeug unterstützt werden.

Es ist hilfreich, die Werte für Datum/Uhrzeit in UTC anzugeben, wenn Sie die Zeitzone nicht kennen, in der sich die Aufträge oder Depots befinden, oder wenn Sie über Aufträge und Depots in mehreren Zeitzonen verfügen und alle Werte für Datum/Uhrzeit gleichzeitig gestartet werden sollen. Die UTC-Option kann nur angewendet werden, wenn Ihr Netzwerk-Dataset ein Zeitzonenattribut definiert. Anderenfalls werden alle Werte für Datum/Zeit immer entsprechend der Zeitzone für die Position behandelt.

  • Lokale Zeit an Standorten Die mit den Aufträgen oder Depots verknüpften Werte für Datum/Uhrzeit befinden sich in der Zeitzone, in der sich die Aufträge und Depots befinden. Bei Routen basieren die Werte für Datum/Uhrzeit auf der Zeitzone, in der sich das Startdepot für die Route befindet. Hat eine Route kein Startdepot, müssen sich alle Aufträge und Depots über alle Routen hinweg in einer einzelnen Zeitzone befinden. Bei Pausen basieren die Werte für Datum/Uhrzeit auf der Zeitzone der Routen. Dies ist die Standardeinstellung.
  • UTCDie mit den Aufträgen oder Depots verknüpften Werte für Datum/Uhrzeit sind in der koordinierten Weltzeit (UTC) angegeben und basieren nicht auf der Zeitzone, in der sich die Aufträge oder Depots befinden.
String
Form der Ausgaberoute
(optional)

Gibt den Shape-Typ für die Routen-Features an, die von der Analyse ausgegeben werden.

Gleichgültig, welcher Ausgabe-Shape-Typ gewählt wird, die optimale Route wird immer durch die Netzwerkimpedanz und nie durch die Euklidische Entfernung bestimmt. Dies bedeutet, dass sich nur die Routen-Shapes und nicht der zugrunde liegende Durchlauf des Netzwerks unterscheiden.

  • Entlang des NetzwerksDie Ausgabe-Routen haben die exakte Form der zugrunde liegenden Netzwerkquellen. Die Ausgabe umfasst Routenmesswerte für die lineare Referenzierung. Die Messwerte nehmen ab dem ersten Halt zu und zeichnen die kumulierte Impedanz auf, um eine bestimmte Position zu erreichen.
  • Keine LinienFür die Ausgaberouten wird kein Shape erstellt.
  • Gerade LinienDas Ausgabe-Routen-Shape ist eine einzelne gerade Linie zwischen den Stopps.Diese Option ist nicht verfügbar, wenn die ausgewählte Netzwerkdatenquelle ein Service ist.
String
Gewichtung der Zeitfensterverletzung
(optional)

Gibt an, wie wichtig die Einhaltung von Zeitfenstern ist, ohne Beschränkungsverletzungen zu verursachen. Eine Zeitfensterverletzung tritt auf, wenn eine Route nach dem Schließen eines Zeitfensters einen Auftrag, ein Depot oder eine Unterbrechung erreicht. Als Verletzung ist das Intervall zwischen dem Ende des Zeitfensters und der Ankunftszeit einer Route definiert.

  • HochDer Solver sucht nach einer Lösung, durch die Zeitfensterverletzungen auf Kosten steigender Gesamtfahrzeiten minimiert werden. Wählen Sie diese Einstellung aus, wenn die rechtzeitige Ankunft bei Aufträgen wichtiger ist als eine Minimierung der Gesamtlösungskosten. Dies kann z. B. der Fall sein, wenn Sie einen Termin mit Kunden bei den Aufträgen vereinbart haben und eine verspätete Ankunft vermeiden möchten (eine weitere Möglichkeit ist die Verwendung von harten Zeitfenstern, bei denen keine Verletzung zulässig ist).Wenn weitere Beschränkungen eines Vehicle Routing Problem vorliegen, ist es eventuell unmöglich, alle Aufträge innerhalb ihrer Zeitfenster zu erreichen. In diesem Fall können auch mit der Einstellung "Hoch" Zeitfensterverletzungen auftreten.
  • MittelDer Solver sucht einen Kompromiss zwischen der Einhaltung von Zeitfenstern und der Senkung der Gesamtlösungskosten. Dies ist die Standardeinstellung.
  • GeringDer Solver sucht eine Lösung, durch die die Gesamtfahrzeit unabhängig von Zeitfenstern minimiert wird. Wählen Sie diese Einstellung aus, wenn die Einhaltung von Zeitfenstern weniger wichtig ist als die Reduzierung der Gesamtlösungskosten. Sie können ggf. diese Einstellung wählen, wenn Sie einen wachsenden Rückstand an Service-Anforderungen bewältigen müssen. Um an einem Tag mehr Aufträge durchführen zu können und den Rückstand abzuarbeiten, können Sie diese Einstellung auswählen, auch wenn den Kunden durch die Verspätungen Ihrer Fahrzeugflotte Unannehmlichkeiten entstehen können.
String
Gewichtung der Fahrzeitüberschreitung
(optional)

Gibt an, wie wichtig die Reduzierung von Fahrzeitüberschreitungen ist. Die Fahrzeitüberschreitung entspricht der Zeit, um die die direkte Fahrzeit zwischen den Auftragspaaren überschritten wird. Die Fahrzeitüberschreitung ergibt sich aus Unterbrechungen oder Fahrten zu anderen Aufträgen oder Depots, die zwischen den Auftragspaaren stattgefunden haben. Dieser Parameter ist nur relevant, wenn Sie Auftragspaare verwenden.

Weitere Informationen zu Auftragspaaren

  • HochDer Solver sucht eine Lösung, durch die Fahrzeitüberschreitungen bei Auftragspaaren auf Kosten steigender Gesamtfahrzeiten minimiert werden. Verwenden Sie diese Einstellung, wenn bei Aufträgen Personen befördert werden und Sie die Fahrzeiten der Personen verkürzen möchten. Ein typisches Beispiel sind Taxiunternehmen.
  • MittelDer Solver sucht einen Kompromiss zwischen der Reduzierung der Fahrzeitüberschreitung und der Senkung der Gesamtlösungskosten. Dies ist die Standardeinstellung.
  • GeringDer Solver sucht eine Lösung, durch die die Gesamtlösungskosten unabhängig von Zeitüberschreitungen minimiert werden. Diese Einstellung wird normalerweise von Kurierdiensten verwendet. Da Kurierdienste Pakete und keine Personen befördern, ist die Fahrzeit weniger wichtig. Mit dieser Einstellung können Kuriere Auftragspaare in der ordnungsgemäßen Reihenfolge abwickeln und die Gesamtlösungskosten minimieren.
String
Wegbeschreibung beim Berechnen erstellen
(optional)

Gibt an, ob Wegbeschreibungen erstellt werden.

  • Aktiviert: Detaillierte Wegbeschreibungen werden beim Berechnen erstellt. Dies ist die Standardeinstellung.
  • Deaktiviert: Detaillierte Wegbeschreibungen werden beim Berechnen nicht erstellt.
Boolean
Räumliches Clustering
(optional)

Gibt an, ob räumliches Clustering verwendet wird.

  • Aktiviert: Die einer einzelnen Route zugewiesenen Aufträge werden räumlich gruppiert. Durch das Bilden von Auftrags-Clustern befinden sich Routen häufig in kleineren Gebieten. Dadurch schneiden sich die Routenlinien weniger oft, jedoch können sich die Gesamtfahrzeiten erhöhen. Dies ist die Standardeinstellung.
  • Deaktiviert: Der Solver priorisiert das Bilden von räumlichen Auftrags-Clustern nicht, und die Routenlinien können sich schneiden. Verwenden Sie diese Option, wenn Routenzonen angegeben sind.
Boolean

Abgeleitete Ausgabe

BeschriftungErläuterungDatentyp
Network Analyst-Layer

Der neue Netzwerkanalyse-Layer.

Network Analyst-Layer

arcpy.na.MakeVehicleRoutingProblemAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {time_units}, {distance_units}, {default_date}, {time_zone_for_time_fields}, {line_shape}, {time_window_factor}, {excess_transit_factor}, {generate_directions_on_solve}, {spatial_clustering})
NameErläuterungDatentyp
network_data_source

Das Netzwerk-Dataset oder der Service, für das bzw. den die Netzwerkanalyse ausgeführt wird. Verwenden Sie die Portal-URL für einen Service.

Network Dataset Layer; String
layer_name
(optional)

Der Name des zu erstellenden VRP-Netzwerkanalyse-Layers.

String
travel_mode
(optional)

Der Name des Reisemodus, der in der Analyse verwendet werden soll. Der Reisemodus stellt eine Sammlung von Netzwerkeinstellungen (z. B. Reisebeschränkungen und Wendenregeln) dar, mit denen festgelegt wird, wie ein Fußgänger, Auto, Lkw oder anderes Transportmittel sich durch das Netzwerk bewegt. Reisemodi werden für die Netzwerkdatenquelle definiert. Ein arcpy.na.TravelMode-Objekt und eine Zeichenfolge mit der gültigen JSON-Repräsentation eines Reisemodus können ebenfalls als Eingabe für den Parameter verwendet werden.

String
time_units
(optional)

Gibt die Zeiteinheiten an, die von den Zeitdatenfeldern in den Sublayern und Tabellen des Analyse-Layers verwendet werden (Netzwerkanalyseklassen). Dieser Wert muss nicht mit den Einheiten des Zeitkostenattributs übereinstimmen.

Weitere Informationen zu Kostenattributen

  • MinutesDie Zeiteinheiten werden in Minuten angegeben. Dies ist die Standardeinstellung.
  • SecondsDie Zeiteinheiten werden in Sekunden angegeben.
  • HoursDie Zeiteinheiten werden in Stunden angegeben.
  • DaysDie Zeiteinheiten werden in Tagen angegeben.
String
distance_units
(optional)

Gibt die Entfernungseinheiten an, die von den Entfernungsfeldern in den Sublayern und Tabellen des Analyse-Layers verwendet werden (Netzwerkanalyseklassen). Dieser Wert muss nicht mit den Einheiten des optionalen Entfernungskostenattributs übereinstimmen.

Weitere Informationen zu Kostenattributen

  • MilesDie Entfernungseinheiten sind Meilen. Dies ist die Standardeinstellung.
  • KilometersDie Entfernungseinheiten sind Kilometer.
  • FeetDie Entfernungseinheiten sind Fuß.
  • YardsDie Entfernungseinheiten sind Yard.
  • MetersDie Entfernungseinheiten sind Meter.
  • InchesDie Entfernungseinheiten sind Zoll.
  • CentimetersDie Entfernungseinheiten sind Zentimeter.
  • MillimetersDie Entfernungseinheiten sind Millimeter.
  • DecimetersDie Entfernungseinheiten sind Dezimeter.
  • NauticalMilesDie Entfernungseinheiten sind Seemeilen.
String
default_date
(optional)

Das implizite Datum für Zeitfeldwerte, für die kein Datum für die Uhrzeit angegeben wurde. Wenn ein Zeitfeld für ein Auftragsobjekt, z. B. TimeWindowStart, einen reinen Uhrzeitwert enthält, wird als Datum das Standarddatum verwendet. Das Standarddatum wirkt sich nicht auf Zeitfeldwerte aus, für die bereits ein Datum festgelegt ist.

Date
time_zone_for_time_fields
(optional)

Gibt die Zeitzone an, die für die Datums-/Zeit-Eingabefelder verwendet wird, die vom Werkzeug unterstützt werden.

  • LOCAL_TIME_AT_LOCATIONS Die mit den Aufträgen oder Depots verknüpften Werte für Datum/Uhrzeit befinden sich in der Zeitzone, in der sich die Aufträge und Depots befinden. Bei Routen basieren die Werte für Datum/Uhrzeit auf der Zeitzone, in der sich das Startdepot für die Route befindet. Hat eine Route kein Startdepot, müssen sich alle Aufträge und Depots über alle Routen hinweg in einer einzelnen Zeitzone befinden. Bei Pausen basieren die Werte für Datum/Uhrzeit auf der Zeitzone der Routen. Dies ist die Standardeinstellung.
  • UTCDie mit den Aufträgen oder Depots verknüpften Werte für Datum/Uhrzeit sind in der koordinierten Weltzeit (UTC) angegeben und basieren nicht auf der Zeitzone, in der sich die Aufträge oder Depots befinden.

Es ist hilfreich, die Werte für Datum/Uhrzeit in UTC anzugeben, wenn Sie die Zeitzone nicht kennen, in der sich die Aufträge oder Depots befinden, oder wenn Sie über Aufträge und Depots in mehreren Zeitzonen verfügen und alle Werte für Datum/Uhrzeit gleichzeitig gestartet werden sollen. Die UTC-Option kann nur angewendet werden, wenn Ihr Netzwerk-Dataset ein Zeitzonenattribut definiert. Anderenfalls werden alle Werte für Datum/Zeit immer entsprechend der Zeitzone für die Position behandelt.

String
line_shape
(optional)

Gibt den Shape-Typ für die Routen-Features an, die von der Analyse ausgegeben werden.

  • ALONG_NETWORKDie Ausgabe-Routen haben die exakte Form der zugrunde liegenden Netzwerkquellen. Die Ausgabe umfasst Routenmesswerte für die lineare Referenzierung. Die Messwerte nehmen ab dem ersten Halt zu und zeichnen die kumulierte Impedanz auf, um eine bestimmte Position zu erreichen.
  • NO_LINESFür die Ausgaberouten wird kein Shape erstellt.
  • STRAIGHT_LINESDas Ausgabe-Routen-Shape ist eine einzelne gerade Linie zwischen den Stopps.Diese Option ist nicht verfügbar, wenn die ausgewählte Netzwerkdatenquelle ein Service ist.

Gleichgültig, welcher Ausgabe-Shape-Typ gewählt wird, die optimale Route wird immer durch die Netzwerkimpedanz und nie durch die Euklidische Entfernung bestimmt. Dies bedeutet, dass sich nur die Routen-Shapes und nicht der zugrunde liegende Durchlauf des Netzwerks unterscheiden.

String
time_window_factor
(optional)

Gibt an, wie wichtig die Einhaltung von Zeitfenstern ist, ohne Beschränkungsverletzungen zu verursachen. Eine Zeitfensterverletzung tritt auf, wenn eine Route nach dem Schließen eines Zeitfensters einen Auftrag, ein Depot oder eine Unterbrechung erreicht. Als Verletzung ist das Intervall zwischen dem Ende des Zeitfensters und der Ankunftszeit einer Route definiert.

  • HighDer Solver sucht nach einer Lösung, durch die Zeitfensterverletzungen auf Kosten steigender Gesamtfahrzeiten minimiert werden. Wählen Sie diese Einstellung aus, wenn die rechtzeitige Ankunft bei Aufträgen wichtiger ist als eine Minimierung der Gesamtlösungskosten. Dies kann z. B. der Fall sein, wenn Sie einen Termin mit Kunden bei den Aufträgen vereinbart haben und eine verspätete Ankunft vermeiden möchten (eine weitere Möglichkeit ist die Verwendung von harten Zeitfenstern, bei denen keine Verletzung zulässig ist).Wenn weitere Beschränkungen eines Vehicle Routing Problem vorliegen, ist es eventuell unmöglich, alle Aufträge innerhalb ihrer Zeitfenster zu erreichen. In diesem Fall können auch mit der Einstellung "Hoch" Zeitfensterverletzungen auftreten.
  • MediumDer Solver sucht einen Kompromiss zwischen der Einhaltung von Zeitfenstern und der Senkung der Gesamtlösungskosten. Dies ist die Standardeinstellung.
  • LowDer Solver sucht eine Lösung, durch die die Gesamtfahrzeit unabhängig von Zeitfenstern minimiert wird. Wählen Sie diese Einstellung aus, wenn die Einhaltung von Zeitfenstern weniger wichtig ist als die Reduzierung der Gesamtlösungskosten. Sie können ggf. diese Einstellung wählen, wenn Sie einen wachsenden Rückstand an Service-Anforderungen bewältigen müssen. Um an einem Tag mehr Aufträge durchführen zu können und den Rückstand abzuarbeiten, können Sie diese Einstellung auswählen, auch wenn den Kunden durch die Verspätungen Ihrer Fahrzeugflotte Unannehmlichkeiten entstehen können.
String
excess_transit_factor
(optional)

Gibt an, wie wichtig die Reduzierung von Fahrzeitüberschreitungen ist. Die Fahrzeitüberschreitung entspricht der Zeit, um die die direkte Fahrzeit zwischen den Auftragspaaren überschritten wird. Die Fahrzeitüberschreitung ergibt sich aus Unterbrechungen oder Fahrten zu anderen Aufträgen oder Depots, die zwischen den Auftragspaaren stattgefunden haben. Dieser Parameter ist nur relevant, wenn Sie Auftragspaare verwenden.

Weitere Informationen zu Auftragspaaren

  • HighDer Solver sucht eine Lösung, durch die Fahrzeitüberschreitungen bei Auftragspaaren auf Kosten steigender Gesamtfahrzeiten minimiert werden. Verwenden Sie diese Einstellung, wenn bei Aufträgen Personen befördert werden und Sie die Fahrzeiten der Personen verkürzen möchten. Ein typisches Beispiel sind Taxiunternehmen.
  • MediumDer Solver sucht einen Kompromiss zwischen der Reduzierung der Fahrzeitüberschreitung und der Senkung der Gesamtlösungskosten. Dies ist die Standardeinstellung.
  • LowDer Solver sucht eine Lösung, durch die die Gesamtlösungskosten unabhängig von Zeitüberschreitungen minimiert werden. Diese Einstellung wird normalerweise von Kurierdiensten verwendet. Da Kurierdienste Pakete und keine Personen befördern, ist die Fahrzeit weniger wichtig. Mit dieser Einstellung können Kuriere Auftragspaare in der ordnungsgemäßen Reihenfolge abwickeln und die Gesamtlösungskosten minimieren.
String
generate_directions_on_solve
(optional)

Gibt an, ob Wegbeschreibungen erstellt werden.

  • DIRECTIONSDetaillierte Wegbeschreibungen werden beim Berechnen erstellt. Dies ist die Standardeinstellung.
  • NO_DIRECTIONSDetaillierte Wegbeschreibungen werden beim Berechnen nicht erstellt.
Boolean
spatial_clustering
(optional)

Gibt an, ob räumliches Clustering verwendet wird.

  • CLUSTERDie einer einzelnen Route zugewiesenen Aufträge werden räumlich gruppiert. Durch das Bilden von Auftrags-Clustern befinden sich Routen häufig in kleineren Gebieten. Dadurch schneiden sich die Routenlinien weniger oft, jedoch können sich die Gesamtfahrzeiten erhöhen. Dies ist die Standardeinstellung.
  • NO_CLUSTERDer Solver priorisiert das Bilden von räumlichen Auftrags-Clustern nicht, und die Routenlinien können sich schneiden. Verwenden Sie diese Option, wenn Routenzonen angegeben sind.
Boolean

Abgeleitete Ausgabe

NameErläuterungDatentyp
out_network_analysis_layer

Der neue Netzwerkanalyse-Layer.

Network Analyst-Layer

Codebeispiel

MakeVehicleRoutingProblemAnalysisLayer – Beispiel 1 (Python-Fenster)

Ausführen des Werkzeugs, wenn nur die erforderlichen Parameter verwendet werden.

import arcpy 
arcpy.env.workspace = "C:/Data/SanFrancisco.gdb" 
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND")
MakeVehicleRoutingProblemAnalysisLayer – Beispiel 2 (Python-Fenster)

Führen Sie das Werkzeug unter Verwendung aller Parameter aus.

import arcpy
arcpy.env.workspace = "C:/Data/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemAnalysisLayer('Streets_ND', 'FridayRoutes', 
                                                'Driving Time', 'Minutes', 
                                                'Miles', '1/2/2020', 
                                                'LOCAL_TIME_AT_LOCATIONS', 
                                                'TRUE_LINES_WITHOUT_MEASURES', 
                                                'High', 'Medium', 'DIRECTIONS')
MakeVehicleRoutingProblemAnalysisLayer – Beispiel 3 (Workflow)

Mit dem folgenden eigenständigen Python-Skript wird veranschaulicht, wie das Werkzeug MakeVehicleRoutingProblemAnalysisLayer verwendet werden kann, um eine Reihe von Aufträgen mit einer Fahrzeugflotte durchzuführen.

# Name: MakeVRPAnalysisLayer_Ex3_Workflow.py
# Description: Find the best routes for a fleet of vehicles, which is operated
#              by a distribution company, to deliver goods from a main
#              distribution center to a set of grocery stores.
# Requirements: Network Analyst Extension

# Import system modules
import arcpy
import os

try:
    # Check out the Network Analyst license if available.
    # Fail if the Network Analyst
    # license is not available.
    if arcpy.CheckExtension("network") == "Available":
        arcpy.CheckOutExtension("network")
    else:
        raise arcpy.ExecuteError("Network Analyst Extension license is not available.")

    # Set environment settings
    output_dir = r"C:\Data"
    # The NA layer's data will be saved to the workspace specified here
    arcpy.env.workspace = os.path.join(output_dir, "Output.gdb")
    arcpy.env.overwriteOutput = True

    # Set local variables
    input_gdb = "C:/Data/SanFrancisco.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    layer_name = "StoreDeliveryRoute"
    travel_mode = "Driving Time"
    time_units = "Minutes"
    distance_units = "Miles"
    in_orders = os.path.join(input_gdb, "Analysis", "Stores")
    in_depots = os.path.join(input_gdb, "Analysis", "DistributionCenter")
    in_routes = os.path.join(input_gdb, "Analysis", "Routes")
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    # Create a new Vehicle Routing Problem (VRP) layer. Since the time-based
    # attributes such as ServiceTime on orders and CostPerUnitTime on routes is
    # recorded in minutes, we use minutes for time_units parameter. As we are
    # using cost per unit distance in routes, we have to specify a distance
    # attribute. The values for CosterPerUnitDistance are in miles, so we
    # specify miles for distance units parameter
    result_object = arcpy.na.MakeVehicleRoutingProblemAnalysisLayer(
        network, layer_name, travel_mode, time_units, distance_units,
        line_shape="STRAIGHT_LINES")

    # Get the layer object form the result object. The route layer can now be
    # referenced using the layer object.
    layer_object = result_object.getOutput(0)

    # Get the names of all the sublayers within the VRP layer.
    sub_layer_names = arcpy.na.GetNAClassNames(layer_object)
    # Store the layer names that we will use later
    orders_layer_name = sub_layer_names["Orders"]
    depots_layer_name = sub_layer_names["Depots"]
    routes_layer_name = sub_layer_names["Routes"]

    # Load the store locations as orders. Using field mappings we map the
    # TimeWindowStart1, TimeWindowEnd1, and DeliveryQuantities properties
    # for Orders from the fields of store features and assign a value of
    # 0 to MaxViolationTime1 property. The Name and ServiceTime properties
    # have the correct mapped field names when using the candidate fields
    # from store locations feature class.
    candidate_fields = arcpy.ListFields(in_orders)
    order_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, orders_layer_name, False, candidate_fields)
    order_field_mappings["TimeWindowStart"].mappedFieldName = "TimeStart1"
    order_field_mappings["TimeWindowEnd"].mappedFieldName = "TimeEnd1"
    order_field_mappings["DeliveryQuantity_1"].mappedFieldName = "Demand"
    order_field_mappings["MaxViolationTime"].defaultValue = 0
    arcpy.na.AddLocations(layer_object, orders_layer_name, in_orders, order_field_mappings, "")

    # Load the depots from the distribution center features. Using field mappings
    # we map the Name properties for Depots from the fields of distribution
    # center features and assign a value of 8 AM for TimeWindowStart1 and a
    # value of 5 PM for TimeWindowEnd1 properties
    depot_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, depots_layer_name)
    depot_field_mappings["Name"].mappedFieldName = "Name"
    depot_field_mappings["TimeWindowStart"].defaultValue = "8 AM"
    depot_field_mappings["TimeWindowEnd"].defaultValue = "5 PM"
    arcpy.na.AddLocations(layer_object, depots_layer_name, in_depots, depot_field_mappings, "")

    # Load the routes from a table containing information about routes. In this
    # case, since the fields on the routes table and property names for Routes
    # are the same, we will just use the default field mappings
    routes_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, routes_layer_name)
    routes_field_mappings["Name"].mappedFieldName = "Name"
    routes_field_mappings["StartDepotName"].mappedFieldName = "StartDepotName"
    routes_field_mappings["EndDepotName"].mappedFieldName = "EndDepotName"
    routes_field_mappings["StartDepotServiceTime"].mappedFieldName = "StartDepotServiceTime"
    routes_field_mappings["Capacity_1"].mappedFieldName = "Capacities"
    routes_field_mappings["CostPerUnitTime"].mappedFieldName = "CostPerUnitTime"
    routes_field_mappings["CostPerUnitDistance"].mappedFieldName = "CostPerUnitDistance"
    routes_field_mappings["MaxOrderCount"].mappedFieldName = "MaxOrderCount"
    routes_field_mappings["MaxTotalTime"].mappedFieldName = "MaxTotalTime"
    routes_field_mappings["MaxTotalTravelTime"].mappedFieldName = "MaxTotalTravelTime"
    routes_field_mappings["MaxTotalDistance"].mappedFieldName = "MaxTotalDistance"
    arcpy.na.AddLocations(layer_object, routes_layer_name, in_routes, routes_field_mappings, "")

    # Solve the VRP layer
    arcpy.na.Solve(layer_object)

    # Save the solved VRP layer as a layer file on disk with relative paths
    arcpy.management.SaveToLayerFile(layer_object, output_layer_file, "RELATIVE")

    print("Script Completed Successfully")

except Exception as e:
    # If an error occurred, print line number and error message
    import traceback
    import sys
    tb = sys.exc_info()[2]
    print("An error occurred on line %i" % tb.tb_lineno)
    print(str(e))

Umgebungen

Sonderfälle

Lizenzinformationen

  • Basic: Ja
  • Standard: Ja
  • Advanced: Ja

Verwandte Themen