[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] の出力

[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] ジオプロセシング ツールは、出力として以下のテーブルおよびフィーチャクラスを出力として生成します。ストップ、未割り当てストップ、ルート、ルート案内出力のテーブルとフィーチャクラスおよびそれらに対応するフィールド属性について、以下で説明します。

ルート フィーチャクラス

ルート ライン フィーチャクラスは、運転手、車両、および配車ルートでの車両のルート パスを表します。この出力フィーチャクラスのデフォルト名は Routes ですが、解析を実行する前に [出力ルート名] パラメータ(Python の場合は output_routes_name)を変更して、別の名前を指定できます。

ArcGIS は、基本となるネットワーク データセットがルート フィーチャクラスに使用するものと同じ座標系を割り当てます。これは、[出力データの座標系] ジオプロセシング環境の値を指定することで、制御できます。

ルート フィーチャクラスの各フィールド名とその説明を以下に示します。

フィールド名

説明

ObjectID

システムで管理される ID フィールド。

名前

ルートの名前。

シェープ

ルートの形状を示すジオメトリ フィールド。

[ルート ライン形状の生成] パラメータ(Python の場合は populate_route_lines)を使用して、このフィールドに値を取り込むかどうかを選択します。

ルート フィーチャクラスは、[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] の実行中に常に作成され、データが取り込まれます。ただし、[ルート ライン形状の生成] パラメータ(Python の場合は populate_route_lines)を使用して、ライン フィーチャの [Shape] フィールドの値の生成と保存を実行するかどうかを選択できます。[Shape] フィールドに値を取り込まないようにすると、解析処理が早くなり、サーバとクライアント間で交換されるデータ サイズが減少します。ただし、多くの場合は、マップ上にルートを表示するために、[Shape] フィールドに値を取り込むことが必要となります。

ViolatedConstraints

このフィールドは制約違反のサマリを含み、解析の実行後に設定されます。ルートを使用することで制約違反が発生する場合は、以下に示す 1 つまたは複数の違反の組み合わせがフィールドに割り当てられる可能性があります。

詳細詳細:

テキスト説明を表すコード値は、以下のリストの括弧内に示しています。これらのコード値は、公比が 2 の等比数列で表されます。これを利用して、さまざまな違反の組み合わせをコード化できます。たとえば、[Capacities が超過しました](2)と [ハード ルート ゾーン](128)の組み合わせは、2 + 128 で 130 となります。

  • MaxOrderCount が超過しました(1)- ルートを割り当てるとルートの [MaxOrderCount] フィールド値によって指定された、ルートに割り当て可能な訪問先の最大数を超過するので、あらかじめ割り当てられている訪問先をルートに割り当てることができなくなります。
  • Capacities が超過しました(2)- 訪問先を割り当てるとルートの [Capacities] フィールド値によって指定された合計ルート積載制限を超過するので、あらかじめ割り当てられている訪問先をルートに割り当てることができなくなります。
  • MaxTotalTime が超過しました(4)- 開始拠点から終了拠点までの移動時間と、両方の拠点でのサービス時間および待ち時間との合計がルートの [MaxTotalTime] フィールド値によって指定されたルートの合計時間を超過しています。
  • MaxTotalTravelTime が超過しました(8)- 開始拠点から終了拠点までの移動時間がルートの [MaxTotalTravelTime] フィールド値によって指定されたルートの合計移動時間を超過しています。
  • MaxTotalDistance が超過しました(16)- 開始拠点から終了拠点までの移動距離がルートの [MaxTotalDistance] フィールド値によって指定されたルートの合計移動距離を超過しています。
  • ハード タイム ウィンドウ(32)- ルートと関連付けられた開始拠点、終了拠点、または休憩にはハード タイム ウィンドウが存在します。
  • 特別指定の不一致(64)- 訪問先で必要とされる特別指定が対象ルートで見つかりません。
  • ハード ルート ゾーン(128)- あらかじめルートに割り当てられた訪問先がハード ルート ゾーンの範囲内にありません。
  • Order pair MaxTransitTime が超過しました(256)- ルートにあらかじめ割り当てられている訪問先ペアが存在します。このため訪問先を訪問先ペアで割り当てると、訪問先ペアの [MaxTransitTime] フィールド値によって指定された、訪問先ペアの最大移動時間を超過します。
  • 訪問先ペア違反(512)- 訪問先は訪問先ペアに属しており、あらかじめ割り当てられたルートに割り当てることができません。
  • 到達できません(1024)- あらかじめ割り当てられた訪問先は、このルートでは到達できないネットワーク エレメントに配置されています。
  • 必要な休憩を挿入できません(2048)- あらかじめ割り当てられた訪問先が存在する場合、ルートの休憩のシーケンス値は NULL になり、休憩を挿入すると、必ず他の違反が発生します。
  • 必要なリニューアルを挿入できません(4096)- ルートが容量を超え、ルート リニューアルを訪問する必要があります。ただし、あらかじめ割り当てられた訪問先が存在する場合、関連するルート リニューアルのシーケンス値は NULL になり、ルート リニューアルを挿入すると、必ず他の違反が発生します。
  • MaxTravelTimeBetweenBreaks が超過しました(8192)- 解析では、休憩の [MaxTravelTimeBetweenBreaks] フィールドに指定された時間内に休憩を挿入できませんでした。これは、最大移動時間内に到達できないようなシーケンスがあらかじめ休憩に割り当てられている場合によく発生します。

  • MaxCumulWorkTime の休憩が超過しました(16384)- 解析では、休憩の [MaxCumulWorkTime] フィールドに指定された時間内に休憩を挿入できませんでした。これは、最大労働時間内に到達できないようなシーケンスがあらかじめ休憩に割り当てられている場合によく発生します。

