サマリー
この ArcGIS Online サービスでは、配車ルート (VRP) を解析して各車両の最適ルートを検索できます。
保有車両を管理する担当者は、配車ルートを決定しなければならないことがよくあります。このような決定には、顧客グループを保有車両に最適に割り当てる方法、車両の立ち寄りの順序およびスケジュールを設定する方法が含まれます。このような配車ルート (VRP) の解析を実行する目的は、各ルートの運用および投資コスト全体を最小限に維持しながらタイム ウィンドウを遵守することで、高レベルな顧客サービスを提供することにあります。制約として、使用可能なリソースを使用し、運転者の交代制勤務、走行速度、および顧客の約束事項によって課される時間制限の範囲内にルートを完了する必要があります。
このサービスを使用すると、これらの複雑な車両管理タスクに対するソリューションを決定できます。
中央の倉庫から食品雑貨店に商品を配達する例を考えてみましょう。倉庫では全部で 3 台のトラックを使用できます。倉庫は、特定の時間帯 (午前 8 時から午後 5 時) でのみ運用されます。- その時間内に、すべてのトラックは倉庫に戻る必要があります。各トラックの積載制限は 15,000 ポンドであり、搬送できる商品の量には制限があります。各食品雑貨店からは、配達を必要とする商品の需要が特定量 (ポンド単位) あります。また、各食品雑貨店は、配達の時間を制限する時間帯を設定しています。さらに、運転者の労働時間は、1 日あたり 8 時間に制限されています。運転者には昼休みが必要で、運転および食品雑貨店へのサービス提供に費やした時間に対して賃金が支払われます。目標は、配達を行うにあたりすべてのサービス要件を満たし運転者が特定のルートで費やす合計時間を最小にすることができるように、運転者 (ルート) ごとに配送プランを決定することにあります。次の図は、上記の配車ルート解析を実行して得られる 3 つのルートを示しています。
図
使用法
-
[EditVehicleRoutingProblem (配車ルート (VRP) の編集)] ツールおよび [SolveVehicleRoutingProblem (配車ルート (VRP) の解析)] ツールは、多数の訪問先で配達、集荷、またはサービス呼び出しに対応する必要がある各車両のルートを生成します。[SolveVehicleRoutingProblem (配車ルート (VRP) の解析)] ツールは非同期モードで動作し、実行に時間のかかる大規模な解析に適しています。解析が小規模である場合や、大規模な解析結果の一部を編集する場合は、[EditVehicleRoutingProblem (配車ルート (VRP) の編集)] ツールを使用してください。
-
2,000 件の訪問先と 100 のルートを追加できます。また、1 つのルートに最大 200 件の訪問先を割り当てることができます。
最大で 250 のポイント バリアを追加できます。ライン バリアまたはポリゴン バリアは必要なだけ追加できますが、ライン バリアが交差する道路フィーチャは 500 以下にする必要があり、ポリゴン バリアが交差するフィーチャは 2,000 以下にする必要があります。
結果を短時間で生成できるように、解析時に道路階層を使用することもできます。ただし、ソリューションの精度は最適な結果よりもやや劣ります。
-
[use_hierarchy_in_analysis] パラメーターがオン (True) であるかどうかにかかわらず、訪問先間、拠点間、または訪問先と拠点間の直線距離が 50 マイル (80.46 キロメートル) を超えている場合は、常に階層が使用されます。
-
travel_mode が [Walking] に設定されている場合や [Custom] に設定されていて [Walking] 規制が使用されている場合は、訪問先間または拠点間の直線距離が 50 マイル (80.46 キロメートル) を超えてはなりません。
入力したポイントと通行可能な最も近い道路の距離が 12.42 マイル (20 キロメートル) を超える場合、そのポイントは解析から除外されます。
このツールは、ArcGIS Pro、ArcMap、ArcGlobe、および ArcScene で実行されるよう設計されていますが、ArcCatalog では使用できません。
構文
SolveVehicleRoutingProblem_naagol (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})
パラメーター | 説明 | データ タイプ |
orders | 訪問先を 1 つ以上指定します (最大 2,000 か所)。これらは、VRP 解析のルートで訪問先となる場所です。1 つの訪問先は、配達 (家具の配達など)、引き取り (空港のシャトル バスによる乗客の送迎など)、または何らかのサービスや調査 (伐採作業や建物調査など) を表すことができます。 訪問先を指定する際は、属性を使用して訪問先ごとにプロパティ (名前やサービス時間) を設定できます。訪問先には次の属性を指定できます。 ObjectID: システムで管理される ID フィールド。 Name: 訪問先の名前。名前は一意でなければなりません。名前を NULL のままにした場合、名前は解析時に自動的に生成されます。 ServiceTime: このプロパティは、ルートがネットワーク ロケーションを訪れたときの滞在時間を指定します。つまり、ネットワーク ロケーションのインピーダンス値を格納します。0 または NULL 値は、ネットワーク ロケーションでサービス時間が必要ないことを表します。 このフィールド値の単位は、[time_units] パラメーターで指定します。 TimeWindowStart1: ネットワーク ロケーションの第 1 のタイム ウィンドウの開始時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、開始時刻は設定されません。 タイム ウィンドウは、訪問先への車両の到着が許される時間帯を示すだけです。サービス時間が完了しなければならない時間帯を示すものではありません。サービス時間を考慮に入れ、タイム ウィンドウが終了する前に退去するには、[TimeWindowEnd1] フィールドから [ServiceTime] フィールドを引き算します。 タイム ウィンドウ フィールドは、時刻のみを示す値を含むことも、日時を示す値を含むこともできます。[TimeWindowStart1] などのタイム フィールドの値に時刻だけ (たとえば、午前 8:00) を指定した場合、日付は [Default Date] パラメーターで指定された日付と見なされます。日付と時刻の値 (たとえば、2010 年 7 月 11 日、午前 8:00) を指定すると、複数日にわたるタイム ウィンドウを設定することができます。 解析が複数のタイム ゾーンにまたがる場合、各訪問先のタイム ウィンドウ値はその訪問先が属しているタイム ゾーンの日時を表します。 TimeWindowEnd1: ネットワーク ロケーションの第 1 のタイム ウィンドウの終了時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、終了時刻は設定されません。 TimeWindowStart2: ネットワーク ロケーションの第 2 のタイム ウィンドウの開始時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、第 2 のタイム ウィンドウは設定されません。 [TimeWindowStart1] および [TimeWindowEnd1] フィールドで第 1 のタイム ウィンドウを NULL に指定した場合は、第 2 のタイム ウィンドウも NULL にする必要があります。 両方のタイム ウィンドウに NULL 以外の値を指定する場合、これらのタイム ウィンドウを重なるように指定することはできません。また、第 2 のタイム ウィンドウは第 1 のタイム ウィンドウよりも後になるように設定する必要があります。 TimeWindowEnd2: ネットワーク ロケーションの第 2 のタイム ウィンドウの終了時刻。このフィールドは、NULL 値を含むことができます。 [TimeWindowStart2] と [TimeWindowEnd2] の両方が NULL の場合、第 2 のタイム ウィンドウは設定されません。 [TimeWindowStart2] が NULL 以外で [TimeWindowEnd2] が NULL の場合、第 2 のタイム ウィンドウの開始時間は設定されますが、終了時間は設定されません。これは有効な設定です。 MaxViolationTime1: 到着時刻がタイム ウィンドウの終了よりも後になった場合は、タイム ウィンドウが超過されたと見なされます。このフィールドでは、訪問先の第 1 のタイム ウィンドウについて最大許容超過時間を指定します。このフィールドは値としてゼロを含むことはできますが、負の値を含むことはできません。値がゼロの場合、訪問先の第 1 のタイム ウィンドウにおいてタイム ウィンドウ違反は許されません。つまり、第 1 のタイム ウィンドウは条件が厳しいということです。一方、NULL 値の場合、許容超過時間は無制限です。ゼロ以外の値は、最大遅延時間を指定します。たとえば、第 1 のタイム ウィンドウの終了時刻から最大で 30 分遅れて到着することが許されます。 このフィールドの値の単位は、[Time Field Units] パラメーターで指定します。 解析によってタイム ウィンドウ違反を追跡し、重み付けすることが可能です。このため、次の 3 つの手法のいずれかを使用するように VRP 解析機能に指示することができます。
[Time Window Violation Importance] パラメーターに重要度を割り当てることで、この 3 つの手法の中から実質的に 1 つを選択できます。ただし、いずれの場合も、[MaxViolationTime1] の値セットを超えるとエラーが返されます。 MaxViolationTime2: 訪問先の第 2 のタイム ウィンドウの最大許容超過時間。このフィールドは、[MaxViolationTime1] フィールドと同様です。 InboundArriveTime: 訪問先に配達されるアイテムが開始拠点で準備される時間を定義します。 このインバウンド到着時間がルートの最新の開始時間値より前の場合のみ、訪問先をルートに割り当てることができます。このため、アイテムを積み込む準備ができるまで、拠点を出発することはできません。 このフィールドは、インバウンド到着後の積み替えに関わるシナリオのモデリングに役立ちます。たとえば、訪問先のジョブで、現在拠点にない特別なマテリアルが必要であるとします。このマテリアルは、別のロケーションから発送され、午前 11 時に拠点に到着する予定です。マテリアルの到着前に出発するルートが訪問先に割り当てられないようにするために、訪問先のインバウンド到着時間を午前 11 時に設定します。特別なマテリアルが午前 11 時に到着し、車両に積み込まれ、車両が拠点から出発して割り当てられた訪問先に移動します。 注意:
OutboundDepartTime: 訪問先で積み込むアイテムが終了拠点に到着しなくてはならない時間を定義します。 指定したアウトバウンド出発時間より前にルートが訪問先に移動でき、終了拠点に到着できる場合のみ、訪問先をルートに割り当てることができます。 このフィールドは、アウトバウンド出発時刻の積み替えに関わるシナリオのモデリングに役立ちます。たとえば、発送会社が配達トラックを使って訪問先からパッケージを積み込み、拠点に運び、それを最終目的地へのルートの途中で、別の施設に送るとします。毎日、午後 3 時に、セミトレーラーが拠点に立ち寄り、優先度の高いパッケージを積み込み、それを中央処理ステーションに直接輸送します。発送会社は、優先度の高いパッケージの輸送が次の日の午後 3 時まで遅れないように、配達トラックで訪問先から優先度の高いパッケージを積み込み、それを締め切りの午後 3 時より前に拠点に輸送しようと努めます。このために、アウトバウンド出発時間を午後 3 時に設定します。 注意:
DeliveryQuantities: 配達される荷物のサイズ。重量、体積、数量など、任意の計測方法でサイズを指定できます。重量と体積など、複数の計測方法でサイズを指定することもできます。 単位を指定しないで配達数量を入力します。たとえば、ある訪問先に 300 ポンドの物品を配達する必要がある場合は、「300」と入力します。値がポンド単位であることを覚えておく必要があります。 複数の計測方法を記録する場合、数値をスペースで区切ります。たとえば、配達について重量と体積を記録する場合、重量が 2,000 ポンド、体積が 100 立法フィートであれば、「2000 100」と入力します。この場合も、単位がポンドと立方フィートであることを覚えておく必要があります。また、入力した値と対応する単位の順序も覚えておく必要があります。 ルートの [Capacities] と訪問先の [DeliveryQuantities] および [PickupQuantities] は、同じ方法で指定する必要があります。つまり、値は同じ単位で指定する必要があり、複数の計測方法を使用する場合は、すべてのパラメーターで計測方法が同じ順序になるように指定する必要があります。そのため、[DeliveryQuantities] に、重量 (ポンド) と体積 (立方フィート) を順に指定した場合は、ルートの容量と訪問先の引き取り数量も同じ方法で (ポンド単位の重量、立方フィート単位の体積の順に) 指定する必要があります。単位が混在したり順序が異なったりすると正しい結果が得られません。この場合、警告メッセージは表示されません。 空の文字列または NULL 値は、すべての計測方法でサイズがゼロであることと同じです。積載制限 (または計測方法でのサイズ) の総数に対して文字列内の値の数が不足している場合、残りの値はゼロと見なされます。配送数量を負の値とすることはできません。 PickupQuantities: 引き取る荷物のサイズ。重量、体積、数量など、任意の計測方法でサイズを指定できます。重量と体積など、複数の計測方法でサイズを指定することもできます。ただし、負の値は指定できません。このフィールドは、[Orders] の [DeliveryQuantities] フィールドと同様です。 交換訪問の場合、訪問先は配送数量と引き取り数量の両方を持つことができます。 Revenue: 訪問先が解析に含まれる場合に生成される収入。このフィールドは NULL 値 (収入がゼロであることを示す) を含むことができますが、負の値を含むことはできません。 収入は、目的関数の値を最適化する際に算入されますが、ソリューションの運用コストには組み込まれません。つまり、ルート クラスの [TotalCost] フィールドの出力に収入が取り込まれることはありません。ただし、収入によって、訪問先へのサービス提供の重要度が相対的に重み付けされます。 SpecialtyNames: スペース区切りの文字列であり、訪問先が必要とする特別指定の名前が含まれます。NULL 値は、訪問先が特別指定を必要としていないことを示しています。 訪問先クラスおよびルート クラスに表示されるどの特別指定の綴りも、配車ルート (VRP) 解析でそれらを一緒にリンクできるようにするために、正確に一致している必要があります。 特別指定の説明とその機能を示す例として、芝の手入れと庭木の剪定を行う造園会社を考えます。この会社の一部の訪問先では、背の高い木を剪定するために高所作業車が必要です。これらの訪問先の [SpecialtyNames] フィールドに「BucketTruck」と入力して、特別指定があることを示します。他の訪問先の [SpecialtyNames] は NULL のままにします。同様に、油圧ブームを装備したトラックで移動するルートの [SpecialtyNames] フィールドにも「BucketTruck」と入力します。他のルートのフィールドは NULL のままにします。VRP 解析を実行すると、特別指定のない訪問先は任意のルートに割り当てられますが、高所作業車が必要な訪問先は、特別指定が設定されたルートにだけ割り当てられます。 AssignmentRule: 訪問先をルートに割り当てるためのルールを指定します。このフィールドは、次に示す値のドメインによって制約されます (括弧内の名前ではなく、数値コードを使用してください)。
このフィールドは、NULL 値を含むことができません。 CurbApproach: 車両が訪問先に到着する方向および訪問先から出発する方向を指定します。フィールドには、次に示すいずれかの整数値を指定します (括弧内の名前ではなく、数値コードを使用してください)。
[CurbApproach] プロパティは、米国の右側通行の標準と英国の左側通行の標準の両方に対応するように設計されています。まず、訪問先が車両の左側にある場合を考えます。これは、車両が移動するのが道路の左側であるか右側であるかに関係なく、常に左側にあります。右側通行か左側通行かに応じて異なるのは、訪問先に 2 つの方向のどちらから到着するか、つまり、車両の右側と左側のどちらで到着するかということです。たとえば、訪問先に到着するときに、車両と訪問先の間に交通レーンがない方がいい場合は、米国では 1 (車両の右側) を選択し、英国では 2 (車両の左側) を選択します。 RouteName: 訪問先が割り当てられるルートの名前。 このフィールドを入力フィールドとして使用し、訪問先を特定のルートにあらかじめ割り当てておきます。1 つのルート名に最大 200 件の訪問先を割り当てることができます。このフィールドは NULL 値を含むことができます。NULL 値の場合、訪問先はどのルートにもあらかじめ割り当てられず、解析機能が訪問先にとって最良のルート割り当てを決定します。このフィールドを NULL に設定した場合は、[Sequence] フィールドも NULL に設定する必要があります。 解析の後、訪問先のルートが解析されると、[RouteName] フィールドには訪問先が割り当てられるルートの名前が入ります。 Sequence: このフィールドは、訪問先に割り当てられたルートでの訪問先の順序を示します。 入力フィールドとしてこのフィールドを使用して、ルート上での訪問先の相対的な順序を指定します。このフィールドは NULL 値を含むことができます。NULL 値は、訪問先をルート上のどこにでも配置できることを示します。NULL 値にする場合は、[RouteName] の値も NULL 値でなければなりません。 順序を示す入力値は、正の値であり、各ルートに対して一意です (リニューアル拠点立ち寄り状況、訪問先、および休憩の間で共有される)。ただし、1 から開始する必要も連続している必要もありません。 解析の後、[Sequence] フィールドには、割り当てられたルート上での訪問先の順序の値が入ります。ルートに対して出力される順序の値は、拠点立ち寄り状況、訪問先、および休憩の間で共有され、1 (開始拠点) から始まり、連続的な値となります。ルートは常に拠点から始まるので、ルート解析対象の訪問先に対して出力される最小限の順序の値は 2 となります。 | Feature Set |
depots | 配車ルートの拠点を 1 つ以上指定します。拠点とは、車両が就業日の初めに出発し、就業日の終わりに戻ってくる場所です。車両は、ルートが開始される拠点で荷積み (配達の場合) または荷降ろし (引き取りの場合) を行います。拠点は、場合によっては、リニューアル ロケーションとしての役割を果たすこともできます。これにより、車両は荷を降ろしたり再度積み込んだりして、配達と引き取りを引き続き行うことができます。拠点には、絶対的なタイム ウィンドウで指定される開始時刻と終了時刻があります。車両はこのタイム ウィンドウ外の時間に拠点に到着することは許されません。 訪問先を指定する際は、属性を使用して訪問先ごとにプロパティ (名前やサービス時間) を設定できます。訪問先には次の属性を指定できます。 ObjectID: システムで管理される ID フィールド。 Name: 拠点の名前。ルート レコード セットの [StartDepotName] フィールドと [EndDepotName] フィールドは、ここで指定した名前を参照します。ルート リニューアル レコード セットが使用された場合は、それからも参照されます。 拠点の名前は大文字と小文字を区別しません。また、空白以外の一意の値にする必要があります。 TimeWindowStart1: ネットワーク ロケーションの第 1 のタイム ウィンドウの開始時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、開始時刻は設定されません。 タイム ウィンドウ フィールドは、時刻のみを示す値を含むことも、日時を示す値を含むこともできます。時間フィールドが時刻のみを示す値 (たとえば、午前 8:00) である場合、日付は、解析レイヤーの [Default Date] パラメーターで指定した日付と見なされます。日付と時刻の値 (たとえば、2010 年 7 月 11 日、午前 8:00) を指定すると、複数日にわたるタイム ウィンドウを設定することができます。 解析が複数のタイム ゾーンにまたがる場合、各拠点のタイム ウィンドウ値はその拠点が属しているタイム ゾーンの日時を表します。 TimeWindowEnd1: ネットワーク ロケーションの第 1 のタイム ウィンドウの終了時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、終了時刻は設定されません。 TimeWindowStart2: ネットワーク ロケーションの第 2 のタイム ウィンドウの開始時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、第 2 のタイム ウィンドウは設定されません。 [TimeWindowStart1] および [TimeWindowEnd1] フィールドで第 1 のタイム ウィンドウを NULL に指定した場合は、第 2 のタイム ウィンドウも NULL にする必要があります。 両方のタイム ウィンドウに NULL 以外の値を指定する場合、これらのタイム ウィンドウを重なるように指定することはできません。また、第 2 のタイム ウィンドウは第 1 のタイム ウィンドウよりも後になるように設定する必要があります。 TimeWindowEnd2: ネットワーク ロケーションの第 2 のタイム ウィンドウの終了時刻。このフィールドは、NULL 値を含むことができます。 [TimeWindowStart2] と [TimeWindowEnd2] の両方が NULL の場合、第 2 のタイム ウィンドウは設定されません。 [TimeWindowStart2] が NULL 以外で [TimeWindowEnd2] が NULL の場合、第 2 のタイム ウィンドウの開始時間は設定されますが、終了時間は設定されません。これは有効な設定です。 CurbApproach: 車両が拠点に到着する方向および訪問先から出発する方向を指定します。フィールドには、次に示すいずれかの整数値を指定します (括弧内の名前ではなく、数値コードを使用してください)。
[CurbApproach] プロパティは、米国の右側通行の標準と英国の左側通行の標準の両方に対応するように設計されています。まず、拠点が車両の左側にあるとします。これは、車両が移動するのが道路の左側であるか右側であるかに関係なく、常に左側にあります。右側通行か左側通行かに応じて異なるのは、2 つの方向のうちどちらから拠点に到着するかです。つまり、結局のところ車両の右側または左側になります。たとえば、拠点に到着するときに、車両と拠点の間に交通レーンがない方がいい場合は、米国では 1 (車両の右側) を選択し、英国では 2 (車両の左側) を選択します。 Bearing: ポイントが移動している方向。単位は度で、北を基準に時計回りに測定されます。このフィールドは [BearingTol] フィールドと組み合わせて使用されます。 通常、方位データは、GPS 受信機を備えたモバイル デバイスから自動的に送信されます。歩行者や車両などの移動している訪問先を読み込んでいる場合は、方位データを含めてみてください。 このフィールドを使用すると、たとえば、車両が交差点や高架の近くにいる場合に、ロケーションが間違ったエッジに追加されるのを避けることができます。方位は、ツールがポイントを道路のどちら側に配置するかを決定する際にも役立ちます。 詳細については、方位と方位許容値に関するヘルプ トピック (http://links.esri.com/bearing-and-bearing-tolerance) をご参照ください。 BearingTol: 方位許容値は、[Bearing] フィールドを使用して移動ポイントをエッジに配置するときに、許容される方位の範囲を作成します。[Bearing] フィールドの値が、エッジの方位許容値から生成される許容範囲内にある場合は、ポイントをその場所にネットワーク ロケーションとして配置できます。許容範囲から外れている場合は、次に近いエッジの最も近いポイントが評価されます。 単位は度で、デフォルト値は 30 です。値は 0 より大きく 180 未満でなければなりません。 値が 30 の場合、Network Analyst がネットワーク ロケーションをエッジに追加しようとすると、方位値の許容範囲がエッジの両側 (左と右) に 15 度ずつ、どちらもエッジのデジタイズされた方向に生成されます。 詳細については、ArcGIS ヘルプ システムの方位と方位許容値に関するトピック (http://links.esri.com/bearing-and-bearing-tolerance) をご参照ください。 NavLatency: このフィールドは、Bearing と BearingTol の値が存在する場合にのみ、解析処理で使用されます。ただし、Bearing と BearingTol の値が存在する場合でも、NavLatency 値の入力は任意です。NavLatency は、移動中の車両からサーバーに GPS 情報が送信されてから、車両のナビゲーション デバイスが処理されたルートを受信するまでの予想経過時間を示します。NavLatency の時間単位は、[時間属性] パラメーターで指定されたコスト属性の単位と同じです。 | Feature Set |
routes | ルートを 1 つ以上指定します (最大 100)。ルートは、車両と運転手の特性を示し、解析後には、拠点と訪問先の間の経路も表します。 ルートには、開始拠点と終了拠点のサービス時間、固定または可変の開始時間、時間ベースの運用コスト、距離ベースの運用コスト、複数の容量、運転手の就業日に関するさまざまな制約などを含めることができます。ルートを指定するときに、属性を使用してルートごとにプロパティを設定できます。ルートには次の属性を指定できます。 Name: ルートの名前。名前は一意でなければなりません。 フィールドが NULL 値の場合は、解析時に一意の名前が生成されます。このため、ほとんどの場合、値の入力は必須ではありません。ただし、ルートに事前に割り当てられている休憩、ルート リニューアル、ルート ゾーン、または訪問先が解析に含まれる場合、名前の入力は必須です。これは、このような場合にルート名が外部キーとして使用されるためです。なお、ルート名の大文字と小文字は区別されません。 StartDepotName: ルートの開始拠点の名前。このフィールドは、拠点の [Name] フィールドに対する外部キーです。 [StartDepotName] の値が NULL の場合、ルートは指定されている最初の訪問先から始まります。開始拠点を省略するのは、車両の出発点が不明か、解析に関係ない場合に有効です。ただし、[StartDepotName] が NULL の場合は、[EndDepotName] を NULL にすることはできません。 訪問先/拠点が複数のタイム ゾーンにある場合、仮想の開始拠点は使用できません。 ルートが配達を行っていて、[StartDepotName] が NULL の場合、荷物はルートの開始前に仮想拠点で車両に積み込まれるものと想定されます。リニューアル拠点を持たないルートの場合、その配達訪問先 ([Orders] クラスの [DeliveryQuantities] がゼロ以外の値) の荷物は、開始拠点または仮想拠点で積み込まれます。リニューアル拠点を持つルートの場合、最初のリニューアル拠点の手前にある配達訪問先の荷物のみが開始拠点または仮想拠点で積み込まれます。 EndDepotName: ルートの終了拠点の名前。このフィールドは、拠点クラスの [Name] フィールドに対する外部キーです。 StartDepotServiceTime: 開始拠点でのサービス時間。このフィールドを使用して、車両に荷物を積み込むのに要する時間をモデリングします。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がゼロであることを示します。 このフィールドの値の単位は、[Time Field Units] パラメーターで指定します。 開始拠点と終了拠点でのサービス時間は固定値で ([StartDepotServiceTime] および [EndDepotServiceTime] フィールドの値で指定)、ルートの実際の積み込み時間は考慮されません。たとえば、開始拠点で車両への積み込みにかかる時間は、訪問先のサイズによって異なります。したがって、拠点のサービス時間に満載の積荷または平均的な積荷に応じた値を指定するか、独自に見積もりを行います。 EndDepotServiceTime: 終了拠点でのサービス時間。このフィールドを使用して、車両から荷物を降ろすのに要する時間をモデリングします。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がゼロであることを示します。 このフィールドの値の単位は、[Time Field Units] パラメーターで指定します。 開始拠点と終了拠点でのサービス時間は固定値で ([StartDepotServiceTime] および [EndDepotServiceTime] フィールドの値で指定)、ルートの実際の積み込み時間は考慮されません。たとえば、開始拠点で車両への積み込みにかかる時間は、訪問先のサイズによって異なります。したがって、拠点のサービス時間に満載の積荷または平均的な積荷に応じた値を指定するか、独自に見積もりを行います。 EarliestStartTime: ルートにおいて許容される最も早い開始時刻。解析では、このフィールドを開始拠点のタイム ウィンドウと組み合わせて使用し、ルートの実現可能な開始時刻を決定します。 このフィールドは NULL 値にできません。デフォルト値は午前 8:00 で、時刻のみを示す値となります。このデフォルト値は、[Default Date] パラメーターで指定された日の午前 8:00 と解釈されます。 解析が複数のタイム ゾーンにまたがる場合、[EarliestStartTime] フィールドのタイム ゾーンは開始拠点のタイム ゾーンと同じになります。 LatestStartTime: ルートにおいて許容される最も遅い開始時刻。このフィールドは NULL 値にできません。デフォルト値は午前 10:00 で、時刻のみを示す値となります。このデフォルト値は解析レイヤーの [Default Date] プロパティで指定された日の午前 10:00 と解釈されます。 解析が複数のタイム ゾーンにまたがる場合、[LatestStartTime] フィールドのタイム ゾーンは開始拠点のタイム ゾーンと同じになります。 ArriveDepartDelay: このフィールドには、車両を通常の移動速度まで加速し、停止するまで減速し、ネットワークに出入りする (たとえば、駐車場に出入りする) のに必要な移動時間が格納されます。[ArriveDepartDelay] 値を含めることにより、VRP 解析で、物理的に一致する訪問先にサービスを提供するために多くのルートを送り出すことがなくなります。 このプロパティのコストは、一致しない訪問先、拠点、およびルート リニューアルへの訪問の間に発生します。たとえば、ルートが拠点から出発し、最初の訪問先を訪問したときに、到着と出発の遅延の合計が移動時間に追加されます。最初の訪問先から 2 番目の訪問先まで移動するときにも同じことが起こります。2 番目と 3 番目の訪問先が一致している場合、車両は移動する必要がないため、この間については [ArriveDepartDelay] 値は追加されません。ルートがルート リニューアルに移動する場合、この値が再び移動時間に追加されます。 休憩の場合、車両は減速して停止し、後で加速する必要がありますが、VRP 解析では [ArriveDepartDelay] 値を加算できません。これは、ルートが訪問先を離れ、休憩のために停止し、さらに次の訪問先に向かった場合に、到着と出発の遅延は 2 度ではなく、1 度しか追加されないことを意味します。 たとえば、1 つの高層ビル内に 5 つの一致する訪問先があり、それらが 3 つの異なるルートでサービスを提供されているとします。この場合は、到着と出発の遅延が 3 回発生します。つまり、3 人の運転手がそれぞれ駐車場所を見つけ、同じ建物に入ることが必要になります。ただし、これらの訪問先に 1 つのルートだけで配送できれば、駐車して建物に入る運転手は 1 人だけになり、到着と出発の遅延の発生も 1 回だけになります。VRP 解析ではコストの最小化が図られるため、到着と出発の遅延を抑えるために、単一ルートのオプションが選択されます (特別指定、タイム ウィンドウ、積載制限などの制約によって、複数のルートが必要になる場合があります)。 このフィールド値の単位は、[time_units] パラメーターで指定します。 Capacities: 車両の最大容量。重量、体積、数量など、任意の計測単位で容量を指定できます。重量と体積など、複数の計測方法でサイズを指定することもできます。 単位を指定しないで容量を入力します。たとえば、車両の最大積載量が 40,000 ポンドである場合は、「40000」と入力します。後で参照するために、値がポンド単位であることを覚えておく必要があります。 複数の計測方法を記録する場合、数値をスペースで区切ります。たとえば、重量と体積の両方を記録する場合、車両の最大積載重量が 40,000 ポンド、最大積載体積が 2,000 立法フィートであれば、[Capacities] に「40000 2000」と入力します。この場合も、単位を覚えておく必要があります。また、入力した値と対応する単位の順序も覚えておく必要があります。この場合は、ポンド、立方フィートの順です。 単位と単位の順序を覚えておくことは、次の 2 つの理由から重要です。1 つ目は、後で情報を再解釈できるようにするため、2 つ目は、訪問先の [DeliveryQuantities] フィールドと [PickupQuantities] フィールドの値を正しく入力できるようにするためです。2 つ目の点についてさらに説明すると、ルートが過積載にならないようにするために、配車ルート (VRP) 解析では、[Capacities]、[DeliveryQuantities]、および [PickupQuantities] が同時に参照されるということに注意する必要があります。フィールドには単位を入力できないため、VRP ツールで単位を変換することはできません。このため、値を正しく解釈できるようにするには、ユーザーがこれらの 3 つのフィールドに値を同じ単位を使って同じ順序で入力する必要があります。3 つのフィールドのいずれかの単位または順序が異なると、正しい結果が得られません。この場合、警告メッセージは表示されません。事前に標準の単位と単位の順序を設定しておくこと、また、これら 3 つのフィールドの値を入力するたびに単位と単位の順序を参照することをお勧めします。 空の文字列または NULL 値は、すべての数量がゼロであることを示します。積載制限を負の値とすることはできません。 訪問先の [DeliveryQuantities] フィールドまたは [PickupQuantities] フィールドに対して [Capacities] 文字列内の値の数が不足している場合、残りの値はゼロと見なされます。 VRP 解析では、簡単なブール テストを実行するだけで、積載制限を超過したかを確認できます。ルートの積載制限値が運送する合計数量以上である場合、車両に積荷が収まると見なされます。ただし、積荷および車両の実際の形状によっては、この判断は正しくない可能性があります。たとえば、VRP 解析では、1,000 立方フィートの球体を、幅が 8 フィートで容積が 1,000 立方フィートのトラックに収容することができます。しかし、実際には、球体の直径は 12.6 フィートであり、8 フィート幅のトラックに球体を収容することはできません。 FixedCost: ルートがソリューションで使用される (つまり、訪問先がソリューションに割り当てられている) 場合に限り適用される金銭上の固定コスト。このフィールドは NULL 値を含むことができます。NULL 値は固定コストがゼロであることを示します。このコストは、ルートの合計運用コストの一部です。 CostPerUnitTime: 合計ルート所要時間 (移動時間に加えて、訪問先、拠点、休憩でのサービス時間および待機時間も含む) に対して作業の単位時間ごとに適用される金銭上のコスト。このフィールドは NULL 値を含むことができず、デフォルト値は 1.0 となります。 このフィールド値の単位は、[time_units] パラメーターで指定します。 CostPerUnitDistance: ルート長 (合計移動距離) に対して (移動距離の単位ごとに) 適用される金銭上のコスト。このフィールドは NULL 値を含むことができます。NULL 値はコストがゼロであることを示します。 このフィールド値の単位は、[distance_units] パラメーターで指定します。 OvertimeStartTime: 規定労働時間の長さで、この時間を超過すると規定外労働時間の計算が開始されます。このフィールドは NULL 値を含むことができます。NULL 値は規定外労働時間が適用されないことを示します。 このフィールド値の単位は、[time_units] パラメーターで指定します。 たとえば、合計ルート所要時間が 8 時間を上回るときに、運転手に規定外労働賃金を支払う必要がある場合は、[OvertimeStartTime] に「480」 (8 時間× 60 分) を指定し、[time_units] パラメーターを [Minutes] に設定します。 CostPerUnitOvertime: 規定外労働時間の単位時間ごとに適用される金銭上のコスト。このフィールドは NULL 値を含むことができます。NULL 値は [CostPerUnitOvertime] の値が [CostPerUnitTime] の値と同じであることを示します。 MaxOrderCount: ルートに組み込むことができる訪問先の最大数。このフィールドは NULL 値を含むことができません。デフォルト値は 30 となります。この値は 200 以下にする必要があります。 MaxTotalTime: ルートの最大許容所要時間。ルートの所要時間には、移動時間に加えて、訪問先、拠点、休憩でのサービス時間および待ち時間も含まれます。このフィールドは NULL 値を含むことができます。NULL 値はルートの所要時間に制約がないことを示します。 このフィールド値の単位は、[time_units] パラメーターで指定します。 MaxTotalTravelTime: ルートの最大許容移動時間。移動時間に含まれるのはネットワークの走行に費やされた時間だけで、サービス時間または待ち時間は含まれません。 このフィールドは NULL 値を含むことができます。NULL 値は最大許容移動時間に制約がないことを示します。このフィールドは [MaxTotalTime] フィールドより小さくする必要があります。 このフィールド値の単位は、[time_units] パラメーターで指定します。 MaxTotalDistance: ルートへの最大許容移動距離。 このフィールド値の単位は、[distance_units] パラメーターで指定します。 このフィールドは NULL 値を含むことができます。NULL 値は最大許容移動時間に制約がないことを示します。 SpecialtyNames: スペース区切りの文字列であり、ルートがサポートする特別指定の名前が含められます。NULL 値は、ルートが特別指定をサポートしていないことを示します。 このフィールドは、訪問先クラスの [SpecialtyNames] フィールドに対する外部キーです。 特別指定の説明とその機能を示す例として、芝の手入れと庭木の剪定を行う造園会社を考えます。この会社の一部の訪問先では、背の高い木を剪定するために高所作業車が必要です。これらの訪問先の [SpecialtyNames] フィールドに「BucketTruck」と入力して、特別指定があることを示します。他の訪問先の [SpecialtyNames] は NULL のままにします。同様に、油圧ブームを装備したトラックで移動するルートの [SpecialtyNames] フィールドにも「BucketTruck」と入力します。他のルートのフィールドは NULL のままにします。VRP 解析を実行すると、特別指定のない訪問先は任意のルートに割り当てられますが、高所作業車が必要な訪問先は、特別指定が設定されたルートにだけ割り当てられます。 AssignmentRule: 問題の解決時にルートを使用できるかを指定します。このフィールドは、次に示す値のドメインによって制約されます (括弧内の名前ではなく、数値コードを使用してください)。
| Record Set |
breaks | 特定の配車ルート解析のルートについての休憩時間や休憩を指定します。休憩は、厳密に 1 つのルートに関連付けられ、訪問先にサービスを提供した後、訪問先へのルート途中、または訪問先にサービスを提供する前に取ることができます。休憩には開始時間と継続時間があり、休憩中の賃金が運転手に支払われる場合もあれば、そうでない場合もあります。休憩の開始の設定には、タイム ウィンドウ、最大移動時間、または最大労働時間を使用する 3 つのオプションがあります。 休憩を指定する際は、属性を使用して休憩ごとにプロパティ (名前やサービス時間) を設定できます。訪問先には次の属性を指定できます。 ObjectID: システムで管理される ID フィールド。 RouteName: 休憩を追加するルートの名前 休憩は 1 つのルートだけに割り当てられますが、多くの休憩を同じルートに割り当てることができます。 このフィールドは、[routes] パラメーターの [Name] フィールドに対する外部キーであり、NULL 値を持つことができません。 Precedence: 優先順位値は、特定のルートの休憩を順序付けします。優先順位値が 1 の休憩は、2 の休憩よりも前に取られ、以降の休憩も優先順位値の順番に取られます。 タイム ウィンドウか、最大移動時間か、最大労働時間かにかかわりなく、すべての休暇が優先順位値を持たなければなりません。 ServiceTime: 休憩時間の長さ。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がないことを示します。 このフィールド値の単位は、[time_units] パラメーターで指定します。 TimeWindowStart: 休憩のタイム ウィンドウの開始時間。 このフィールドが NULL で、[TimeWindowEnd] が有効な時刻値を持つ場合、休憩は [TimeWindowEnd] 値より前ならいつでも開始できます。 このフィールドが値を持つ場合、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] フィールドの値は NULL でなければなりません。さらに、解析レイヤーの他のすべての休憩についても、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] の値は NULL でなければなりません。 ルートにタイム ウィンドウが重なった複数の休憩があると、解析時にエラーになります。 休憩のタイム ウィンドウ フィールドは、時刻のみを示す値を含むことも、日時を示す値を含むこともできます。[TimeWindowStart] などの時間フィールドが時刻のみを示す値 (たとえば、午後 12:00) である場合、日付は [default_date] パラメーターに指定された日付と見なされます。日時を示す値 (たとえば、2012 年 11 月 7 日、午後 12:00) を使用すると、複数日にわたってタイム ウィンドウを指定することができます。これは、午前 0 時前後のどこかで休憩を取る必要がある場合に特に有用です。 解析が複数のタイム ゾーンにまたがる場合、各休憩のタイム ウィンドウ値は、[RouteName] フィールドで関連付けられたルートが属しているタイム ゾーンの日時を表します。 TimeWindowEnd: 休憩のタイム ウィンドウの終了時間。 このフィールドが NULL で、[TimeWindowStart] が有効な時刻値を持つ場合、休憩は [TimeWindowStart] 値より後ならいつでも開始できます。 このフィールドが値を持つ場合、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] は Null でなければなりません。さらに、解析レイヤーの他のすべての休憩についても、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] は Null でなければなりません。 MaxViolationTime: このフィールドでは、タイム ウィンドウによる休憩について最大許容超過時間を指定します。到着時刻がこの時間の範囲を超えている場合、タイム ウィンドウを超過したとみなされます。 値がゼロの場合、タイム ウィンドウのどのような超過も許されません。つまり、タイム ウィンドウは条件が厳しい (ハード) ということです。ゼロ以外の値は最大遅延時間の指定を意味します。たとえば、タイム ウィンドウの終了時刻から最大で 30 分遅れて休憩を開始することができますが、この遅延時間には、[Time Window Violation Importance] パラメーターに従ってペナルティが適用されます。 このプロパティは NULL 値にすることができます。[TimeWindowStart] と [TimeWindowEnd] が NULL 値の場合、最大許容超過時間に制限がないことを示します。[MaxTravelTimeBetweenBreaks] または [MaxCumulWorkTime] に値が設定されている場合、[MaxViolationTime] は Null でなければなりません。 このフィールド値の単位は、[time_units] パラメーターで指定します。 MaxTravelTimeBetweenBreaks: 休憩を取る前に累積できる移動時間の最大値。移動時間は前の休憩の終了時か、休憩がまだ取られていないときはルートの開始時から累積されます。 これがルートの最後の休憩なら、[MaxTravelTimeBetweenBreaks] は最後の休憩から終了拠点までに累積可能な最大移動時間を示すことにもなります。 このフィールドの目的は、休憩が必要になるまでに運転できる時間を制限することです。たとえば、解析の [Time Field Units] パラメーター (Python の場合は [time_units]) が [Minutes] に設定され、[MaxTravelTimeBetweenBreaks] の値が 120 である場合、運転手は 2 時間運転した後に休憩を取ります。さらに 2 時間運転した後に 2 回目の休憩を割り当てるには、2 回目の休憩の [MaxTravelTimeBetweenBreaks] プロパティを 120 にします。 このフィールドに値を設定した場合、解析を成功させるには、[TimeWindowStart]、[TimeWindowEnd]、[MaxViolationTime]、および [MaxCumulWorkTime] が Null でなければなりません。 このフィールド値の単位は、[time_units] パラメーターで指定します。 MaxCumulWorkTime: 休憩を取る前に累積できる作業時間の最大値。作業時間は常にルートの開始時から累積されます。 作業時間は、移動時間と、訪問先、拠点、休憩でのサービス時間の合計です。ただし、これには待ち時間は含まれません。待ち時間とは、ルート (または運転手) が訪問先または拠点でタイム ウィンドウの開始まで待機した時間のことです。 このフィールドの目的は、休憩が必要になるまでに作業できる時間を制限することです。たとえば、[time_units] パラメーターが [Minutes] に設定され、[MaxCumulWorkTime] の値が 120、[ServiceTime] の値が 15 である場合、運転手は 2 時間作業した後に 15 分間の休憩を取ります。 引き続き最後の例で、さらに 3 時間作業した後に 2 回目の休憩が必要とします。この休憩を指定するには、2 回目の休憩の [MaxCumulWorkTime] 値に 315 (5 時間と 15 分) を入力します。この数には、前の休憩の [MaxCumulWorkTime] と [ServiceTime] の値に加えて、2 回目の休憩が許可される前の 3 時間の追加作業時間が含まれます。最大作業時間の休憩を誤って取ることを避けるために、ルートの開始から作業時間を累積していること、および作業時間にはそれまでに訪問した拠点、訪問先、休憩でのサービス時間が含まれることを再確認してください。 このフィールドに値を設定した場合、解析を成功させるには、[TimeWindowStart]、[TimeWindowEnd]、[MaxViolationTime]、および [MaxTravelTimeBetweenBreaks] が Null でなければなりません。 このフィールド値の単位は、[time_units] パラメーターで指定します。 IsPaid: 休憩に賃金を支払うかをブール値で指定します。[True] 値を指定すると、休憩で費やされた時間はルートのコスト計算および規定外労働時間の判定で考慮されます。[False] 値を指定すると、休憩で費やされた時間はルートのコスト計算および規定外労働時間の判定で考慮されません。デフォルト値は [True] です。 Sequence: 入力フィールドとして、ルート上での休憩の順序を示します。このフィールドは、NULL 値を含むことができます。順序を示す入力値は、正の値であり、各ルートに対して一意です (リニューアル拠点立ち寄り状況、訪問先、および休憩の間で共有される)。ただし、1 から開始する必要も連続している必要もありません。 解析では、順序フィールドが変更されます。解析実行後、このフィールドにはルート上での休憩の順序の値が含まれます。ルートに対して出力される順序の値は、拠点立ち寄り状況、訪問先、および休憩の間で共有され、1 (開始拠点) から始まり、連続的な値となります。 | Record Set |
time_units | 解析における、すべての時間ベースのフィールド値についての時間単位。配車ルート (VRP) 解析の多くのフィーチャとレコードには、訪問先の [ServiceTime] やルートの [CostPerUnitTime] といった、時間値を保存するためのフィールドがあります。必要なデータ入力を最小限にするために、それらのフィールド値には単位が含まれていません。その代わり、すべての距離ベースのフィールド値は同じ単位で入力する必要があります。このパラメーターは、それらの値の単位を指定するために使用されます。 なお、時間ベースの出力フィールドには、このパラメーターで指定した単位と同じ単位が使用されます。 | String |
distance_units | 解析における、すべての距離ベースのフィールド値についての距離単位。配車ルート (VRP) 解析における多くのフィーチャとレコードには、距離値を格納するためのフィールド ([ルート] の [MaxTotalDistance] や [CostPerUnitDistance] など) があります。必要なデータ入力を最小限にするために、それらのフィールド値には単位が含まれていません。その代わり、すべての距離ベースのフィールド値は同じ単位で入力する必要があります。このパラメーターは、それらの値の単位を指定するために使用されます。 なお、距離ベースの出力フィールドには、このパラメーターで指定した単位と同じ単位が使用されます。 | String |
analysis_region (オプション) | 解析を実行する地域を指定します。このパラメーターに値を指定しない場合、入力ポイントの位置に基づいて地域名が自動的に計算されます。ツールの実行速度を上げるため、地域名を設定することをお勧めします。地域を指定するには、次のいずれかの値を使用します。
| String |
default_date (オプション) | 日付を含まずに時刻を指定された時間フィールドの値に使用される、デフォルトの日付。これらの時間フィールドは、[orders] や [breaks] パラメーターの [ServiceTime] 属性など、さまざまな入力パラメーターで使用されます。 | Date |
uturn_policy (オプション) | 到達圏を生成する際に、ジャンクションでの U ターンを規制または許可する場合は、このパラメーターを使用します。パラメーターの値を理解するために、ここでは次のような用語を使用します。ジャンクションは道路セグメントが終了するポイントを表し、一般的には 1 つ以上の別のセグメントに接続されます。疑似ジャンクションは 2 つの道路が相互に接続されるポイントです。交差点は 3 つ以上の道路が接続する場所を表し、行き止まりは道路セグメントが他の道路に接続せずに終了している場所を表します。これらの情報を基に、パラメーターには次の値を指定できます。
このパラメーターに指定した値は、[移動モード] を [カスタム] (デフォルト値) に設定しなければ無視されます。 | String |
time_window_factor (オプション) | タイム ウィンドウ履行の重要度が評価されます。次に 3 つのオプションについて説明します。
| String |
spatially_cluster_routes (オプション) |
| Boolean |
route_zones (オプション) | 指定されたルートの担当区域を描画します。ルート ゾーンはポリゴン フィーチャです。ルートゾーンを使用して、特定の領域内にある訪問先または領域の近くにある訪問先にのみサービスを提供するようにルートを制限します。どのようなときにルート ゾーンが役に立つかを以下の例で示します。
ルート ゾーンを指定する際は、属性を使用してそれぞれのプロパティ (関連付けられたルートなど) を設定する必要があります。ルート ゾーンには次の属性を指定できます。 ObjectID: システムで管理される ID フィールド。 RouteName: このゾーンが適用されるルートの名前。ルート ゾーンは、関連付けられたルートを最大で 1 つ持っています。このフィールドは、NULL 値を含むことができません。[routes] パラメーターでフィーチャの [Name] フィールドに対する外部キーとなります。 IsHardZone: ハード ルート ゾーンかソフト ルート ゾーンかをブール値で示します。[True] 値はルート ゾーンがハード ルート ゾーンであることを示します。つまり、ルート ゾーン ポリゴンの外にある訪問先をルートに割り当てることはできません。デフォルト値は 1 (True) です。[False] 値 (0) を指定した場合、ルート ゾーン ポリゴンの外にある訪問先をルートに割り当てることはできますが、訪問先へのサービス提供のコストはルート ゾーンからのユークリッド距離に基づく関数によって重み付けされます。基本的に、ソフト ゾーンから訪問先までの直線距離が長くなるに従い、訪問先をルートに割り当てる機会が低くなることを意味しています。 | Feature Set |
route_renewals (オプション) | 配達するか引き取る積荷の、再積み込みまたは荷降ろしを行うためにルートが訪問できる、中間拠点を指定します。特に、ルート リニューアルは、ルートを拠点にリンクします。このリレーションシップは、関連付けられた拠点でルートがリニューアル (途上での再積み込みまたは荷降ろし) できることを示します。 ルート リニューアルを使用してモデリング可能なシナリオとして、「開始拠点で配達する荷物を車両に満載し、訪問先に供給し、拠点に戻って配達用の荷物を再び積み込み、訪問先への供給を継続する」というものがあります。たとえば、プロパンガスの配達の場合は、車両はタンクがほとんどまたは完全に空になるまで複数回配達を行い、燃料補給ポイントに立ち寄り、さらに配達を継続することができます。 ルート シード ポイントで作業する場合にも考慮すべき、いくつかのルールとオプションを次に示します。
ルート リニューアルを指定する際は、属性を使用してそれぞれのプロパティ (ルート リニューアルを行える拠点の名前など) を設定する必要があります。ルート リニューアルには次の属性を指定できます。 ObjectID: システムで管理される ID フィールド。 DepotName: このリニューアルが行われる拠点の名前。このフィールドは、NULL 値を含むことができません。[depots] パラメーターの [Name] フィールドに対する外部キーとなります。 RouteName: このリニューアルが適用されるルートの名前。このフィールドは、NULL 値を含むことができません。[routes] パラメーターの [Name] フィールドに対する外部キーとなります。 ServiceTime: リニューアルのサービス時間。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がゼロであることを示します。 このフィールド値の単位は、[time_units] パラメーターで指定します。 リニューアル拠点で車両に荷積みするのにかかる時間は、車両のサイズと、車両にどれくらい荷物が積まれているかに左右される場合があります。ただし、ルート リニューアルのサービス時間は固定値であり、実際の積荷を考慮に入れません。したがって、リニューアル サービス時間には、満載の積荷の場合のサービス時間、平均的な積荷の場合の時間、または別の時間評価による値を指定してください。 | Record Set |
order_pairs (オプション) | このパラメーターは、サービスが同じルートで提供されるように、配達と引き取りの訪問先をペアにします。 訪問先に対する引き取りと配達をペアにすることが必要な場合があります。たとえば、宅配会社が、ルートで訪問先から優先度の高い荷物を引き取り、拠点や選別ステーションに戻ることなくそれを別の訪問先に配達し、さらに配達時間を最小化する必要がある場合などです。これらの関連する訪問先を、訪問先のペアを使用して適切に順序付けし、同じルートに割り当てることができます。さらに、荷物を車両に載せておける時間の制限を割り当てることもできます。たとえば荷物が、病院から試験所まで 2 時間以内に輸送する必要のある血液サンプルの場合です。 訪問先ペアを指定する際は、属性を使用して各ペアのプロパティ (2 つの訪問先の名前など) を設定する必要があります。訪問先ペアには次の属性を指定できます。 ObjectID: システムで管理される ID フィールド。 FirstOrderName: ペアの第 1 の訪問先の名前。このフィールドは、[orders] パラメーターの [Name] フィールドに対する外部キーです。 SecondOrderName: ペアの第 2 の訪問先の名前。このフィールドは、[orders] パラメーターの [Name] フィールドに対する外部キーです。 ペアの第 1 の訪問先は引き取り訪問先でなければなりません。つまり、その [DeliveryQuantities] フィールドの値は NULL です。ペアの第 2 の訪問先は配達訪問先でなければなりません。つまり、その [PickupQuantities] フィールドの値は NULL です。第 1 の訪問先で引き取られる数量は、第 2 の訪問先に配達される数量と対応する必要があります。特殊な場合として、積荷制限が使用されていないシナリオについては、両方の訪問先の数量がゼロになることがあります。 訪問先の数量は拠点で荷積みまたは荷降ろしされません。 MaxTransitTime: ペアの最大移動時間です。移動時間とは、第 1 の訪問先の出発時刻から第 2 の訪問先の到着時刻までの時間の長さです。この制約により、2 つの訪問先の間で車両に積まれている時間 (乗車時間) が制限されます。人または生鮮食料品を車両で輸送する場合、その乗車時間は、荷物または非生鮮食料品を車両で輸送する場合より短くなるのが普通です。このフィールドは NULL 値を含むことができます。NULL 値は乗車時間に制約がないことを示します。 このフィールド値の単位は、[time_units] パラメーターで指定します。 解析では、超過移動時間 (訪問先ペア間の直接移動時間に基づく) を追跡し、重み付けすることができます。このため、次の 3 つの手法のいずれかを使用するように VRP 解析機能に指示することができます。
[excess_transit_factor] パラメーターに重要度を割り当てることにより、これら 3 つの手法のいずれかを選択します。 重要度にかかわりなく、[MaxTransitTime] 値が超過すると必ずエラーが返されます。 | Record Set |
excess_transit_factor (オプション) | 訪問先ペアの超過移動時間を減らすことの重要度を評価します。超過移動時間とは、訪問先ペア間を直接移動するのに必要な時間に対する超過時間です。超過時間は、運転手が休憩したり、中間の訪問先や拠点に移動したりすることで発生する場合があります。選択できる 3 つの値を以下に示します。
| String |
point_barriers (オプション) | 一時的な規制として機能する 1 つ以上のポイント、または対象の道路を通行するために必要とされる追加の時間や距離を表す 1 つ以上のポイントを指定します。たとえば、ポイント バリアを使用して、道路沿いの倒木や、踏切で生じる遅延時間を表すことができます。 このツールでは、バリアとして追加できるポイントの数は 250 に制限されています。 ポイント バリアを指定する場合は、属性を使用して、各ポイント バリアのプロパティ (ポイント バリアの名前やバリアの種類など) を設定できます。ポイント バリアには、次の属性を指定できます。 Name: バリアの名前。 BarrierType: ポイント バリアの通過を完全に禁止するか、通過時に時間または距離を追加するかを指定します。この属性の値は、次のいずれかの整数として指定されます (括弧で囲まれた名前ではなく、数値コードを使用します)。
Additional_Time: バリアを通過するときに追加される移動時間の値を指定します。このフィールドは、追加コスト バリアにのみ適用され、計測単位が時間ベースである場合に限られます。このフィールドには 0 以上の値を指定する必要があります。単位は [計測単位] パラメーターで指定した単位と同じです。 Additional_Distance: バリアを通過するときに追加される距離の値を指定します。このフィールドは、追加コスト バリアにのみ適用され、計測単位が距離ベースである場合に限られます。このフィールドには 0 以上の値を指定する必要があります。単位は [計測単位] パラメーターで指定した単位と同じです。 | Feature Set |
line_barriers (オプション) | 道路と交差しているラインの場所を移動できないようにする 1 つ以上のラインを指定します。たとえば、複数の道路区間にわたって通行禁止となるパレードやデモを表すときに通過不可ライン バリアを使用します。また、ライン バリアを使用すれば、道路網の特定の区間を迂回して利用できる経路をすばやく見つけることができます。 このツールでは、[ライン バリア] パラメーターを使用して規制できる道路の数に制限があります。ライン バリアとして指定できるラインの数に制限はありませんが、すべてのラインと交差する道路の総数が 500 を超えることはできません。 ライン バリアを指定する場合は、次の属性を使用して、各ライン バリアの名前プロパティを設定できます。 Name: バリアの名前。 | Feature Set |
polygon_barriers (オプション) | 通過を完全に禁止するポリゴン、またはそのポリゴンと交差する道路を移動するときに時間または距離が係数に基づいて乗算されるポリゴンを指定します。 このサービスでは、[ポリゴン バリア] パラメーターを使用して規制できる道路の数に制限があります。ポリゴン バリアとして指定できるポリゴンの数に制限はありませんが、すべてのポリゴンと交差する道路の総数が 2,000 を超えることはできません。 ポリゴン バリアを指定する場合は、属性を使用して、各ポリゴン バリアのプロパティ (ポリゴン バリアの名前やバリアの種類など) を設定できます。ポリゴン バリアには、次の属性を指定できます。 Name: バリアの名前。 BarrierType: バリアの通過を完全に禁止するか、バリアを通過する際の時間または距離を係数に基づいて計算するかを指定します。このフィールド値は、次のいずれかの整数として指定されます (括弧で囲まれた名前ではなく、数値コードを使用します)。
ScaledTimeFactor: これは、バリアが交差している道路の移動時間に乗算する係数です。このフィールドは、コスト係数指定バリアにのみ適用され、計測単位が時間ベースである場合に限られます。このフィールドには 0 より大きい値を指定する必要があります。 ScaledDistanceFactor: これは、バリアが交差している道路の距離に乗算する係数です。この属性は、コスト係数指定バリアにのみ適用され、計測単位が距離ベースである場合に限られます。この属性には 0 より大きい値を指定する必要があります。 | Feature Set |
use_hierarchy_in_analysis (オプション) | 最適なルートを検索する際に、階層を使用するかどうかを指定します。
このパラメーターが階層を使用しないように設定されている場合でも、訪問先間、拠点間、または訪問先と拠点間の直線距離が 50 マイルを超えている場合は、自動的に階層を使用する設定に戻ります。 このパラメーターに指定した値は、[移動モード] を [カスタム] (デフォルト値) に設定しなければ無視されます。 | Boolean |
restrictions (オプション) | 最適なルートを検索する際に、従う必要がある規制を指定します。 このパラメーターに指定した値は、[移動モード] を [カスタム] (デフォルト値) に設定しなければ無視されます。 規制は、運転上の優先事項や要件を表します。ほとんどの場合は、規制により道路は通行禁止になります。たとえば、[Avoid Toll Roads] の規制を使用すると、ルートに有料道路が含まれるのは、インシデントまたは施設を訪問するために有料道路の使用が不可欠な場合のみになります。[Height Restriction] は、車両の高さより低い車高規制の場所を迂回できるようにします。車両に腐食性物質を積載している場合は、[Any Hazmat Prohibited] の規制を使用して、腐食性物質の運搬が法律で禁止されている道路の通行を回避します。 以下に、利用可能な規制のリストと簡単な説明を示します。 ツールは、次の規制をサポートしています。
| String |
attribute_parameter_values (オプション) | いくつかの規制に必要な追加の値を指定します。たとえば、[重量規制] に対する車両の重量などです。この属性パラメーターを使用して、規制を使用する道路上の移動が、規制によって禁止されるか、回避されるか、優先されるかを指定することもできます。規制が道路を回避または優先するためのものである場合は、このパラメーターを使用して道路が回避または優先される度合いも指定できます。たとえば、有料道路を決して使用しないこと、できるだけ避けること、または可能な限り優先することを選択できます。 このパラメーターに指定した値は、[移動モード] を [カスタム] (デフォルト値) に設定しなければ無視されます。 フィーチャクラスから [属性パラメーター値] パラメーターを指定する場合は、フィーチャクラスのフィールド名が、次に説明するフィールドと一致する必要があります。 AttributeName: 規制の名前のリスト。 ParameterName: 規制に関連付けられたパラメーターの名前のリスト。規制は、その使用目的に基づいて、1 つまたは複数の ParameterName フィールド値を持つことができます。 ParameterValue: 規制を評価するときにツールによって使用される ParameterName の値。 [属性パラメーター値] は、[規制] パラメーターに依存します。[ParameterValue] フィールドは、規制の名前が [規制] パラメーターの値として指定されている場合に限り適用できます。 [属性パラメーター値] では、[AttributeName] で指定した各規制の [ParameterName] フィールドに [規制の使用] という値があります。この値は、規制に関連付けられた道路での移動を禁止、回避、または優先するかどうか、および道路を回避または優先する場合のレベルを指定します。[ParameterName] フィールドの [規制の使用] の値には、次のいずれかの文字列、またはそれぞれの括弧に示した数値を割り当てることができます。
ほとんどの場合、車両の特徴 (車両の高さなど) に依存する規制であれば、[規制の使用] にデフォルト値 (PROHIBITED) を使用できます。ただし、[規制の使用] の値がルートの優先度に依存している場合もあります。たとえば、[Avoid Toll Roads] の規制では、[規制の使用] パラメーターのデフォルト値は [AVOID_MEDIUM] になります。つまり、この規制を使用すると、可能な場合は有料道路を回避するルートが検索されます。また、[AVOID_MEDIUM] は、最適なルートを検索する際に有料道路を回避することの重要度も表しています (中程度の優先度)。[AVOID_LOW] を選択すると、有料道路を回避する重要度が下がります。AVOID_HIGH を選択すると重要度が上がり、有料道路を回避するためにより長い距離のルートも生成可能になります。[PROHIBITED] を選択すると有料道路の通行は完全に禁止され、ルートでは有料道路のいずれの部分も通行できなくなります。有料道路を回避または禁止する (つまり、料金の支払いを避ける) ことが目的となる場合もありますが、運転手によっては、通行料を払うよりも渋滞を避けることに価値があると考えて、有料道路の使用を優先する場合もあります。後者の場合は、[規制の使用] として [PREFER_LOW]、[PREFER_MEDIUM]、または [PREFER_HIGH] を選択できます。優先度が高いほど、規制に関連付けられている道路を通行するために遠回りするようになります。 | Record Set |
populate_route_lines (オプション) |
[Route Shape] パラメーターが [True Shape] に設定されている場合は、[Route Line Simplification Tolerance] パラメーターに適切な値を指定して、ルート形状の単純化をさらに詳細に制御できます。 [Route Shape] パラメーターで選択した値にかかわらず、最適なルートは常に道路に沿った移動が最小になるように決定され、直線距離が使用されることはありません。つまり、ルート形状が異なるだけで、ルート検索時に対象となる道路は同じであることを意味します。 | Boolean |
route_line_simplification_tolerance (オプション) | ルートおよびルート案内の出力ラインのジオメトリをどの程度単純化するかを指定します。 このパラメーターに指定した値は、[移動モード] を [カスタム] (デフォルト値) に設定しなければ無視されます。 [populate_route_lines] パラメーターがオフ (False) に設定されている場合、このパラメーターは無視されます。 単純化によって、ルートの基本的な形状を定義する重要ポイント (交差点でのターンなど) は維持され、その他のポイントは削除されます。ここで指定する単純化の距離は、単純化されたラインの元のラインからの逸脱として認められる、最大許容オフセットです。ラインの単純化では、ルート ジオメトリを構成する頂点の数が削減されます。これにより、ツールの実行時間が短縮されます。 | Linear Unit |
populate_directions (オプション) | 各ルートに対してルート案内を生成するかどうかを指定します。
| Boolean |
directions_language (オプション) | ルート案内を生成する際に使用する言語を指定します。 このパラメーターは、[populate_directions] パラメーターがオンまたは [True] に設定されている場合にのみ使用されます。 パラメーター値は、次の 2 文字または 5 文字の言語コードのいずれかを使用して指定できます。
サポートされていない言語コードを指定すると、デフォルトの言語である英語を使用するルート案内が返されます。 | String |
directions_style_name (オプション) | ルート案内の書式スタイルの名前を指定します。このパラメーターは、[ルート案内の設定] パラメーターがオンであるか、True に設定されている場合にのみ使用されます。パラメーターには、次のいずれかの値を指定できます。
| String |
travel_mode (オプション) | 解析でモデル化する交通モードを選択します。移動モードは ArcGIS Online で管理されます。組織の管理者は、移動モードを構成することで、組織のワークフローをより適切に反映することができます。組織がサポートする移動モードの名前を指定する必要があります。 サポートされている移動モード名のリストを取得するには、このツールへのアクセスに使用した GIS サーバー接続で、[ユーティリティ] ツールボックスから [移動モードの取得] を実行します。[移動モードの取得] ツールは、アプリケーションに [サポートされている移動モード] テーブルを追加します。[サポートされている移動モード] テーブルの [移動モード名] フィールドの任意の値を、入力として指定できます。[移動モード設定] フィールドの値を入力として指定することもできます。これにより、ツールが移動モード名に基づいて設定を検索する必要がなくなるため、ツールの実行が高速化されます。 デフォルト値 [カスタム] を使用すると、カスタム移動モード パラメーター ([ジャンクションでの U ターン]、[階層の使用]、[規制]、[属性パラメーター値]、および [インピーダンス]) を使用して、独自の移動モードを構成できます。カスタム移動モード パラメーターのデフォルト値は、自動車による移動をモデル化します。歩くのが速い歩行者や、指定された高さ、重量、および特定危険物を積載したトラックなどをモデル化する場合に、[カスタム] を選択して、上記のカスタム移動モード パラメーターを設定します。これを行うことで、さまざまな設定を試して、必要な解析結果を得ることができます。解析設定を決定したら、組織の管理者と連携して、その設定を新規または既存の移動モードの一部として保存する必要があります。これにより、組織のすべてのユーザーが同じ設定で解析を再実行できます。 | String |
impedance (オプション) | インピーダンスを設定します。インピーダンスは、道路セグメントや交通ネットワークのその他の部分を移動する労力やコストを表す値です。 移動時間がインピーダンスになります。空いている道路を 1 マイル移動するのに 1 分かかる自動車がインピーダンスの一例です。移動時間は、移動モードによって異なります。歩行者は同じマイル数を歩くのに 20 分以上かかる場合があるため、モデル化している移動モードに対して適切なインピーダンスを選択することが重要になります。 次のインピーダンス値から選択します。
このパラメーターに指定した値は、[移動モード] を [カスタム] (デフォルト値) に設定しなければ無視されます。 | String |
time_zone_usage_for_time_fields (オプション) | ツールによってサポートされている入力日時フィールドのタイム ゾーンを指定します。このパラメーターは、次のフィールドのタイム ゾーンを指定します。訪問先に関する [TimeWindowStart1]、[TimeWindowEnd1]、[TimeWindowStart2]、[TimeWindowEnd2]、[InboundArriveTime]、[OutboundDepartTime]。拠点に関する [TimeWindowStart1]、[TimeWindowEnd1]、[TimeWindowStart2]、[TimeWindowEnd2]。ルートに関する [EarliestStartTime]、[LatestStartTime]。休憩に関する [TimeWindowStart]、[TimeWindowEnd]。
UTC 形式での日時の値の指定は、訪問先や拠点があるタイム ゾーンが不明な場合や、訪問先と拠点が複数のタイムゾーンに分散しているときに、すべての日時の値を同時に開始する必要がある場合に役立ちます。[UTC] オプションは、ネットワーク データセットでタイム ゾーン属性が定義されている場合のみ適用されます。定義されていない場合、すべての日時の値は常に GEO_LOCAL と見なされます。 | string |
save_output_layer (オプション) | ツールで解析設定をネットワーク解析レイヤー ファイルとして保存するかどうかを指定します。このファイルは、ArcMap などの ArcGIS Desktop アプリケーションで開いた場合でも、直接操作することはできません。これは、ツールから返される結果の品質を診断するために、Esri テクニカル サポートに送信されることを想定しています。
| Boolean |
overrides (オプション) | ネットワーク解析問題の解決法を見つける場合に、解析の動作に影響を与えることができる追加設定を指定します。 JSON (JavaScript Object Notation) で、このパラメーターの値を指定する必要があります。たとえば、有効な値は {"overrideSetting1" : "value1", "overrideSetting2" : "value2"} という形式です。オーバーライド設定名は、必ず二重引用符で囲みます。値には、数値、ブール型、または文字列を使用できます。 このパラメーターのデフォルト値は、値なしであり、解析の設定を上書きしません。 オーバーライドは、設定を適用する前後で得られた結果を慎重に分析した後にのみ使用する必要のある高度な設定です。解析ごとにサポートされているオーバーライド設定の一覧およびそれらの許容される値については、Esri テクニカル サポートにお問い合わせください。 | String |
save_route_data (オプション) | ルート レイヤーを ArcGIS Online または Portal for ArcGIS で共有するのに使用できる形式で、解析の入力と出力を保持するファイル ジオデータベースを含む ZIP ファイルを出力に含めるかどうかを選択します。
| Boolean |
コードのサンプル
SolveVehicleRoutingProblem (配車ルート (VRP) の解析) の例
次の Python スクリプトは、SolveVehicleRoutingProblem (配車ルート (VRP) の解析) ツールをスクリプトで使用する方法を示しています。
'''
The script shows how to use the SolveVehicleRoutingProblem tool in a script. It demonstrates how to obtain the schema for
the inputs, populate the inputs, excute the tool and save the results.
'''
import time
import sys
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. The alias will be the service name
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 seconds 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.AddMessage("An error occured when running the tool")
arcpy.AddMessage(result.getMessages(2))
sys.exit(2)
elif result_severity == 1:
arcpy.AddMessage("Warnings were returned when running the tool")
arcpy.AddMessage(result.getMessages(1))
#Get the output routes and orders and save to a local geodatabase
result.getOutput(0).save(unassigned_orders)
result.getOutput(1).save(assigned_orders)
result.getOutput(2).save(output_routes)
環境
このツールは、ジオプロセシング環境を使用しません。