サマリー
配車ルート (VRP) ネットワーク解析レイヤーを作成し、解析プロパティを設定します。配車ルート解析レイヤーは、複数の車両による配送を最適化するときに役立ちます。
使用法
このツールで解析レイヤーを作成した後は、[ロケーションの追加 (Add Locations)] ツールを使用して解析レイヤーにネットワーク解析オブジェクトを追加し、[解析の実行 (Solve)] ツールを使用して解析を実行し、[レイヤー ファイルの保存 (Save To Layer File)] ツールを使用して結果をディスクに保存することができます。
このツールをジオプロセシング モデルに使用するときは、モデルをツールとして動作させる場合、出力ネットワーク解析レイヤーにモデル パラメーターを作成する必要があります。そうしないと、出力レイヤーはマップのコンテンツに追加されません。
構文
MakeVehicleRoutingProblemLayer_na (in_network_dataset, out_network_analysis_layer, time_impedance, {distance_impedance}, {time_units}, {distance_units}, {default_date}, {capacity_count}, {time_window_factor}, {excess_transit_factor}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape})
パラメーター | 説明 | データ タイプ |
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 でデフォルトの日付が 2013 年 3 月 6 日の場合、このフィールドの時刻値全体は 2013 年 3 月 6 日、午前 9:00 になります。時間フィールド値として特定の日付がすでに指定されている場合、デフォルトの日付は無効になります。 デフォルトの日付では、次の日付を使用して曜日を指定することもできます。
ネットワーク データセットに交通量データが含まれている場合、ここで指定する日付によって解析の結果が変わる可能性があります。たとえば、ルートが交通量の少ない日曜日の午前 8:00 に開始される場合と、混雑時の月曜日の午前 8:00 に開始される場合では、月曜日のルートの方が時間がかかります。また、最適なパスは交通状況によって異なります。 | Date |
capacity_count (オプション) |
積載容量の制約を示すディメンション数であり、車両の関連する制限を説明するのに必要です。訪問先への配達の場合、各車両が一度に輸送できる重量および体積は物理的および法律的な規制に基づいて制限されます。この場合、訪問先の重量および体積を追跡すれば、この 2 つの積載制限を使用することで、車両への過積載を防ぐことができます。このシナリオでの積載制限の総数は 2 (重量と体積) です。問題に応じて、積載制限のさまざまなタイプまたは量を追跡することが必要な場合もあります。積載制限フィールド ([訪問先] クラスでは [DeliveryQuantities] と [PickupQuantities]、[ルート] クラスでは [Capacities]) には、積載制限を表す数値がスペース区切りの文字列として入力されます。このフィールドで保持できる値の個数は、[積載制限の総数] に指定された値の個数に対応します。同じ配車ルート解析レイヤーでは、すべての積載制限フィールド値で各積載制限ディメンションの表示順序は同じになります。積載制限自体は名前を持ちません。したがって、積載制限ディメンションの順番を誤って入れ替えてしまうのを避けるために、すべての積載制限フィールドについては、スペース区切りの積載制限リストを常に同じ順序で入力する必要があります。 | Long |
time_window_factor (オプション) | このパラメーターを使用すると、違反を招くことなく、タイム ウィンドウ違反の重要度を評価することができます。タイム ウィンドウ違反は、タイム ウィンドウが閉じてから訪問先、拠点、または休憩にルートが到着した場合に発生します。この超過時間は、タイム ウィンドウの終了からルートの到着時間までの時間です。 VRP ソリューションは、選択された [タイム ウィンドウ違反の重要度] パラメーターの値に従って変化します。以下に各値の意味と、各値を設定した場合に VRP ソリューションがどのように変化するかを説明します。
| String |
excess_transit_factor (オプション) | このパラメーターを使用すると、超過移動時間の短縮の重要度を評価することができます。超過移動時間とは、訪問先ペア間を直接移動するのに必要な時間に対する超過時間です。この超過時間は、訪問先ペアへの立ち寄りの途中で、休憩を取ったり他の訪問先や拠点に移動することで発生します。 VRP ソリューションは、選択された [超過移動時間の重要度] の値に従って変化します。以下に各値の意味と、各値を設定した場合に VRP ソリューションがどのように変化するかを説明します。
| String |
UTurn_policy (オプション) | ジャンクションでの U ターン ポリシー。U ターンを許可するということは、解析においてジャンクションで方向転換し、同じ道路を引き返すことができるということを意味します。 ジャンクションが道路の交差と行き止まりを表すことを前提に、さまざまな車両が、一部のジャンクションでは方向転換でき、他のジャンクションでは方向転換できない、というように設定できます。これは、ジャンクションが交差と行き止まりのどちらを表すかによって変わります。これに対応するには、ジャンクションに接続するエッジの数 (ジャンクションでのノードへの接続数) によって、暗黙的に U ターン ポリシーを指定します。以下では、このパラメーターで選択できる値と、ジャンクションので接続におけるそれぞれの意味について示します。
U ターン ポリシーをさらに正確に定義する必要がある場合、グローバル ターン遅延エバリュエーターをネットワーク コスト属性に追加するか、すでに存在する場合はそれを調整することを検討してください。その際、逆ターンの設定には特に注意が必要です。また、ネットワーク ロケーションの CurbApproach プロパティの設定についても調べてください。 | String |
restriction_attribute_name [restriction_attribute_name,...] (オプション) | 解析中に適用される規制属性のリスト。 | String |
hierarchy (オプション) |
解析を実行するネットワーク データセットに使用する階層属性が定義されていない場合、パラメーターは使用されません。この場合、「"#"」をパラメーター値として使用します。 | Boolean |
hierarchy_settings (オプション) | Network Analyst Hierarchy Settings | |
output_path_shape (オプション) |
| String |
コードのサンプル
MakeVehicleRoutingProblemLayer (配車ルート解析レイヤーの作成) の例 1 (Python ウィンドウ)
必須パラメーターのみを使用してツールを実行します。
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
"DeliveryRoutes","Minutes")
MakeVehicleRoutingProblemLayer (配車ルート解析レイヤーの作成) の例 2 (Python ウィンドウ)
すべてのパラメーターを使用してツールを実行します。
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
"FridayRoutes","Minutes","Meters",
"Minutes","Miles", "1/2/1900", "1",
"High","Medium","ALLOW_DEAD_ENDS_ONLY",
["Oneway"],"USE_HIERARCHY","",
"TRUE_LINES_WITHOUT_MEASURES")
MakeVehicleRoutingProblemLayer (配車ルート解析レイヤーの作成) の例 3 (ワークフロー)
次のスタンドアロン 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"
outNALayerName = "StoreDeliveryRoute"
impedanceAttribute = "TravelTime"
distanceAttribute = "Meters"
timeUntis = "Minutes"
distanceUntis = "Miles"
inOrders = "Analysis/Stores"
inDepots = "Analysis/DistributionCenter"
inRoutes = "RoutesTable"
outLayerFile = "C:/data/output/" + outNALayerName + ".lyr"
#Create a new Vehicle routing problem (VRP) layer. Since the time-based
#attributes such as ServiceTime on orders and CostPerUnitTime on routes is
#recorded in minutes, we use minutes for time_units parameter. As we are
#using cost per unti distance in routes, we have to specify a
#distance attribute. The values for CostPerUnitDistance are in miles, so we
#specify miles for distance units parameter.
outNALayer = arcpy.na.MakeVehicleRoutingProblemLayer(inNetworkDataset, outNALayerName,
impedanceAttribute,
distanceAttribute, timeUntis,
distanceUntis, "", 1,
UTurn_policy = "NO_UTURNS",
output_path_shape = "STRAIGHT_LINES")
#Get the layer object from the result object. The VRP layer can now be
#referenced using the layer object.
outNALayer = outNALayer.getOutput(0)
#Get the names of all the sublayers within the VRP layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Stores the layer names that we will use later
ordersLayerName = subLayerNames["Orders"]
depotsLayerName = subLayerNames["Depots"]
routesLayerName = subLayerNames["Routes"]
#Load the store locations as orders. Using field mappings we map the
#TimeWindowStart1, TimeWindowEnd1 and DeliveryQuantities
#properties for Orders from the fields of store features and assign a value
#of 0 to MaxViolationTime1 property. The Name and ServiceTime properties have
#the correct mapped field names when using the candidate fields from store
#locations feature class.
candidateFields = arcpy.ListFields(inOrders)
orderFieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, ordersLayerName,
False, candidateFields)
orderFieldMappings["TimeWindowStart1"].mappedFieldName = "TimeStart1"
orderFieldMappings["TimeWindowEnd1"].mappedFieldName = "TimeEnd1"
orderFieldMappings["DeliveryQuantities"].mappedFieldName = "Demand"
orderFieldMappings["MaxViolationTime1"].defaultValue = 0
arcpy.na.AddLocations(outNALayer, ordersLayerName, inOrders, orderFieldMappings,"")
#Load the depots from the distribution center features. Using field mappings
#we map the Name properties for Depots from the fields of distribution
#center features and assign a value of 8 AM for TimeWindowStart1 and a value
#of 5PM for TimeWindowEnd2 properties
depotFieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, depotsLayerName)
depotFieldMappings["Name"].mappedFieldName = "Name"
depotFieldMappings["TimeWindowStart1"].defaultValue = "8 AM"
depotFieldMappings["TimeWindowEnd1"].defaultValue = "5 PM"
arcpy.na.AddLocations(outNALayer, depotsLayerName, inDepots, depotFieldMappings, "")
#Load the routes from a table containing information about routes
#In this case, since the fields on the routes table and property names for
#Routes are same, we will just use the default field mappings
arcpy.na.AddLocations(outNALayer, routesLayerName, inRoutes, "", "")
#Solve the VRP layer
arcpy.na.Solve(outNALayer)
#Save the solved VRP layer as a layer file on disk with relative paths
arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")
print "Script completed successfully"
except Exception as e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print "An error occurred on line %i" % tb.tb_lineno
print str(e)
環境
ライセンス情報
- ArcGIS Desktop Basic: はい
- ArcGIS Desktop Standard: はい
- ArcGIS Desktop Advanced: はい