OrderCount

ルートに割り当てられる訪問先の数。

TotalCost

ルートの合計運用コストです。これは、次のフィールドの合計です。

  • FixedCost
  • RegularTimeCost
  • OvertimeCost
  • DistanceCost

RegularTimeCost

無給の休憩を除外した規定労働時間のコスト。

OvertimeCost

無給の休憩を除外した規定外労働のコスト。

DistanceCost

[TotalDistance] と [CostPerUnitDistance] フィールド値を掛け算して得られる距離のコスト要素。解析前に距離属性が指定されていない場合、このフィールドには 0 の値を設定します。

TotalTime

合計ルート所要時間。これには、移動時間に加えて、訪問先、拠点、休憩でのサービス時間および待ち時間も含まれます。[TotalTime] の値は次のフィールドの合計です。

  • StartDepotServiceTime
  • EndDepotServiceTime
  • TotalOrderServiceTime
  • TotalBreakServiceTime
  • TotalRenewalServiceTime
  • TotalWaitTime
  • TotalTravelTime

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

TotalOrderServiceTime

ルート上のすべての訪問先で費やされる合計サービス時間。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

TotalBreakServiceTime

ルート上のすべての休憩で費やされる合計サービス時間。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

TotalTravelTime

ルートの合計移動時間。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

TotalDistance

ルートの合計移動距離。

このフィールドの値の単位は、[距離フィールドの単位] パラメータ(Python の場合は distance_units)で指定します。

解析前に距離属性が指定されていない場合、このフィールドには 0 の値を設定します。

StartTime

ルートの開始時間。ルートは、開始拠点のタイム ウィンドウが始まる前に出発することがあります。この場合、開始拠点では待ち時間が発生します。

複数のタイム ゾーンにまたがる交通量データを使用するとき、この時間値のタイム ゾーンは開始拠点が配置されているネットワーク エレメントから取得されます。

EndTime

ルートの終了に到着する時間。ルートは、終了拠点でのサービス完了時に終了します。

複数のタイム ゾーンにまたがる交通量データを使用するとき、この時間値のタイム ゾーンは終了拠点が配置されているネットワーク エレメントから取得されます。

TotalWaitTime

ルート上のすべての訪問先、拠点、および休憩での合計待ち時間。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

TotalViolationTime

