配車ルート(VRP)解析レイヤの作成(Make Vehicle Routing Problem Layer) (Network Analyst)
サマリ
配車ルート(VRP)ネットワーク解析レイヤを作成し、解析プロパティを設定します。配車ルート解析レイヤは、複数の車両による配送を最適化するときに役立ちます。
使用法
このツールで解析レイヤを作成した後は、[ロケーションの追加(Add Locations)] ツールを使用して解析レイヤにネットワーク解析オブジェクトを追加し、[解析の実行(Solve)] ツールを使用して解析を実行し、[レイヤ ファイルの保存(Save To Layer File)] ツールを使用して結果をディスクに保存することができます。
-
このツールをジオプロセシング モデルに使用するときは、モデルをツールとして動作させる場合、出力ネットワーク解析レイヤにモデル パラメータを作成する必要があります。作成しない場合、出力レイヤは ArcMap のコンテンツ ウィンドウに追加されません。
構文
パラメータ | 説明 | データ タイプ |
in_network_dataset |
配車ルート解析が実行されるネットワーク データセット。VRP ソルバは時間を最小化するツールであるため、ネットワーク データセットは時間ベースのコスト属性を保持している必要があります。 | Network Dataset Layer |
out_network_analysis_layer |
作成する配車ルート ネットワーク解析レイヤの名前。 | String |
time_impedance |
ネットワークのエレメントに沿って通過時間を定義するのに使用する時間コスト属性。配車ルート解析は時間を最小限に短縮するので、時間コスト属性が必要です。 | String |
distance_impedance (オプション) |
ネットワークのエレメントに沿って長さを定義するのに使用する距離コスト属性。距離コスト属性はオプションです。 | String |
time_units (オプション) |
解析レイヤのサブレイヤおよびテーブル(ネットワーク解析のクラス)の時間的なフィールドで使用される時間の単位。時間コスト属性の単位と同じである必要はありません。 | String |
distance_units (オプション) |
解析レイヤのサブレイヤおよびテーブル(ネットワーク解析のクラス)の距離的なフィールドで使用される距離の単位。オプションである距離コスト属性の単位と同じである必要はありません。 | String |
default_date (オプション) |
時間フィールド値として日付が指定されない場合の日付。訪問先オブジェクトに対する時間フィールド(TimeWindowStart1 など)が時刻のみを示す値である場合、日付はデフォルトの日付となります。たとえば、訪問先の TimeWindowStart1 値が 9:00 AM でデフォルトの日付が March 6, 2011 である場合、フィールドの時間全体の値は 9:00 A.M., March 6, 2011 になります。デフォルトの日付はすでに日付を保持している時間フィールド値には無効です。 デフォルトの日付では、次の日付を使用して曜日を指定することもできます。
ネットワーク データセットに履歴交通量データが含まれている場合、ここで指定する日付によって解析の結果が変わる可能性があります。たとえば、ルートが交通量の少ない日曜日の午前 8:00 に開始される場合と、混雑時の月曜日の午前 8:00 に開始される場合では、月曜日のルートの方が時間がかかります。また、最適なパスは交通状況によって異なります。 | Date |
capacity_count (オプション) |
積載容量の制約を示すディメンション数であり、車両の関連する制限を説明するのに必要です。訪問先への配達の場合、各車両が一度に輸送できる重量および体積は物理的および法律的な規制に基づいて制限されます。この場合、訪問先の重量および体積を追跡すれば、この 2 つの積載制限を使用することで、車両への過積載を防ぐことができます。このシナリオでの積載制限の総数は 2(重量と体積)です。問題に応じて、積載制限のさまざまなタイプまたは量を追跡することが必要な場合もあります。積載制限フィールド([訪問先] クラスでは [DeliveryQuantities] と [PickupQuantities]、[ルート] クラスでは [Capacities])には、積載制限を表す数値がスペース区切りの文字列として入力されます。このフィールドで保持できる値の個数は、[積載制限の総数] に指定された値の個数に対応します。同じ配車ルート解析レイヤでは、すべての積載制限フィールド値で各積載制限ディメンションの表示順序は同じになります。積載制限自体は名前を持ちません。したがって、積載制限ディメンションの順番を誤って入れ替えてしまうのを避けるために、すべての積載制限フィールドについては、スペース区切りの積載制限リストを常に同じ順序で入力する必要があります。 | String |
time_window_factor (オプション) |
このパラメータを使用すると、違反を招くことなく、タイム ウィンドウ違反の重要度を評価することができます。タイム ウィンドウ違反は、タイム ウィンドウが閉じてから訪問先、拠点、または休憩にルートが到着した場合に発生します。この超過時間は、タイム ウィンドウの終了からルートの到着時間までの時間です。 VRP ソリューションは、選択された [タイム ウィンドウ違反の重要度] パラメータの値に従って変化します。以下に各値の意味と、各値を設定した場合に VRP ソリューションがどのように変化するかを説明します。
| String |
excess_transit_factor (オプション) |
このパラメータを使用すると、超過移動時間の短縮の重要度を評価することができます。超過移動時間とは、訪問先ペア間を直接移動するのに必要な時間に対する超過時間です。この超過時間は、訪問先ペアへの立ち寄りの途中で、休憩を取ったり他の訪問先や拠点に移動することで発生します。 VRP ソリューションは、選択された [超過移動時間の重要度] の値に従って変化します。以下に各値の意味と、各値を設定した場合に VRP ソリューションがどのように変化するかを説明します。
| String |
UTurn_policy (オプション) |
ストップ間でのネットワーク移動中に発生する可能性があるジャンクションでの U ターンを規制または許可します。
| String |
restriction_attribute_name [restriction_attribute_name,...] (オプション) |
解析中に適用される規制属性のリスト。 | String |
hierarchy (オプション) |
解析を実行するネットワーク データセットに使用する階層属性が定義されていない場合、パラメータは使用されません。この場合、「#」をパラメータ値として使用します。 | Boolean |
hierarchy_settings (オプション) |
レガシ: 10 より前のバージョンでは、このパラメータによって、解析のためにネットワーク データセット構築時のデフォルトの階層範囲から階層範囲の変更を行うことを許可していました。バージョン 10 では、このパラメータはサポートされていないため、空の文字列を指定する必要があります。解析のために階層範囲を変更したい場合、ネットワーク データセットのデフォルトの階層範囲を更新します。 | Network Analyst Hierarchy Settings |
output_path_shape (オプション) |
| String |
コードのサンプル
必須パラメータのみを使用してツールを実行します。
import arcpy arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb" arcpy.MakeVehicleRoutingProblemLayer_na("Transportation/Streets_ND", "DeliveryRoutes","Minutes")
すべてのパラメータを使用してツールを実行します。
import arcpy arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb" arcpy.MakeVehicleRoutingProblemLayer_na("Transportation/Streets_ND", "FridayRoutes","Minutes","Meters", "Minutes","Miles", "1/2/1900", "1", "High","Medium","ALLOW_DEAD_ENDS_ONLY", ["Oneway"],"USE_HIERARCHY","", "TRUE_LINES_WITHOUT_MEASURES")
次のスタンドアロン Python スクリプトは、MakeVehicleRoutingProblemLayer(配車ルート解析レイヤの作成)ツールを使用して複数の車両で訪問先にサービスを提供する方法を示しています。
# Name: MakeVehicleRoutingProblemLayer_Workflow.py # Description: Find the best routes for a fleet of vehicles, which is operated # by a distribution company, to deliver goods from a main # distribution center to a set of grocery stores. # Requirements: Network Analyst Extension #Import system modules import arcpy from arcpy import env try: #Check out the Network Analyst extension license arcpy.CheckOutExtension("Network") #Set environment settings env.workspace = "C:/data/SanFrancisco.gdb" env.overwriteOutput = True #Set local variables inNetworkDataset = "Transportation/Streets_ND" outNALayer = "StoreDeliveryRoute" impedanceAttribute = "TravelTime" distanceAttribute = "Meters" timeUntis = "Minutes" distanceUntis = "Miles" inOrders = "Analysis/Stores" inDepots = "Analysis/DistributionCenter" inRoutes = "RoutesTable" orderFieldMappings = "Name Name #; ServiceTime ServiceTime #; " + \ "TimeWindowStart1 TimeStart1 #; " + \ "TimeWindowEnd1 TimeEnd1 #; MaxViolationTime1 # 0; " + \ "DeliveryQuantities Demand #" depotFieldMappings = "Name Name #; TimeWindowStart1 # 8 AM; " + \ "TimeWindowEnd1 # 5 PM" outLayerFile = "C:/data/output" + "/" + outNALayer + ".lyr" #Create a new Vehicle routing problem (VRP) layer. Since the time-based #attributes such as ServiceTime on orders and CostPerUnitTime on routes is #recorded in minutes, we use minutes for time_units parameter. As we are #using cost per unti distance in routes, we have to specify a #distance attribute. The values for CostPerUnitDistance are in miles, so we #specify miles for distance units parameter. arcpy.MakeVehicleRoutingProblemLayer_na(inNetworkDataset,outNALayer, impedanceAttribute,distanceAttribute, timeUntis, distanceUntis, "", 1, UTurn_policy="NO_UTURNS", output_path_shape="STRAIGHT_LINES") #Load the store locations as orders. Using field mappings we map the Name, #ServiceTime, TimeWindowStart1, TimeWindowEnd1 and DeliveryQuantities #properties for Orders from the fields of store features and assign a value #of 0 to MaxViolationTime1 property arcpy.AddLocations_na(outNALayer, "Orders", inOrders, orderFieldMappings,"") #Load the depots from the distribution center features. Using field mappings #we map the Name properties for Depots from the fields of distribution #center features and assign a value of 8 AM for TimeWindowStart1 and a value #of 5PM for TimeWindowEnd2 properties arcpy.AddLocations_na(outNALayer, "Depots", inDepots, depotFieldMappings,"") #Load the routes from a table containing information about routes #In this case, since the fields on the table and property names for Routes #are same, we will just use the default field mappings arcpy.AddLocations_na(outNALayer, "Routes", inRoutes, "", "") #Solve the VRP layer arcpy.Solve_na(outNALayer) #Save the solved VRP layer as a layer file on disk with relative paths arcpy.SaveToLayerFile_management(outNALayer,outLayerFile,"RELATIVE") print "Script completed successfully" except Exception as e: # If an error occurred, print line number and error message import traceback, sys tb = sys.exc_info()[2] print "An error occured on line %i" % tb.tb_lineno print str(e)