配車ルート(VRP)の解析(Solve Vehicle Routing Problem) (Network Analyst)
サマリ
配車ルート(VRP)ネットワーク解析レイヤを作成し、解析のプロパティを設定し、解析を実行します。配車ルート(VRP)Web サービスの設定に最適です。配車ルート解析の解析レイヤを使用すると、複数車両について最適ルートを検索できます。
[配車ルート(VRP)解析レイヤの作成(Make Vehicle Routing Problem Layer)] ツールと [配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] ツールは類似していますが、それぞれ異なる目的で設計されています。ジオプロセシング サービスをセットアップする場合、[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] ツールを使用すると、セットアップ プロセスが簡単になります。それ以外の場合は、[配車ルート(VRP)解析レイヤの作成(Make Vehicle Routing Problem Layer)] ツールを使用します。
[配車ルート(VRP)の解析(Solve Vehicle Routing Problem)] を使用して配車ルート(VRP)ジオプロセシング サービスを作成する場合、1 つのツールをセットアップしてサービスとして公開するだけで済みます。これに対して、[配車ルート(VRP)解析レイヤの作成(Make Vehicle Routing Problem Layer)] を使用してサービスを作成するには、モデルを作成し、それをさまざまな他のツールに正しく接続して公開する必要があります。
VRP ジオプロセシング サービスの例を設定するためのチュートリアル データについては、「Network Analyst ジオプロセシング サービスの例の概要」をご参照ください。
使用法
ツール ダイアログ ボックスの各種オプション パラメータは、管理しやすいよう次の 6 つのカテゴリに分類されています。
- 高度な解析
- バリア
- ネットワーク データセット
- ネットワーク ロケーション
- 出力
- サービスの機能
構文
パラメータ | 説明 | データ タイプ |
orders |
配車ルート解析で示される訪問先の順序。訪問先は、配達(家具の配達など)、引き取り(空港シャトルバスによる乗客のピックアップなど)、または何らかの種類のサービスや検査(庭木の剪定や建造物の検査など)を表すことができます。 訪問先フィーチャ セットには、属性テーブルが関連付けられています。次にそれぞれの属性テーブルのフィールドについて説明します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: 訪問先の名前。名前は一意でなければなりません。名前を NULL のまま残すと、解析の実行時に名前が自動的に生成されます。 ServiceTime: このプロパティは、ルートがネットワーク ロケーションを訪れたときの滞在時間を指定します。つまり、ネットワーク ロケーションのインピーダンス値を格納します。0 または NULL 値は、ネットワーク ロケーションでサービス時間が必要ないことを表します。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 TimeWindowStart1: ネットワーク ロケーションの第 1 のタイム ウィンドウの開始時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、開始時刻は設定されません。 注意:
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 分遅れて到着することが許されます。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 解析によってタイム ウィンドウ違反を追跡し、重み付けすることが可能です。このため、次の 3 つの手法のいずれかを使用するように VRP 解析機能に指示することができます。
[タイム ウィンドウ違反の重要度] パラメータ(Python の場合は [time_window_factor])に重要度を割り当てることで、この 3 つの手法の中から実質的に 1 つを選択できます。ただし、どんな場合も、[MaxViolationTime1] の値セットを超えるとエラーが返されます。 MaxViolationTime2: 訪問先の第 2 のタイム ウィンドウの最大許容超過時間。このフィールドは、[MaxViolationTime1] フィールドと同様です。 DeliveryQuantities: 配達される荷物のサイズ。重量、体積、数量など、任意の計測方法でサイズを指定できます。重量と体積など、複数の計測方法でサイズを指定することもできます。 配送数量は、単位を指定せずに入力します。たとえば、ある訪問先に 300 ポンドの物品を配達する必要がある場合は、「300」と入力します。この値の単位がポンドであることを覚えておく必要があります 複数の寸法を管理する場合は、数値を半角スペースで区切ります。たとえば、配達について重量と体積を記録する場合、重量が 2,000 ポンド、体積が 100 立法フィートであれば、「2000 100」と入力します。ここでも、単位を覚えておく必要があります。この場合はポンドと立法フィートです。また、入力した値と対応する単位の順序も覚えておく必要があります。 ルートの [Capacities] と訪問先の [DeliveryQuantities] および [PickupQuantities] は、同じ方法で指定する必要があります。つまり、値は同じ単位で指定する必要があり、複数の計測方法を使用する場合は、すべてのパラメータで計測方法が同じ順序になるように指定する必要があります。そのため、[DeliveryQuantities] に、重量(ポンド)と体積(立方フィート)を順に指定した場合は、ルートの容量と訪問先の引き取り数量も同じ方法で(ポンド単位の重量、立方フィート単位の体積の順に)指定する必要があります。単位が混在したり順序が異なると正しい結果が得られません。この場合、警告メッセージは表示されません。 空の文字列または NULL 値は、すべての計測方法でサイズがゼロであることと同じです。積載制限(または計測方法でのサイズ)の総数に対して文字列内の値の数が不足している場合、残りの値はゼロとみなされます。配送数量を負の値とすることはできません。 PickupQuantities: 引き取る荷物のサイズ。重量、体積、数量など、任意の計測方法でサイズを指定できます。重量と体積など、複数の計測方法でサイズを指定することもできます。ただし、負の値は指定できません。このフィールドは、[訪問先] の [DeliveryQuantities] フィールドと同様です。 注意: 交換訪問の場合、訪問先は配送数量と引き取り数量の両方を持つことができます。 Revenue: 訪問先が解析に含まれる場合に生成される収入。このフィールドは NULL 値(収入がゼロであることを示す)を含むことができますが、負の値を含むことはできません。 収入は、目的関数の値を最適化する際に算入されますが、ソリューションの運用コストには組み込まれません。つまり、ルート クラスの [TotalCost] フィールドの出力に収入が取り込まれることはありません。ただし、収入によって、訪問先へのサービス提供の重要度が相対的に重み付けされます。 SpecialtyNames: スペース区切りの文字列であり、訪問先が必要とする特別指定の名前が含まれます。NULL 値は、訪問先が特別指定を必要としていないことを示しています。 [訪問先] クラスと [ルート] クラスにリストされた特別指定は、綴りが完全に一致していない限り、配車ルート解析でリンクできません。 特別指定の説明とその機能を示す例として、芝の手入れと庭木の剪定を行う造園会社を考えます。この会社の一部の訪問先では、背の高い木を剪定するために高所作業車が必要です。これらの訪問先の [SpecialtyNames] フィールドに「BucketTruck」と入力して、特別指定があることを示します。他の訪問先の [SpecialtyNames] は NULL のままにします。同様に、油圧ブームを装備したトラックで移動するルートの [SpecialtyNames] フィールドにも「BucketTruck」と入力します。他のルートのフィールドは NULL のままにします。VRP 解析を実行すると、特別指定のない訪問先は任意のルートに割り当てられますが、高所作業車が必要な訪問先は、特別指定が設定されたルートにだけ割り当てられます。 AssignmentRule: 訪問先をルートに割り当てるためのルールを指定します。このフィールドは、以下に示す値のドメインによって制約されます(それぞれのコード値は括弧内に示されています)。
このフィールドは、NULL 値を含むことができません。 CurbApproach: [CurbApproach] プロパティは、車両がネットワーク ロケーションに到着する方向およびネットワーク ロケーションから出発する方向を指定します。このプロパティには 4 つの値を設定できます(それぞれのコード値は括弧内に示されています)。
RouteName: 訪問先が割り当てられるルートの名前。 このフィールドを入力フィールドとして使用し、訪問先を特定のルートにあらかじめ割り当てておきます。このフィールドは NULL 値を含むことができます。NULL 値の場合、訪問先はどのルートにもあらかじめ割り当てられず、解析機能が訪問先にとって最良のルート割り当てを決定します。このフィールドを NULL に設定した場合は、[Sequence] フィールドも NULL に設定する必要があります。 解析の後、訪問先のルートが解析されると、[RouteName] フィールドには訪問先が割り当てられるルートの名前が入ります。 Sequence: このフィールドは、訪問先に割り当てられたルートでの訪問先の順序を示します。 入力フィールドとしてこのフィールドを使用して、ルート上での訪問先の相対的な順序を指定します。このフィールドは NULL 値を含むことができます。NULL 値は、訪問先をルート上のどこにでも配置できることを示します。NULL 値にする場合は、[RouteName] の値も NULL 値でなければなりません。 順序を示す入力値は、正の値であり、各ルートに対して一意です(リニューアル拠点立ち寄り状況、訪問先、および休憩の間で共有される)。ただし、1 から開始する必要も連続している必要もありません。 解析の後、[Sequence] フィールドには、割り当てられたルート上での訪問先の順序の値が入ります。ルートに対して出力される順序の値は、拠点立ち寄り状況、訪問先、および休憩の間で共有され、1(開始拠点)から始まり、連続的な値となります。ルートは常に拠点から始まるので、ルート解析対象の訪問先に対して出力される最小限の順序の値は 2 となります。 | Feature Set |
depots |
拠点とは、車両が就業日の初めに出発し、就業日の終わりに戻ってくる場所です。ルートの開始時には、拠点で車両に荷物が積み込まれる(配達の場合)か、荷物が降ろされます(引き取りの場合)。拠点は、場合によっては、リニューアル ロケーションとしての役割を果たすこともできます。これにより、車両は荷を降ろしたり再度積み込んだりして、配達と引き取りを引き続き行うことができます。拠点には、ハード タイム ウィンドウで指定された開始時刻と終了時刻があります。このタイム ウィンドウ外の時間に車両が拠点に到着することは許されません。 拠点フィーチャ セットには、属性テーブルが関連付けられています。次にそれぞれの属性テーブルのフィールドについて説明します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: 拠点の名前。[ルート] レコード セットの [StartDepotName] フィールドと [EndDepotName] フィールドは、ここで指定した名前を参照します。[ルート リニューアル] レコード セットを使用する場合は、このレコード セットもこれを参照します。 拠点の名前は大文字と小文字を区別しません。また、空白以外の一意の値にする必要があります。 TimeWindowStart1: ネットワーク ロケーションの第 1 のタイム ウィンドウの開始時刻。このフィールドは NULL 値を含むことができます。NULL 値を指定した場合、開始時刻は設定されません。 注意:
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] プロパティは、車両がネットワーク ロケーションに到着する方向およびネットワーク ロケーションから出発する方向を指定します。このプロパティには 4 つの値を設定できます(それぞれのコード値は括弧内に示されています)。
Bearing: ポイントが移動している方向。単位は度で、北を基準に時計回りに測定されます。このフィールドは [BearingTol] フィールドと組み合わせて使用されます。 通常、方位データは、GPS 受信機を備えたモバイル デバイスから自動的に送信されます。歩行者や車両などの移動している訪問先を読み込んでいる場合は、方位データを含めてみてください。 このフィールドを使用すると、たとえば、車両が交差点や高架の近くにいる場合に、ロケーションが間違ったエッジに追加されるのを避けることができます。方位は、Network Analyst がポイントを道路のどちら側に配置するかを決定する際にも役立ちます。 詳細については、Bearing と BearingTol をご参照ください。 BearingTol: 方位許容値は、[Bearing] フィールドを使用して移動ポイントをエッジに配置するときに、許容される方位の範囲を作成します。[Bearing] フィールドの値が、エッジの方位許容値から生成される許容範囲内にある場合は、ポイントをその場所にネットワーク ロケーションとして配置できます。許容範囲から外れている場合は、次に近いエッジの最も近いポイントが評価されます。 単位は度で、デフォルト値は 30 です。値は、0 よりも大きく、180 よりも小さい必要があります。 値が 30 の場合、Network Analyst がネットワーク ロケーションをエッジに追加しようとすると、方位値の許容範囲がエッジの両側(左と右)に 15 度ずつ、どちらもエッジのデジタイズされた方向に生成されます。 詳細については、Bearing と BearingTol をご参照ください。 NavLatency: このフィールドは、[Bearing] と [BearingTol] にも値が入力されている場合の解析の実行においてのみ使用されます。[Bearing] と [BearingTol] に値が入っていても、必要に応じて [NavLatency] に値を入力できます。[NavLatency] は、移動中の車両が GPS 情報をサーバに送信した時点から、車両のナビゲーション デバイスが処理されたルートを受け取るまでの推定所要時間を示します。[NavLatency] の時間単位は、[時間属性] パラメータで指定されるコスト属性の単位と同じです。 | Feature Set |
routes |
特定の配車ルート解析で使用できるルート。ルートは、車両と運転手の特性を指定します。また、解析後には、拠点と訪問先の間のパスを表します。 ルートには、開始および終了拠点のサービス時間、固定されたまたは幅のある開始時刻、時間ベースの運用コスト、距離ベースの運用コスト、複数の積載制限、運転手の労働時間についての各種制約を指定できます。 [ルート] レコード セットにはいくつかの属性があります。次にそれぞれの属性テーブルのフィールドについて説明します。 Name: ルートの名前。名前は一意でなければなりません。 フィールドが NULL 値の場合は、解析時に Network Analyst によって一意の名前が生成されます。このため、ほとんどの場合、値の入力は必須ではありません。ただし、あらかじめルートに割り当てられた休憩、ルート リニューアル、ルート ゾーン、または訪問先が含まれている解析では、ルート名が外部キーとして使用されているため、名前を入力する必要があります。ルート名では、大文字と小文字が区別されません。 StartDepotName: ルートの開始拠点の名前。このフィールドは、拠点の [Name] フィールドに対する外部キーです。 [StartDepotName] の値が NULL の場合、ルートは指定されている最初の訪問先から始まります。開始拠点を省略するのは、車両の出発点が不明か、解析に関係ない場合に有効です。ただし、[StartDepotName] が NULL の場合は、[EndDepotName] を NULL にすることはできません。 ルートが配達を行っていて、[StartDepotName] が NULL の場合、荷物はルートの開始前に仮想拠点で車両に積み込まれるものと想定されます。リニューアル拠点を持たないルートの場合、その配達訪問先([訪問先] クラスの [DeliveryQuantities] がゼロ以外の値)の荷物は、開始拠点または仮想拠点で積み込まれます。リニューアル拠点を持つルートの場合、最初のリニューアル拠点の手前にある配達訪問先の荷物のみが開始拠点または仮想拠点で積み込まれます。 EndDepotName: ルートの終了拠点の名前。このフィールドは、拠点クラスの [Name] フィールドに対する外部キーです。 StartDepotServiceTime: 開始拠点でのサービス時間。このフィールドを使用して、車両に荷物を積み込むのに要する時間をモデリングします。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がゼロであることを示します。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 注意: 開始拠点と終了拠点でのサービス時間は固定値で([StartDepotServiceTime] および [EndDepotServiceTime] フィールドの値で指定)、ルートの実際の積み込み時間は考慮されません。たとえば、開始拠点で車両への積み込みにかかる時間は、訪問先のサイズによって異なります。したがって、拠点のサービス時間に満載の積荷または平均的な積荷に応じた値を指定するか、独自に見積もりを行います。 EndDepotServiceTime: 終了拠点でのサービス時間。このフィールドを使用して、車両から荷物を降ろすのに要する時間をモデリングします。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がゼロであることを示します。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 注意: 開始拠点と終了拠点でのサービス時間は固定値で([StartDepotServiceTime] および [EndDepotServiceTime] フィールドの値で指定)、ルートの実際の積み込み時間は考慮されません。たとえば、開始拠点で車両への積み込みにかかる時間は、訪問先のサイズによって異なります。したがって、拠点のサービス時間に満載の積荷または平均的な積荷に応じた値を指定するか、独自に見積もりを行います。 EarliestStartTime: ルートにおいて許容される最も早い開始時刻。解析では、このフィールドを開始拠点のタイム ウィンドウと組み合わせて使用し、ルートの実現可能な開始時刻を決定します。 このフィールドは NULL 値にできません。デフォルト値は午前 8:00 で、時刻のみを示す値となります。このデフォルト値は [デフォルトの日付] パラメータ(Python の場合は [default_date])で指定された日の午前 8:00 と解釈されます。 複数のタイム ゾーンにまたがる交通量データを持つネットワーク データセットを使用する場合、[EarliestStartTime] のタイムゾーンは開始拠点が配置されているエッジまたはジャンクションのタイム ゾーンと同じになります。 LatestStartTime: ルートにおいて許容される最も遅い開始時間。このフィールドは NULL 値にできません。デフォルト値は午前 10:00 で、時刻のみを示す値となります。このデフォルト値は解析レイヤの [デフォルトの日付] プロパティで指定された日の午前 10:00 と解釈されます。 複数のタイム ゾーンにまたがる交通量データを持つネットワーク データセットを使用する場合、[LatestStartTime] のタイムゾーンは開始拠点が配置されているエッジまたはジャンクションのタイム ゾーンと同じになります。 ArriveDepartDelay: このフィールドには、車両を通常の移動速度まで加速し、停止するまで減速し、ネットワークに出入りする(たとえば、駐車場に出入りする)のに必要な移動時間が格納されます。[ArriveDepartDelay] 値を含めることにより、VRP 解析で、物理的に一致する訪問先にサービスを提供するために多くのルートを送り出すことがなくなります。 このプロパティのコストは、一致しない訪問先、拠点、およびルート リニューアルへの訪問の間に発生します。たとえば、ルートが拠点から出発し、最初の訪問先を訪問したときに、到着と出発の遅延の合計が移動時間に追加されます。最初の訪問先から 2 番目の訪問先まで移動するときにも同じことが起こります。2 番目と 3 番目の訪問先が一致している場合、車両は移動する必要がないため、この間については [ArriveDepartDelay] 値は追加されません。ルートがルート リニューアルに移動する場合、この値が再び移動時間に追加されます。 休憩の場合、車両は減速して停止し、後で加速する必要がありますが、VRP 解析では [ArriveDepartDelay] 値を加算できません。これは、ルートが訪問先を離れ、休憩のために停止し、さらに次の訪問先に向かった場合に、到着と出発の遅延は 2 度ではなく、1 度しか追加されないことを意味します。 たとえば、1 つの高層ビル内に 5 つの一致する訪問先があり、それらが 3 つの異なるルートでサービスを提供されているとします。この場合は、到着と出発の遅延が 3 回発生します。つまり、3 人の運転手がそれぞれ駐車場所を見つけ、同じ建物に入ることが必要になります。しかし、これらの訪問先に 1 つのルートだけでサービスを提供できれば、駐車して建物に入る運転手は 1 人だけになり、到着と出発の遅延の発生も 1 回だけになります。VRP 解析ではコストの最小化が図られるため、到着と出発の遅延を抑えるために、単一ルートのオプションが選択されます(特別指定、タイム ウィンドウ、積載制限などの制約によって、複数のルートが必要になる場合があります)。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 Capacities: 車両の最大積載量。積載量は、重量、体積、数量など、任意の計測方法で指定できます。重量と体積など、複数の計測方法でサイズを指定することもできます。 積載量は、単位を指定せずに入力します。たとえば、車両の最大積載量が 40,000 ポンドである場合は、「40000」と入力します。今後参照できるよう、この値の単位がポンドであることを覚えておいてください。 複数の寸法を管理する場合は、数値を半角スペースで区切ります。たとえば、重量と体積の両方を記録する場合、車両の最大積載重量が 40,000 ポンド、最大積載体積が 2,000 立法フィートであれば、[Capacities] に「40000 2000」と入力します。この場合も、単位を覚えておく必要があります。また、入力した値と対応する単位の順序も覚えておく必要があります。この場合は、ポンド、立方フィートの順です。 単位と単位の順序を覚えておくことが重要である理由は 2 つあります。1 つめは、後で情報を解釈できるようにするためです。2 つめは、訪問先について [DeliveryQuantities] フィールドと [PickupQuantities] フィールドに値を正しく入力できるようにするためです。2 つめの理由についてもう少し詳しく説明すると、配車ルート(VRP)解析では、ルートのオーバーロードを防ぐために、[Capacities]、[DeliveryQuantities]、および [PickupQuantities] が同時に参照されます。フィールドに単位を入力できないようになっているため、Network Analyst が単位を変換することはできません。このため、値を正しく解釈できるようにするには、ユーザがこれらの 3 つのフィールドに値を同じ単位を使って同じ順序で入力する必要があります。これら 3 つのフィールドのいずれかに単位の混在や異なった順序があると、正しい結果が得られません。この場合、警告メッセージは表示されません。事前に標準の単位と単位の順序を設定しておくこと、また、これら 3 つのフィールドの値を入力する度に単位と単位の順序を参照することをお勧めします。 空の文字列または NULL 値は、すべての数量がゼロであることを示します。積載制限を負の値とすることはできません。 訪問先の [DeliveryQuantities] フィールドまたは [PickupQuantities] フィールドに対して [Capacities] 文字列内の値の個数が不足している場合、明示されていない残りの値はゼロと見なされます。 注意: VRP 解析では、簡単なブール テストを実行するだけで、積載制限を超過したかを確認できます。ルートの積載制限値が運送する合計数量以上である場合、車両に積荷が収まるとみなされます。ただし、積荷および車両の実際の形状によっては、この判断は正しくない可能性があります。たとえば、VRP 解析では、1,000 立方フィートの球体を、幅が 8 フィートで容積が 1,000 立方フィートのトラックに収容することができます。しかし、実際には、球体の直径は 12.6 フィートであり、8 フィート幅のトラックに球体を収容することはできません。 FixedCost: ルートがソリューションで使用される(つまり、訪問先がソリューションに割り当てられている)場合に限り適用される金銭上の固定コスト。このフィールドは NULL 値を含むことができます。NULL 値は固定コストがゼロであることを示します。このコストは、ルートの合計運用コストの一部です。 CostPerUnitTime: 合計ルート所要時間(移動時間に加えて、訪問先、拠点、休憩でのサービス時間および待機時間も含む)に対して作業の単位時間ごとに適用される金銭上のコスト。このフィールドは NULL 値を含むことができず、デフォルト値は 1.0 となります。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 CostPerUnitDistance: ルート長(合計移動距離)に対して(移動距離の単位ごとに)適用される金銭上のコスト。このフィールドは NULL 値を含むことができます。NULL 値はコストがゼロであることを示します。 このフィールドの値の単位は、[距離フィールドの単位] パラメータ(Python の場合は distance_units)で指定します。 OvertimeStartTime: 規定労働時間の長さで、この時間を超過すると規定外労働時間の計算が開始されます。このフィールドは NULL 値を含むことができます。NULL 値は規定外労働時間が適用されないことを示します。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 たとえば、合計ルート所要時間が 8 時間を上回る場合に、運転手に規定外労働賃金を支払う必要がある場合には、[時間フィールドの単位] パラメータが分に設定されていれば、[OvertimeStartTime] に「480」(8 時間× 60 分)と指定します。 CostPerUnitOvertime: 規定外労働時間の単位時間ごとに適用される金銭上のコスト。このフィールドは NULL 値を含むことができます。NULL 値は [CostPerUnitOvertime] の値が [CostPerUnitTime] の値と同じであることを示します。 MaxOrderCount: ルートに組み込むことができる訪問先の最大数。このフィールドは NULL 値を含むことができません。デフォルト値は 30 となります。 MaxTotalTime: ルートの最大許容所要時間。ルートの所要時間には、移動時間に加えて、訪問先、拠点、休憩でのサービス時間および待ち時間も含まれます。このフィールドは NULL 値を含むことができます。NULL 値はルートの所要時間に制約がないことを示します。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 MaxTotalTravelTime: ルートの最大許容移動時間。移動時間に含まれるのはネットワークの走行に費やされた時間だけで、サービス時間または待ち時間は含まれません。 このフィールドは NULL 値を含むことができます。NULL 値は最大許容移動時間に制約がないことを示します。このフィールドは [MaxTotalTime] フィールドより小さくする必要があります。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 MaxTotalDistance: ルートへの最大許容移動距離。 このフィールドの値の単位は、[距離フィールドの単位] パラメータ(Python の場合は distance_units)で指定します。 このフィールドは NULL 値を含むことができます。NULL 値は最大許容移動時間に制約がないことを示します。 SpecialtyNames: スペース区切りの文字列であり、ルートがサポートする特別指定の名前が含められます。NULL 値は、ルートが特別指定をサポートしていないことを示します。 このフィールドは、その他のクラスの [SpecialtyNames] フィールドに対する外部キーです。 特別指定の説明とその機能を示す例として、芝の手入れと庭木の剪定を行う造園会社を考えます。この会社の一部の訪問先では、背の高い木を剪定するために高所作業車が必要です。これらの訪問先の [SpecialtyNames] フィールドに「BucketTruck」と入力して、特別指定があることを示します。他の訪問先の [SpecialtyNames] は NULL のままにします。同様に、油圧ブームを装備したトラックで移動するルートの [SpecialtyNames] フィールドにも「BucketTruck」と入力します。他のルートのフィールドは NULL のままにします。VRP 解析を実行すると、特別指定のない訪問先は任意のルートに割り当てられますが、高所作業車が必要な訪問先は、特別指定が設定されたルートにだけ割り当てられます。 AssignmentRule: 問題の解決時にルートを使用できるかを指定します。このフィールドは、値のドメインによって制約されます。設定可能な値は次のとおりです。
| Record Set |
breaks | 特定の配車ルート解析のルートについての休憩時間や休憩。休憩は、厳密に 1 つのルートに関連付けられ、訪問先にサービスを提供した後、訪問先へのルート途中、または訪問先にサービスを提供する前に取ることができます。休憩には開始時間と継続時間があり、運転手に賃金が支払われる場合もあればそうでない場合もあります。休憩の開始は、タイム ウィンドウ、最大移動時間、または最大労働時間のいずれかで設定できます。 休憩レコード セットには、それに関連する属性があります。次にそれぞれの属性テーブルのフィールドについて説明します。
ObjectID: システムで管理される ID フィールド。 RouteName: 休憩が適用されるルートの名前。休憩は 1 つのルートだけに割り当てられますが、多くの休憩を同じルートに割り当てることができます。 このフィールドは、[ルート] クラスの [Name] フィールドに対する外部キーであり、NULL 値を持つことができません。 Precedence: 優先順位値は、特定のルートの休憩を順序付けします。優先順位値が 1 の休憩は、2 の休憩よりも前に取られ、以降の休憩も優先順位値の順番に取られます。 タイム ウィンドウか、最大移動時間か、最大労働時間かにかかわりなく、すべての休暇が優先順位値を持たなければなりません。 ServiceTime: 休憩時間の長さ。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がないことを示します。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 TimeWindowStart: 休憩のタイム ウィンドウの開始時間。 このフィールドが NULL で、[TimeWindowEnd] が有効な時刻値を持つ場合、休憩は [TimeWindowEnd] 値より前ならいつでも開始できます。 このフィールドが値を持つ場合、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] は NULL でなければなりません。さらに、解析レイヤの他のすべての休憩についても、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] は NULL でなければなりません。 ルートにタイム ウィンドウが重なった複数の休憩があると、解析時にエラーになります。 休憩のタイム ウィンドウ フィールドは、時刻のみを示す値を含むことも、日時を示す値を含むこともできます。[TimeWindowStart] などの時間フィールドが時刻のみを示す値(たとえば、午後 12:00)である場合、日付は、[デフォルトの日付] パラメータ(Python の場合は [default_date])に指定された日付と見なされます。日時を示す値(たとえば、2012 年 11 月 7 日、午後 12:00)を使用すると、複数日にわたってタイム ウィンドウを指定することができます。これは、午前 0 時前後のどこかで休憩を取る必要がある場合に特に有用です。 複数のタイム ゾーンにまたがる交通量データを持つネットワーク データセットを使用する場合、[TimeWindowStart] および [TimeWindowEnd] のタイムゾーンは開始拠点が配置されているエッジまたはジャンクションのタイム ゾーンと同じとみなされます。 TimeWindowEnd: 休憩のタイム ウィンドウの終了時間。 このフィールドが NULL で、[TimeWindowStart] が有効な時刻値を持つ場合、休憩は [TimeWindowStart] 値より後ならいつでも開始できます。 このフィールドが値を持つ場合、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] は NULL でなければなりません。さらに、解析レイヤの他のすべての休憩についても、[MaxTravelTimeBetweenBreaks] と [MaxCumulWorkTime] は NULL でなければなりません。 MaxViolationTime: このフィールドでは、タイム ウィンドウによる休憩について最大許容超過時間を指定します。到着時刻がこの時間の範囲を超えている場合、タイム ウィンドウが超過されたとみなされます。 値がゼロの場合、タイム ウィンドウのどのような超過も許されません。つまり、タイム ウィンドウは条件が厳しい(ハード)ということです。ゼロ以外の値は最大遅延時間の指定を意味します。たとえば、タイム ウィンドウの終了時刻から最大で 30 分遅れて休憩を開始することができますが、この遅延時間には、[タイム ウィンドウ違反の重要度] パラメータ(Python の場合は [time_window_factor])に従ってペナルティが適用されます。 このプロパティは NULL 値にすることができます。[TimeWindowStart] と [TimeWindowEnd] が NULL 値の場合、最大許容超過時間に制限がないことを示します。[MaxTravelTimeBetweenBreaks] または [MaxCumulWorkTime] に値が設定されている場合、[MaxViolationTime] は NULL でなければなりません。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 MaxTravelTimeBetweenBreaks: 休憩を取る前に累積できる移動時間の最大値。移動時間は前の休憩の終了時か、休憩がまだ取られていないときはルートの開始時から累積されます。 これがルートの最後の休憩なら、[MaxTravelTimeBetweenBreaks] は最後の休憩から終了拠点までに累積可能な最大移動時間を示すことにもなります。 このフィールドの目的は、休憩が必要になるまでに運転できる時間を制限することです。たとえば、解析の [時間フィールドの単位] パラメータ(Python の場合は [time_units])が分に設定され、[MaxTravelTimeBetweenBreaks] の値が 120 になっている場合、運転手は 2 時間運転した後に休憩を取ります。さらに 2 時間運転した後に 2 回目の休憩を割り当てるには、2 回目の休憩の [MaxTravelTimeBetweenBreaks] プロパティを 120 にします。 このフィールドに値を設定した場合、解析を正常に実行するには、[TimeWindowStart]、[TimeWindowEnd]、[MaxViolationTime]、および [MaxCumulWorkTime] が NULL でなければなりません。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 MaxCumulWorkTime: 休憩を取る前に累積できる作業時間の最大値。作業時間は常にルートの開始時から累積されます。 作業時間は、移動時間と、訪問先、拠点、休憩でのサービス時間の合計です。ただし、これには待ち時間は含まれません。待ち時間とは、ルート(または運転手)が訪問先または拠点でタイム ウィンドウの開始まで待機した時間のことです。 このフィールドの目的は、休憩が必要になるまでに作業できる時間を制限することです。たとえば、[時間フィールドの単位] プロパティ(Python の場合は [time_units])が分に設定され、[MaxCumulWorkTime] の値が 120、[ServiceTime] の値が 15 になっている場合、運転手は 2 時間作業した後に 15 分間の休憩を取ります。 引き続き最後の例で、さらに 3 時間作業した後に 2 回目の休憩が必要とします。この休憩を指定するには、2 回目の休憩の [MaxCumulWorkTime] 値に 315(5 時間と 15 分)を入力します。この数には、前の休憩の [MaxCumulWorkTime] と [ServiceTime] の値に加えて、2 回目の休憩が許可される前の 3 時間の追加作業時間が含まれます。最大作業時間の休憩を誤って取ることを避けるために、ルートの開始から作業時間を累積していること、および作業時間にはそれまでに訪問した拠点、訪問先、休憩でのサービス時間が含まれることを再確認してください。 このフィールドに値を設定した場合、解析を正常に実行するには、[TimeWindowStart]、[TimeWindowEnd]、[MaxViolationTime]、および [MaxTravelTimeBetweenBreaks] が NULL でなければなりません。 このフィールドの値の単位は、[時間フィールドの単位] パラメータ(Python の場合は time_units)で指定します。 IsPaid: 休憩に賃金を支払うかをブール値で指定します。[True] 値を指定すると、休憩で費やされた時間はルートのコスト計算および規定外労働時間の判定で考慮されます。[False] 値を指定すると、休憩で費やされた時間はルートのコスト計算および規定外労働時間の判定で考慮されません。デフォルト値は [True] です。 Sequence: 入力フィールドとして、ルート上での休憩の順序を示します。このフィールドは、NULL 値を含むことができます。順序を示す入力値は、正の値であり、各ルートに対して一意です(リニューアル拠点立ち寄り状況、訪問先、および休憩の間で共有される)。ただし、1 から開始する必要も連続している必要もありません。 解析では、順序フィールドが変更されます。解析実行後、このフィールドにはルート上での休憩の順序の値が含まれます。ルートに対して出力される順序の値は、拠点立ち寄り状況、訪問先、および休憩の間で共有され、1(開始拠点)から始まり、連続的な値となります。 | Record Set |
time_units |
その解析における時間ベースのすべてのフィールド値の時間単位。
配車ルート(VRP)解析の多くのフィーチャとレコードには、訪問先の [ServiceTime] やルートの [CostPerUnitTime] といった、時間値を保存するためのフィールドがあります。必要となるデータ入力を最小限に抑えるために、値には単位が含まれていません。代わりに、距離ベースのフィールド値はすべて同じ単位で入力する必要があり、このパラメータがそれらの値の単位を指定するものとして使用されます。 出力される時間ベースのフィールドでも、このパラメータで指定した単位が使用されます。 時間単位はネットワークの [時間属性] パラメータ([time_attribute])の時間単位に一致していなくてもかまいません。 | String |
distance_units |
その解析における距離ベースのすべてのフィールド値の距離単位。
配車ルート(VRP)解析の多くのフィーチャとレコードには、ルートの [MaxTotalDistance] や [CostPerUnitDistance] といった、距離値を保存するためのフィールドがあります。必要となるデータ入力を最小限に抑えるために、値には単位が含まれていません。代わりに、距離ベースのフィールド値はすべて同じ単位で入力する必要があり、このパラメータがそれらの値の単位を指定するものとして使用されます。 出力される距離ベースのフィールドでも、このパラメータで指定した単位が使用されます。 距離単位はネットワークの [距離属性] パラメータ([distance_attribute])の距離単位に一致していなくてもかまいません。 | String |
network_dataset |
配車ルート解析が実行されるネットワーク データセット。配車ルート(VRP)解析は時間を最短にするためのツールであるため、ネットワーク データセットが時間ベースのコスト属性になっている必要があります。 | Network Dataset Layer |
output_workspace_location |
出力フィーチャクラスの作成先になる ArcSDE ジオデータベース、ファイル ジオデータベース、またはインメモリ ワークスペース。このワークスペースはすでに存在している必要があります。デフォルトの出力ワークスペースはメモリ内にあります。 | Workspace |
output_unassigned_stops_name |
到達不能の拠点や割り当てられていない訪問先を含むことになる出力フィーチャクラスの名前。 | String |
output_stops_name |
ルートが訪れるストップが含まれることになるフィーチャクラスの名前。このフィーチャクラスには、拠点、訪問先、および休憩のストップが含まれます。 | String |
output_routes_name |
解析のルートが含まれることになるフィーチャクラスの名前。 | String |
output_directions_name |
ルート案内が含まれることになるフィーチャクラスの名前。 | String |
default_date (オプション) |
日付を含めずに時刻を指定する時間フィールド値に適用されるデフォルトの日。 | Date |
uturn_policy (オプション) |
ジャンクションでの U ターン ポリシーU ターンを許可するということは、解析においてジャンクションで方向転換し、同じ道路を引き返すことができるということを意味します。 ジャンクションが道路の交差と行き止まりを表すことを前提に、さまざまな車両が、一部のジャンクションでは方向転換でき、他のジャンクションでは方向転換できない、というように設定できます。これは、ジャンクションが交差と行き止まりのどちらを表すかによって変わります。これに対応するには、ジャンクションに接続するエッジの数(ジャンクションでのノードへの接続数)によって、暗黙的に U ターン ポリシーを指定します。以下では、このパラメータで選択できる値と、ジャンクションので接続におけるそれぞれの意味について示します。
ヒント: U ターン ポリシーをさらに正確に定義する必要がある場合、グローバル ターン遅延エバリュエータをネットワーク コスト属性に追加するか、すでに存在する場合はそれを調整することを検討してください。その際、逆ターンの設定には特に注意が必要です。また、ネットワーク ロケーションの CurbApproach プロパティの設定についても調べてください。 | String |
time_window_factor (オプション) |
タイム ウィンドウの条件を満たす重要度を評価します。次に 3 つのオプションのそれぞれについて説明します。
| String |
spatially_cluster_routes (オプション) |
| Boolean |
route_zones (オプション) |
特定のルートについて、担当区域を描出します。ルート ゾーンはポリゴン フィーチャです。ルートゾーンは、指定した領域内またはその近くにある訪問先にのみサービスを提供するようにルートを制限する場合に使用します。どんなときにルート ゾーンが役に立つかを以下の例で示します。
ルート ゾーン フィーチャ セットには、属性テーブルが関連付けられています。次にそれぞれの属性テーブルのフィールドについて説明します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 RouteName: このゾーンが適用されるルートの名前。ルート ゾーンは、関連付けられたルートを最大で 1 つ持っています。このフィールドは、NULL 値を含むことができません。ルート フィーチャ レイヤの [Name] フィールドに対する外部キーとなります。 IsHardZone: ハード ルート ゾーンかソフト ルート ゾーンかをブール値で示します。[True] 値はルート ゾーンがハード ルート ゾーンであることを示します。つまり、ルート ゾーン ポリゴンの外にある訪問先をルートに割り当てることはできません。デフォルト値は [True](1)です。[False] 値(0)を指定した場合、ルート ゾーン ポリゴンの外にある訪問先をルートに割り当てることはできますが、訪問先へのサービス提供のコストはルート ゾーンからのユークリッド距離に基づく関数によって重み付けされます。基本的に、ソフト ゾーンから訪問先までの直線距離が長くなるに従い、訪問先をルートに割り当てる機会が低くなることを意味しています。 | Feature Set |
route_renewals (オプション) |
配達または引き取りの対象となる荷物の再積み込みや荷降ろしのためにルートが訪れることのできる中間の拠点を指定します。具体的には、ルート リニューアルとは、ルートを拠点にリンクさせることです。このリレーションシップは、関連付けられた拠点でルートがリニューアル(ルート途中の再積み込みまたは荷降ろし)できることを示します。 ルート リニューアルを使用してモデリング可能なシナリオとして、「開始拠点で配達する荷物を車両に満載し、訪問先に供給し、拠点に戻って配達用の荷物を再び積み込み、訪問先への供給を継続する」というものがあります。たとえば、プロパンガスの配達の場合は、車両はタンクがほとんどまたは完全に空になるまで複数回配達を行い、燃料補給ポイントに立ち寄り、さらに配達を継続することができます。 ルート シード ポイントの操作も行う場合に考慮すべきいくつかのルールとオプションを次に示します。
ルート リニューアル レコード セットには、それに関連する属性があります。次にそれぞれの属性テーブルのフィールドについて説明します。 ObjectID: システムで管理される ID フィールド。 DepotName: このリニューアルが行われる拠点の名前。このフィールドは、NULL 値を含むことができません。拠点フィーチャ レイヤの [Name] フィールドに対する外部キーとなります。 RouteName: このリニューアルが適用されるルートの名前。このフィールドは、NULL 値を含むことができません。ルート フィーチャ レイヤの [Name] フィールドに対する外部キーとなります。 ServiceTime: リニューアルのサービス時間。このフィールドは NULL 値を含むことができます。NULL 値はサービス時間がゼロであることを示します。 このフィールドの値の単位は、解析レイヤの [時間フィールドの単位] プロパティで指定します。 注意: リニューアル拠点で車両に荷積みするのにかかる時間は、車両のサイズと、車両にどれくらい荷物が積まれているかに左右される場合があります。ただし、ルート リニューアルのサービス時間は固定値であり、実際の積荷を考慮に入れません。したがって、リニューアル サービス時間には、満載の積荷の場合のサービス時間、平均的な積荷の場合の時間、または別の時間評価による値を指定してください。 | Record Set |
order_pairs (オプション) |
サービスが同じルートで提供されるよう、配達と引き取りの訪問先をペアにします。 訪問先に対する引き取りと配達をペアにすることが必要な場合があります。たとえば、宅配業者が、ある訪問先で優先度の高い荷物を引き取り、配達時間を最短にするために拠点や仕分けステーションに戻らずに、その荷物を別の訪問先に配達するためのルートを必要とすることがあります。訪問先ペアを使用すると、関連するこれらの訪問先を同一ルートに適切な順序で割り当てることができます。また、たとえば、病院から試験所まで血液サンプルを 2 時間以内に輸送しなければならない場合など、荷物を車両に載せておくことのできる時間を指定することもできます。 訪問先ペア レコード セットには、それに関連する属性があります。次にそれぞれの属性テーブルのフィールドについて説明します。 ObjectID: システムで管理される ID フィールド。 FirstOrderName: ペアの第 1 の訪問先の名前。このフィールドは、訪問先フィーチャ レイヤの [Name] フィールドに対する外部キーです。 SecondOrderName: ペアの第 2 の訪問先の名前。このフィールドは、訪問先フィーチャ レイヤの [Name] フィールドに対する外部キーです。 ペアの第 1 の訪問先は引き取り訪問先でなければなりません。つまり、その [DeliveryQuantities] フィールドの値は NULL です。ペアの第 2 の訪問先は配達訪問先でなければなりません。つまり、その [PickupQuantities] フィールドの値は NULL です。第 1 の訪問先で引き取られる数量は、第 2 の訪問先に配達される数量と対応する必要があります。特殊な場合として、積荷制限が使用されていないシナリオについては、両方の訪問先の数量がゼロになることがあります。 注意: 訪問先の数量は拠点で荷積みまたは荷降ろしされません。 MaxTransitTime: ペアの最大移動時間です。移動時間とは、第 1 の訪問先の出発時刻から第 2 の訪問先の到着時刻までの時間の長さです。この制約により、2 つの訪問先の間で車両に積まれている時間(乗車時間)が制限されます。人または生鮮食料品を車両で輸送する場合、その乗車時間は、荷物または非生鮮食料品を車両で輸送する場合より短くなるのが普通です。このフィールドは NULL 値を含むことができます。NULL 値は乗車時間に制約がないことを示します。 このフィールドの値の単位は、解析レイヤの [時間フィールドの単位] プロパティで指定します。 解析では、超過移動時間(訪問先ペア間の直接移動時間に基づく)を追跡し、重み付けすることができます。このため、次の 3 つの手法のいずれかを使用するように VRP 解析機能に指示することができます。(1)保有車両の移動コストの増大を無視して、全体の超過移動時間を最小にする、(2)全体の超過時間と移動コストのバランスをとるソリューションを検索する、(3)全体の超過移動時間を無視して、保有車両の移動コストを最小にする。[超過移動時間の重要度] パラメータ(Python の場合は [excess_transit_factor])に重要度を割り当てることで、実質的にこの 3 つの手法の中から 1 つを選択できます。重要度にかかわりなく、[MaxTransitTime] 値が超過すると必ずエラーが返されます。 | Record Set |
excess_transit_factor (オプション) |
訪問先ペアの超過移動時間を短縮する重要度を評価します。超過移動時間とは、訪問先ペア間を直接移動するのに必要な時間に対する超過時間です。超過時間は、運転手の休憩または中間の訪問先や拠点への移動により生じることがあります。 重要度は、以下の 3 つの値から選択できます。
| String |
point_barriers (オプション) |
ポイント バリアを指定します。ポイント バリアは、通行不可と追加コストの 2 種類に分かれています。これらは、一時的にネットワーク上のポイントの通行を規制したり、ポイントにインピーダンスを追加したりします。ポイント バリアはフィーチャ セットで定義されます。ポイント フィーチャに指定した属性値によって、ポイント バリアが通行不可バリアなのか、追加コスト バリアなのかが決まります。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 BarrierType: バリアの通過を完全に規制するのか、バリアを通過する際のコストを追加するのかを指定します。次の 2 つのオプションがあります。
Additional_Time: [BarrierType] が追加コストに設定された場合、[Additional_Time] フィールドの値は、バリアを通過する際にルートに追加される時間を示します。 このフィールドの値の単位は、解析レイヤの [時間フィールドの単位] プロパティで指定します。 Additional_Distance: [BarrierType] が追加コストに設定された場合、[Additional_Distance] フィールドの値は、バリアを通過する際にルートに追加されるインピーダンスの値を示します。 このフィールドの値の単位は、[距離フィールドの単位] パラメータで指定します。 | Feature Set |
line_barriers (オプション) |
一時的にラインの横断を規制するライン バリアを指定します。ライン バリアは、フィーチャ セットで定義されます。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 | Feature Set |
polygon_barriers (オプション) | ポリゴン バリアを指定します。ポリゴン バリアは、通行不可とコスト係数指定の 2 種類に分かれています。これらは、ポリゴン バリアに含まれるネットワークの一部に対して、一時的に通行を規制したり、インピーダンスを増減したりします。ポリゴン バリアはフィーチャ セットで定義されます。ポリゴン フィーチャに指定した属性値によって、ポリゴン バリアが通行不可バリアなのか、コスト係数指 バリアなのかが決まります。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 BarrierType: バリアの通過を完全に禁止するか、バリアを通過する際のコストを係数に基づいて計算するかを指定します。次の 2 つのオプションがあります。
Scaled_Time: このフィールドに設定した値は、バリアの基本となるエッジの、時間ベースのインピーダンス値に乗算されます。このフィールドは、バリアがコスト係数指定バリアである場合にのみ関連します。 Scaled_Distance: このフィールドに設定した値は、バリアの基本となるエッジの、距離ベースのインピーダンス値に乗算されます。このフィールドは、バリアがコスト係数指定バリアである場合にのみ関連します。 | Feature Set |
time_attribute (オプション) |
ネットワーク エレメントの移動時間を決定するときに使用するネットワーク コスト属性を定義します。 | String |
distance_attribute (オプション) |
ネットワーク エレメントの距離を決定するときに使用するネットワーク コスト属性を定義します。 | String |
use_hierarchy_in_analysis (オプション) |
解析を実行するネットワーク データセットに使用する階層属性が定義されていない場合、パラメータは使用されません。この場合、「#」をパラメータ値として使用します。 | Boolean |
restrictions (オプション) |
解析時にどのネットワーク規制属性を考慮するかを指定します。 | String |
attribute_parameter_values (オプション) |
パラメータを持つネットワーク属性のパラメータ値を指定します。レコード セットには、パラメータを一意に特定するために一緒に使用される 2 つの列と、パラメータ値を指定する別の列が含まれています。 属性パラメータ値 レコード セットには、属性が関連付けられています。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 AttributeName: テーブル行で設定される属性パラメータを持つネットワーク属性の名前。 ParameterName: テーブル行で設定される値を持つ属性パラメータの名前。(オブジェクト タイプ パラメータは、このツールを使用して更新できません。) ParameterValue: 属性パラメータに設定する値。値が指定されない場合、属性パラメータは NULL に設定されます。 | Record Set |
maximum_snap_tolerance (オプション) |
最大スナップ許容値とは、Network Analyst がネットワーク上でポイントの配置や再配置を行う場合に検索できる最大距離のことです。検索によって適切なエッジまたはジャンクションを見つけ、そのうちで最も近い場所にポイントをスナップします。最大スナップ許容値内で適切な場所が見つからなかった場合、そのオブジェクトには未配置のマークが付けられます。 | Linear unit |
exclude_restricted_portions_of_the_network (オプション) |
| Boolean |
feature_locator_where_clause [[dataset_name, SQL_Query],...] (オプション) |
訪問先と拠点を配置できるネットワーク エレメントを制限するソース フィーチャ サブセットの選択に使用する SQL 式。たとえば、通行が規制されている幹線道路に訪問先と拠点を配置しないようにする場合は、それらのソース フィーチャを除外するよう SQL 式を記述します。(バリアなどのその他のネットワーク解析オブジェクトは、読み込み時に、フィーチャのロケータ WHERE 句を無視します。) SQL 構文の詳細とデータ ソースによる違いについては、「ArcGIS で使用されるクエリ式への SQL リファレンス」をご参照ください。 | Value Table |
populate_route_lines (オプション) |
| Boolean |
route_line_simplification_tolerance (オプション) |
ルート ジオメトリをどの程度単純化するかを指定します。 単純化では、ルートの基本形状を定義する、交差点での右左折といったルート上の重要ポイントが保持され、それ以外のポイントが削除されます。ここで指定する単純化の距離は、単純化されたラインの元のラインからの逸脱として認められる、最大許容オフセットです。ラインを単純化すると、頂点の数が少なくなり、描画時間が短縮される傾向にあります。 | Linear unit |
populate_directions (オプション) |
| Boolean |
directions_language (オプション) |
ルート案内を生成する言語を選択します。ドロップダウン リストで選択できる言語は、コンピュータにインストールされている ArcGIS 言語パックによって変わります。 このツールをサービスの一部として別のサーバ上で公開する予定の場合、ツールが正しく機能するためには、選択する言語に対応する ArcGIS 言語パックがそのサーバ上にインストールされている必要があります。言語パックがコンピュータにインストールされていない言語はドロップダウン リストに表示されませんが、代わりに言語コードを入力することができます。 | String |
directions_style_name (オプション) |
ルート案内の書式スタイルの名前。 | String |
save_output_layer (オプション) |
どちらの場合も、スタンドアロンのテーブルとフィーチャクラスが返されます。ただし、サーバ管理者は、ツールのセットアップと結果を ArcGIS for Desktop 環境の Network Analyst コントロールでデバッグするために、ネットワーク解析レイヤの出力も選択することがあります。これにより、デバッグ処理が非常に容易になります。 ArcGIS for Desktop では、ネットワーク解析レイヤのデフォルトの出力場所が、作業用ジオデータベースと同じレベルのテンポラリ ワークスペースになっています。つまり、ネットワーク解析レイヤは作業用ジオデータベースと同じレベルに保存されます。出力されたネットワーク解析レイヤは、「_ags_gpna」に英数字の GUID を付け加えた名前の LYR ファイルとして保存されます。 | Boolean |
service_capabilities [[String, {Long}],...] (オプション) |
このプロパティは、このツールをジオプロセシング サービスとして実行するときの最大コンピュータ処理量を管理するうえで役立ちます。これを管理する理由は 2 つあります。1 つめの理由は、許容している以上のリソースや処理時間を必要とする解析をサーバで行わないようにできるためです。2 つめは、さまざまな配車ルート(VRP)機能で複数のサービスを作成して、ビジネス モデルをサポートできるためです。たとえば、階層化されたサービスをもつビジネス モデルで、解析あたり最大 5 つのルートに対応した無料の配車ルート(VRP)サービスと、解析あたり 5 つを超えるルートに対応した有料のサービスを提供する場合などです。 ルートの最大数を制限するとともに、解析に追加できる訪問先やポイント バリアの数も制限できます。解析のサイズを管理するもう 1 つの方法に、ラインやポリゴン バリアが交差できるフィーチャの最大数を設定するというやり方があります。通常、この設定は道路フィーチャ対して行います。また、特定の直線距離を超えて地理的に離れている訪問先の場合には、ユーザが階層を使用しないことを選択していても階層解析を適用させることもできます。
| Value Table |
コードのサンプル
必須パラメータのみを使用してツールを実行します。
import arcpy
orders = arcpy.FeatureSet()
orders.load("Stores")
depots = arcpy.FeatureSet()
depots.load("DistributionCenter")
routes = arcpy.RecordSet()
routes.load("RoutesTable")
arcpy.na.SolveVehicleRoutingProblem(orders, depots, routes, "","Minutes",
"Miles", "Streets_ND")
次のスタンドアロン Python スクリプトは、SolveVehicleRoutingProblem(配車ルートの解析)ツールを使用して複数の車両で一式の訪問先にサービスを提供する方法を示しています。SolveVehicleRoutingProblem(配車ルートの解析)ツールを使用する場合は、1 つのツールを呼び出すだけで解析全体を実行できます。これに対して、MakeVehicleRoutingProblemLayer(配車ルート解析レイヤの作成)ツールの場合は、Network Analyst ツール用ツールボックスのいくつかのツールに対して実行する必要があります。
# Name: SolveVehicleRoutingProblem_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
import datetime
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"
impedanceAttribute = "TravelTime"
timeUnits = "Minutes"
distanceUnits = "Miles"
inOrders = "Analysis/Stores"
inDepots = "Analysis/DistributionCenter"
inRoutes = "RoutesTable"
outGeodatabase = "C:\data\output\VRPOutputs.gdb"
#Create two new feature sets and one record set with same schema as
#Orders, Deopts and Routes parameter in Solve Vehicle Routing Problem tool.
#Load the feature from the existing feature classes and table in the feature
#set. Note that Solve Vehicle Routing Problem tool does not provide a way to
#map field names between your input feature classes and table and the
#feature set or record set parameters. To ensure that the attributes are
#correctly transfered, the input feature classes and table must have same
#field names as the feature sets and record sets.
orders = arcpy.GetParameterValue("SolveVehicleRoutingProblem_na",0)
orders.load(inOrders)
depots = arcpy.GetParameterValue("SolveVehicleRoutingProblem_na",1)
depots.load(inDepots)
routes = arcpy.GetParameterValue("SolveVehicleRoutingProblem_na",2)
routes.load(inRoutes)
#Call the SolveVRP tool and store the results in the result object
result = arcpy.na.SolveVehicleRoutingProblem(orders,depots, routes,"",
timeUnits, distanceUnits,
inNetworkDataset, outGeodatabase,
populate_directions="DIRECTIONS")
#print the solve status and output any warning messages from tool execution
solveSucceeded = result.getOutput(0)
print "Solve Succeeded: {0}".format(solveSucceeded)
print "Messages from solver are printed below."
print result.getMessages(1)
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)