ルート上のすべての訪問先および休憩での合計超過時間。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

RenewalCount

リニューアルを持つルートの場合、これは、車両をリニューアル(つまり、車両の荷積みまたは荷降ろし)する目的による拠点でのストップ数に相当します。

TotalRenewalServiceTime

リニューアルを持つルートの場合、ルート上のすべてのリニューアル拠点で費やされたサービス時間の合計を示します。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

ルート案内フィーチャクラス

ルート案内は、運転手が各自に割り当てられたルートに従うことに役立つ、ターンごとの指示を表すライン フィーチャクラスです。この出力フィーチャクラスのデフォルト名は Directions ですが、解析を実行する前に [出力ルート案内名] パラメータ(Python の場合は output_directions_name)を変更して、別の名前を指定できます。また、[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] ツールは、常にルート案内フィーチャクラスを作成します。ただし、[ルート案内の生成] パラメータ(Python の場合は populate_directions)を使用して、解析中にフィーチャクラスにフィーチャを取り込むかどうかを選択できます。デフォルトでは、フィーチャは取り込まれません。ルート案内が必要でなければ、解析時間と、サーバからクライアントに転送されるデータ量を、大幅に減らすことができます。

ArcGIS は、基本となるネットワーク データセットがルート案内フィーチャクラスに使用するものと同じ座標系を割り当てます。これは、[出力データの座標系] ジオプロセシング環境の値を指定することで、制御できます。

ルート案内フィーチャクラスの各フィールド名とその説明を以下に示します。

フィールド名

説明

ObjectID

システムで管理される ID フィールド。

シェープ

ラインの形状を示すジオメトリ フィールド。

RouteName

運転動作が適用されるルートの名前。

ArriveTime

指定された運転動作を開始する時間。ルートが複数日にまたがる場合、日付と時刻が表示されます。

Type

このフィールドは、ルート案内のテキストをカスタマイズする上級ユーザ向けです。ほとんどのユーザは、このフィールドを無視し、代わりに [Text] フィールドを参照することで要件を満たすことができます。

[Type] は、2 つの列挙、すなわち esriDirectionsManueverType または esriDirectionsStringType のいずれかの定数を参照します。([Type] 値が参照する列挙について詳しくは、[SubItemType] フィールドの説明をご参照ください。)選択している SDK を検索することにより、列挙名の定数値のリストを参照できます。

SubItemType

このフィールドは、ルート案内のテキストをカスタマイズする上級ユーザ向けです。ほとんどのユーザは、このフィールドを無視し、代わりに [Text] フィールドを参照することで要件を満たすことができます。

[SubItemType] は、[Type] と組み合わせて機能し、それによって [Text] フィールドに表示されるルート案内が作成されます。[SubItemType] フィールドは、[Type] フィールドが esriDirectionsManueverType 列挙または esriDirectionsStringType 列挙のどちらの定数値を参照するかを指定します。

  • [SubItemType] 値が 1 の場合、[Type] 値は esriDirectionsManeuverType を参照します。
  • [SubItemType] 値が 2 の場合、[Type] 値は esriDirectionsStringType を参照します。

Text

テキストによるルート案内の説明です。

ElapsedTime

現在のルート案内が開始してから次のルート案内が開始するまで、または最後のルート案内が終了するまでの経過時間。

一部のルート案内には、サービス時間、超過時間などの追加レコードが含まれます。この場合、経過時間はレコードごとに複製されます。経過時間全体を合計する場合は、[Type] 値が 1 のレコードを選択し、それらのレコードを合計します。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

DriveDistance

現在のルート案内が発生した場所から次のルート案内が発生する場所まで、または最後のルート案内が終了する場所までの距離。

次のルート案内が開始する場所と同じ場所で発生するルート案内の場合、値は 0 です。

ストップ テーブル

ストップ テーブルは、拠点、訪問先、および休憩地点で止まるストップについての情報を提供します。この情報には、それらのストップに立ち寄るルート、到着時間と出発時間、およびストップの順序が含まれます。

この出力テーブルのデフォルト名は Stops ですが、解析を実行する前に [出力ストップ名] パラメータ(Python の場合は output_stops_name)を変更して、別の名前を指定できます。

ストップ テーブルの各フィールド名とその説明を以下に示します。

フィールド名

説明

ObjectID

システムで管理される ID フィールド。

名前

ストップの名前。これは、入力フィーチャ セットおよびレコード セットに含まれる、拠点、訪問先、または休憩地点の名前への外部キーです。入力フィーチャ セットまたはレコード セットは、[StopType] フィールドで指定されます。

PickupQuantities

ストップから引き取られる積荷の量または人数。複数の計測方法でストップに配達する場合は、各数量をスペースで区切ります。

このフィールドの単位は、保存されません。各単位は、入力ルートの [Quantities] フィールドおよび入力訪問先の [PickupQuantities] フィールドと [DeliveryQuantities] フィールドに入力した方法に従って解釈する必要があります。(これらのフィールドは、すべて同じ単位および計測方法の数を使用して入力されている必要があります。)

DeliveryQuantities

ストップに配達される積荷の量または人数。複数の計測方法でストップに配達する場合は、各数量をスペースで区切ります。

このフィールドの単位は、保存されません。各単位は、入力ルートの [Quantities] フィールドおよび入力訪問先の [PickupQuantities] フィールドと [DeliveryQuantities] フィールドに入力した方法に従って解釈する必要があります。(これらのフィールドは、すべて同じ単位および計測方法の数を使用して入力される必要があります。)

StopType

ストップが、拠点、配達先、休憩地点のいずれを表すかを示します。

このフィールドには、以下のように解釈できるコード値が保存されます。

  • 訪問先(0)
  • 拠点(1)
  • 休憩地点(2)

RouteName

ストップに立ち寄るルートの名前。

シーケンス

割り当てられたルートがストップに立ち寄る、相対的な順序。

[RouteName] フィールドと [Sequence] フィールドによって並べ替えて、ルートごとのストップの順序付けられたリストが作成されます。

FromPreviousTravelTime

ルートの前のストップから現在のストップまでに経過した移動時間。

このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。

FromPreviousDistance

前のストップから現在のストップまでのルート沿いの距離。

このフィールドの値の単位は、[距離フィールドの単位] パラメータ(Python の場合は distance_units)で指定します。

ArriveCurbApproach

車両がストップに到着するときに、アプローチを車両のどちら側にするかを示します。

DepartCurbApproach

車両がストップから出発するときに、アプローチを車両のどちら側にするかを示します。

ArriveTime

ルートがストップに到着する時間。

ネットワーク データセットにタイム ゾーンが構成されている場合、時間の値は、ストップが配置されているタイム ゾーンと一致します。構成されていない場合、タイム ゾーンは解析の実行に使用されるコンピュータ上に構成されたタイム ゾーンと一致します。

DepartTime

ルートがストップを出発する時間。

ネットワーク データセットにタイム ゾーンが構成されている場合、時間の値は、ストップが配置されているタイム ゾーンと一致します。構成されていない場合、タイム ゾーンは解析の実行に使用されるコンピュータ上に構成されたタイム ゾーンと一致します。

ArriveTimeUTC

ルートがストップに到着する時間。この値は、UTC(協定世界時)で指定します。

タイム ゾーンがネットワーク データセット上に構成されていない場合、このフィールドは NULL になります。

DepartTimeUTC

ルートがストップを出発する時間。この値は、UTC(協定世界時)で指定します。

タイム ゾーンがネットワーク データセット上に構成されていない場合、このフィールドは NULL になります。

WaitTime

ストップでの待ち時間または待ち合わせ時間。たとえば、ルートが訪問先でタイム ウィンドウが開くまで待機する必要がある場合は、待ち時間が発生します。

ViolationTime

ストップのタイム ウィンドウの終了からルート車両の到着までの経過時間。

ストップの視覚化

明らかにストップ テーブルは、フィーチャクラスではありません。つまり、単純にテーブルをマップに追加して、ストップが発生する場所を表示することはできません。ストップをマップ上に表示するには、代わりに別の手順が必要です。(これの実現方法について、以下で説明します。)ルートのストップをマップ上に表示する必要がある場合、この設計は不必要に難しく見えるかもしれませんが、このツールの目的が配車ルート(VRP)Web サービスの作成であることに、留意してください。つまり、サーバ処理とデータ転送を最小化するように、出力は可能な限り無駄を省くよう設計されています。とはいえ、情報が省かれ過ぎていることはなく、出力は、ストップをポイント フィーチャとして視覚化することに不可欠な情報を提供できます。

たとえば、ストップが発生する訪問先の場所を表示するには、ストップ テーブルを、入力として使用された元の訪問先フィーチャ セットにリンクします。ストップ テーブルの [StopType] フィールドと [Name] フィールド、および訪問先フィーチャ セットの [Name] フィールドを介して、これらのデータセットを選択し、結合できます。ストップが発生する拠点の場所を表示する場合も、同様の方法を使用することができます。

ヒントヒント:

[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] によって、訪問先フィーチャ セットや拠点フィーチャ セットなどの複数の入力フィーチャ セットが作成されます。ツールが解析を実行する際に、これらのインメモリ フィーチャ セットは ArcMap から削除されます。ただし、それらを再び追加できます。指定するには、次の手順に従ってください。

  1. [ジオプロセシング] メニューから [結果] ウィンドウを開きます。
  2. [結果] ウィンドウで、目的のフィーチャ セットを含む処理の結果に移動します。
  3. 該当する[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] の結果を展開します。
  4. [入力] を展開します。
  5. 表示するフィーチャ セットを右クリックし、[マップへ追加] を選択します。フィーチャ セットが、マップとコンテンツ ウィンドウに表示されます。
  6. 必要に応じて、[コンテンツ] ウィンドウの [ソース別にリスト] ボタンをクリックし、データが保存されている場所を表示します。

訪問先や拠点とは異なり、休憩地点は入力フィーチャ セットに関連付けられていません。そのため、これらを視覚化するには、別の方法を使用する必要があります。解析でルート案内を生成し、フィーチャを表すラインを選択し、[フィーチャの頂点 → ポイント(Feature Vertices To Points)] ツールを使用してそれらをポイントに変換できます。

未割り当てストップ テーブル

未割り当てストップ テーブルには、どのルートも立ち寄ることのできない訪問先がリストされます。必要な変更を行って問題を修正できるようにするために、ストップが立ち寄れない理由についても記述されます。

この出力テーブルのデフォルト名は Stops ですが、解析を実行する前に [出力未割り当てストップ名] パラメータ(output_unassigned_stops_name)を変更して、別の名前を指定できます。

ストップ テーブルの各フィールド名とその説明を以下に示します。

フィールド名

説明

ObjectID

システムで管理される ID フィールド。

StopType

ストップが、拠点、配達先、休憩地点のいずれを表すかを示します。このフィールドには、以下のように解釈できるコード値が保存されます。

  • 訪問先(0)
  • 拠点(1)
  • 休憩地点(2)

名前

ストップの名前。

これは、入力フィーチャ セットおよびレコード セットに含まれる、拠点、訪問先、または休憩地点の名前への外部キーです。入力フィーチャ セットまたはレコード セットは、[StopType] フィールドで指定されます。

ViolatedConstraints

このフィールドは制約違反のサマリを含み、解析の実行後に設定されます。制約違反が発生する場合は、以下に示す 1 つまたは複数の違反の組み合わせがフィールドに割り当てられる可能性があります。

詳細詳細:

テキスト説明を表すコード値は、以下のリストの括弧内に示しています。これらのコード値は、公比が 2 の等比数列で表されます。これを利用して、さまざまな違反の組み合わせをコード化できます。たとえば、[Capacities が超過しました](2)と [ハード ルート ゾーン](128)の組み合わせは、2 + 128 で 130 となります。

  • MaxOrderCount が超過しました(1)- ルートを割り当てるとルートの [MaxOrderCount] フィールド値によって指定された、ルートに割り当て可能な訪問先の最大数を超過するので、あらかじめ割り当てられている訪問先をルートに割り当てることができなくなります。
  • Capacities が超過しました(2)- 訪問先を割り当てるとルートの [Capacities] フィールド値によって指定された合計ルート積載制限を超過するので、あらかじめ割り当てられている訪問先をルートに割り当てることができなくなります。
  • MaxTotalTime が超過しました(4)- 開始拠点から終了拠点までの移動時間と、両方の拠点でのサービス時間および待ち時間との合計がルートの [MaxTotalTime] フィールド値によって指定されたルートの合計時間を超過しています。
  • MaxTotalTravelTime が超過しました(8)- 開始拠点から終了拠点までの移動時間がルートの [MaxTotalTravelTime] フィールド値によって指定されたルートの合計移動時間を超過しています。
  • MaxTotalDistance が超過しました(16)- 開始拠点から終了拠点までの移動距離がルートの [MaxTotalDistance] フィールド値によって指定されたルートの合計移動距離を超過しています。
  • ハード タイム ウィンドウ(32)- ルートと関連付けられた開始拠点、終了拠点、または休憩にはハード タイム ウィンドウが存在します。
  • 特別指定の不一致(64)- 訪問先で必要とされる特別指定が対象ルートで見つかりません。
  • ハード ルート ゾーン(128)- あらかじめルートに割り当てられた訪問先がハード ルート ゾーンの範囲内にありません。
  • Order pair MaxTransitTime が超過しました(256)- ルートにあらかじめ割り当てられている訪問先ペアが存在します。このため訪問先を訪問先ペアで割り当てると、訪問先ペアの [MaxTransitTime] フィールド値によって指定された、訪問先ペアの最大移動時間を超過します。
  • 訪問先ペア違反(512)- 訪問先は訪問先ペアに属しており、あらかじめ割り当てられたルートに割り当てることができません。
  • 到達できません(1024)- あらかじめ割り当てられた訪問先は、このルートでは到達できないネットワーク エレメントに配置されています。
  • 必要な休憩を挿入できません(2048)- あらかじめ割り当てられた訪問先が存在する場合、ルートの休憩のシーケンス値は NULL になり、休憩を挿入すると、必ず他の違反が発生します。
  • 必要なリニューアルを挿入できません(4096)- ルートが容量を超え、ルート リニューアルを訪問する必要があります。ただし、あらかじめ割り当てられた訪問先が存在する場合、関連するルート リニューアルのシーケンス値は NULL になり、ルート リニューアルを挿入すると、必ず他の違反が発生します。
  • MaxTravelTimeBetweenBreaks が超過しました(8192)- 解析では、休憩の MaxTravelTimeBetweenBreaks フィールドに指定された時間内に休憩を挿入できませんでした。これは、最大移動時間内に到達できないようなシーケンスがあらかじめ休憩に割り当てられている場合によく発生します。

  • MaxCumulWorkTime の休憩が超過しました(16384)- 解析では、休憩の MaxCumulWorkTime フィールドに指定された時間内に休憩を挿入できませんでした。これは、最大労働時間内に到達できないようなシーケンスがあらかじめ休憩に割り当てられている場合によく発生します。

ステータス

このフィールドは、以下に示す値のドメインによって制約されます(それぞれのコード値は括弧内に示されています)。

  • [OK](0)- ネットワーク ロケーションは正常に評価されました。
  • [エレメントを通過できません](3)- ネットワーク ロケーションが配置されているネットワーク エレメントは通過できません。この状態は、規制属性によってネットワーク エレメントが規制されている場合に発生する可能性があります。
  • [無効なフィールド値です](4)- ネットワーク ロケーションのフィールド値が、解析レイヤのコード値ドメインまたは範囲ドメインから外れています。たとえば、正の数値が必要な場合に負の数値が存在しています。
  • [到着しませんでした](5)- 解析ではネットワーク ロケーションに到達できません。

関連トピック

5/10/2014