演習 7: 複数の車両を使った訪問先セットへの配達
この演習では、配送会社の運営により、複数の車両で配送センターから食料品店 25 店舗へ商品を配送するための最適ルートを検索します。注文数は各店舗によって異なり、各トラックの最大積載量にも制限があります。この演習の主要な目的は、商品を配送する店舗の一部を配送トラックに割り当て、全体の輸送コストを最小限に抑えられるように配送順序を決定することです。
この問題は、配車ルート(VRP)を解析することで解決できます。配送順序が決定したら、ルートの案内図を電子ファイルで配布するか、または印刷して運転手に渡します。
解析の準備
- ArcMap で「Exercise07.mxd」をすでに開いている場合は、ステップ 6 に進んでください。
- [スタート] → [すべてのプログラム] → [ArcGIS] → [ArcMap 10] の順にクリックして、ArcMap を起動します。
-
[ArcMap - はじめに] ダイアログ ボックスで、[既存のマップを開く] → [詳細検索] の順にクリックします。
[ArcMap ドキュメントを開く] ダイアログ ボックスが表示されます。
-
Browse to C:\ArcGIS\ArcTutor\Network Analyst\Tutorial.
これはチュートリアル データが格納されているデフォルトの場所です。
-
[Exercise07.mxd] をダブルクリックします。
ArcMap にマップ ドキュメントが表示されます。
-
Network Analyst エクステンションの有効化
-
[カスタマイズ] → [エクステンション] の順にクリックします。
[エクステンション] ダイアログ ボックスが開きます。
- [Network Analyst] チェックボックスをオンにします。
- [閉じる] をクリックします。
-
[カスタマイズ] → [エクステンション] の順にクリックします。
-
[カスタマイズ] → [ツールバー] → [Network Analyst] の順に選択します。
[Network Analyst] ツールバーが ArcMap に追加されます。
-
[Network Analyst] ツールバーで、[Network Analyst ウィンドウの表示/非表示] ボタン をクリックします。
ドッキング可能な Network Analyst ウィンドウが開きます。
[Network Analyst] ツールバーが表示されていない場合は、このツールバーを追加してください。
Network Analyst ウィンドウが表示されていない場合は、このウィンドウを追加してください。
Network Analyst ウィンドウはドッキング/ドッキング解除できます。この演習では、コンテンツ ウィンドウの下にドッキングされています。
配車ルート解析レイヤの作成
-
[Network Analyst] ツールバーの [Network Analyst] をクリックし、[新規配車ルート解析] をクリックします。
Network Analyst ウィンドウに新規配車ルート解析レイヤが追加されます。ネットワーク解析クラス(訪問先、拠点、ルート、拠点立ち寄り状況、休憩、ルート ゾーン、ルート シード ポイント、ルート リニューアル、特別指定、訪問先ペア、ポイント バリア、ライン バリア、およびポリゴン バリア)は空です。
この解析レイヤはコンテンツ ウィンドウにも追加されます。
訪問先の追加
ここでは、[訪問先] ネットワーク解析クラスに食料品店のロケーションを追加します。各食料品店は配送センターに商品を注文しているため、訪問先は常に十分にあるものと考えることができます。訪問先クラスのメンバは、最終的には車両のルートのストップになります。
食料品店のロケーションは、すでに「Stores」フィーチャ レイヤとしてマップ ドキュ メントに追加されています。Stores レイヤの属性には、各店舗から注文される商品の合計重量(ポンド単位)、配送のタイム ウィンドウ(この時間内で商品を配送)、各店舗でのサービス時間(分単位)の情報が含まれています。サービス時間とは、商品の積み下ろしに要する時間のことです。
これらの店舗ポイント フィーチャを訪問先として解析レイヤに追加します。
-
Network Analyst ウィンドウの [訪問先 (0)] を右クリックし、[ロケーションの読み込み] を選択します。
[ロケーションの読み込み] ダイアログ ボックスが表示されます。
- [読み込み] ドロップダウン リストから、[Stores] を選択します。
-
[ロケーション解析プロパティ] セクションで、[Name] プロパティが [NAME] フィールド、[ServiceTime] プロパティが [ServiceTime] フィールドに自動的に設定されることを確認します。
Network Analyst では、設定ファイル(ArcGIS インストール ディレクトリ内の [...]\NetworkAnalyst\NetworkConfiguration\NASolverConfiguration.xml)に基づいて、新規作成された配車ルート解析レイヤにロケーション解析プロパティを自動的に設定します。
-
[TimeWindowStart1] の [フィールド] 値を [TimeStart1] に設定します。
- [TimeWindowEnd1] の [フィールド] 値を [TimeEnd1] に設定します。
- [DeliveryQuantities] の [フィールド] 値を [Demand] に設定します。
-
[MaxViolationTime1] プロパティの [デフォルト値] に 「0」 を入力します。
このプロパティを 0 に設定すると、タイム ウィンドウ違反が不可に指定されます。
-
[OK] をクリックします。
25 店舗が Network Analyst ウィンドウの [訪問先] に表示され、訪問先としてマップにも表示されます。
[ロケーションの読み込み] ダイアログ ボックスの [ロケーション解析プロパティ] セクションでは、Stores フィーチャクラスの属性を指定できます。これらの属性値は、ArcGIS Network Analyst の配車ルート解析で使用されます。
拠点の追加
商品は、1 か所の配送センターから配送されます。配送センターのロケーションは、ArcMap の DistributionCenter フィーチャ レイヤに表示されます。配送センターの営業時間は午前 8 時 00 分 ~ 午後 5 時 00 分です。ここでは、このポイント フィーチャを [拠点] ネットワーク解析クラスに追加します。
-
Network Analyst ウィンドウの [拠点 (0)] を右クリックし、[ロケーションの読み込み] を選択します。
[ロケーションの読み込み] ダイアログ ボックスが表示されます。
- [ロケーションの読み込み] ドロップダウン リストから、[DistributionCenter] を選択します。
- [ロケーション解析プロパティ] セクションで、[Name] プロパティと [NAME] フィールドが自動的に関連付けられていることを確認します。
- [TimeWindowStart1] プロパティの [デフォルト値] に「8 AM」を入力します。
-
[TimeWindowEnd1] プロパティの [デフォルト値] に「5 PM」を入力します。
-
[OK] をクリックします。
1 か所の配送センターが Network Analyst ウィンドウの [拠点] に表示され、拠点としてマップにも表示されます。
ルートの追加
配送センターには 3 台のトラックが配置されており、各トラックの最大積載重量は 15,000 ポンドです。ここでは、3 本のルート(各車両に 1 本のルート)を追加し、配送センターの運行手順に基づいてルートのプロパティを設定します。
-
Network Analyst ウィンドウの [ルート (0)] を右クリックし、[アイテムの追加] を選択します。
新しいルート [Item 1] が Network Analyst ウィンドウの [ルート] クラスに追加され、ルートの [プロパティ] ウィンドウが表示されます。
-
[プロパティ] ウィンドウで、以下の表に従ってルートの属性を指定します。表の説明に関する列は、各値の使用方法についての説明です。表にない属性についてはデフォルト値のままにします。
属性
値
説明
Name
Truck_1
車両の名前
StartDepotName
San Francisco
トラックが出発する配送センター
EndDepotName
San Francisco
ルート配送の終了後にトラックが戻る配送センター
StartDepotServiceTime
60
すべての商品をトラックに積むのに必要な時間(分単位)
EarliestStartTime
8 AM
トラックが運行を開始できる時間。この場合は、配送センターの営業開始時間(8 時)になります。
LatestStartTime
8 AM
トラックが運行を開始しなければならない時間。この時間までに運行を開始する必要があります。
Capacities
15000
トラックの最大積載重量。この場合は 15,000 ポンドです。
CostPerUnitTime
0.20
トラックの運転手の 1 分あたりの給料。この場合、運転手に 1 時間に 12 ドルずつ支払うため、$12.00/60 分 = $0.20/分となります。
CostPerUnitDistance
1.5
燃料消費、トラックの減価償却費、および保守費用の 1 マイルあたりの平均額
MaxOrderCount
10
トラックで配送可能な店舗の最大数
MaxTotalTime
360
運転手の作業シフトの最大時間。この場合は、就業規則により 6 時間(360 分)を超えることはできません。
MaxTotalTravelTime
120
トラックが連続走行できる最大時間。この場合は、就業規則に従い 2 時間(120 分)を超えないようにします。配送する店舗の数は、店舗での荷物の積み下ろし時間を考慮して、指定した時間内で無理なく配送できるようにします。
MaxTotalDistance
80
トラックの最大走行距離。この場合は、配送車両の 1 日あたりの燃料消費と保守費用を考慮し、トラックのルート走行距離が 80 マイルを超えないようにします。
-
[OK] をクリックします。
新しいルート [Truck_1] が Network Analyst ウィンドウの [ルート] クラスに追加されます。
-
Network Analyst ウィンドウの [Truck_1] ルート オブジェクトを右クリックし、[コピー] を選択します。
-
Network Analyst ウィンドウの [ルート (1)] クラスを右クリックし、[貼り付け] を選択します。
[ルート] クラスに 2 本の同じルート オブジェクトが含まれます。
-
最後の操作を繰り返して、3 本目のルート オブジェクトを作成します。
-
リスト上で 2 本目の [Truck_1] オブジェクトをダブルクリックします。
[プロパティ] ウィンドウが表示されます。
- [名前] プロパティをクリックし「Truck_2」と入力します。
-
2 回 Enter キーを押します。
ルートに一意な名前が付与され、ウィンドウが閉じます。
-
同様の手順で、3 本目のルートの名前を Truck_3 に変更します。
配送センターに配置されている 3 台のトラックは同じ車種のため、最初のトラックに入力した値をコピーして、名前を変えるだけで済みます。
配車ルート解析用のプロパティ設定
-
Network Analyst ウィンドウの [解析レイヤ プロパティ] ボタンをクリックします。
[レイヤ プロパティ] ダイアログ ボックスが開きます。
- [解析の設定] タブをクリックします。
-
[時間属性] ドロップダウン リストが [TravelTime (分)] に設定されていることを確認します。
VRP 解析ではこの属性を使用して、訪問先と拠点との間の時間ベースのコストを計算します。
-
[距離属性] ドロップダウン リストから [メートル] を選択します。
この属性は訪問先と拠点との間の移動距離を決定するのに使用され、制約条件を設け、ルート案内を作成することが可能です。ただし、VRP 解析の目的は時間コストを最小化することです。
-
[デフォルトの日付] を [曜日] に設定します。[曜日] ドロップダウン リストから [月] を選択します。
-
[積載制限の総数] が 1 に設定されていることを確認します。
この設定により、配送される商品は 1 つの測定値のみで計算されます。この場合、測定値は重量(ポンド)になります。積載制限の種類の計算単位を 2 つ指定する場合(例:重量と体積)は、[積載制限の総数] を 2 に設定します。
-
[時間フィールドの単位] で [分] が選択されていることを確認します。
これにより、すべての時間ベースの属性(ServiceTime、訪問先の MaxViolationTime1、ルートの MaxTotalTime、MaxTotalTravelTime、および CostPerUnitTime など)が分単位になります。
-
[距離フィールドの単位] が [マイル] に設定されていることを確認します。
これにより、すべての距離ベースの属性(ルートの場合は MaxTotalDistance や CostPerUnitDistance など)の単位がマイルに指定されます。
- 配送トラックが U ターンすることは難しいため、[ジャンクションでの U ターン] を [許可しない] に設定します。
-
[出力形状のタイプ] ドロップダウン リストから [直線] を選択します。
ルートの形状を道路の形状に合わせる場合、[正確な形状(メジャー付き)] または [正確な形状] を選択します。このオプションはルート表示のみに影響し、VRP 解析の結果には影響しません。
- [階層を使用] がオンになっていることを確認します。
- [規制] フレームの [RestrictedTurns] と [Oneway] がオンになっていることを確認します。
-
[ルート案内] フレームでデフォルトの値に設定されているオプションはそのままにします。
- [OK] をクリックします。
最適なルート割り当てと訪問順序の決定処理の実行
-
[Network Analyst] ツールバーの [解析の実行] ボタン をクリックします。
VRP 解析により、3 本の配送ルートが計算され、各配送先を結ぶラインが描画されます。各ルートの起点と終点は配送センターになり、ルートに沿って各店舗への配送が行われます。
エラー メッセージが表示される場合は、ルートの [Capacities] 属性の値が「15,000」ではなく「15000」に設定されていること、および各ルートに一意な名前が設定されていることを確認します。
ルートのターンごとの方向の決定
- Network Analyst ウィンドウの [ルート (3)] を右クリックし、[選択] → [選択解除] の順にクリックします。
-
[Network Analyst] ツールバーの [ルート案内ウィンドウ] ボタン をクリックします。
[ルート案内] ダイアログ ボックスが表示されます。
- コンテンツ ウィンドウの [配車ルート(VRP)] を右クリックして [レイヤ ファイルとして保存] を選択することで、[配車ルート(VRP)] レイヤをレイヤ ファイル(<ファイル名>.lyr)としてエクスポートすることもできます。これによりディスク上に解析が保存されるため、今後別のマップ ドキュメントにこの解析を追加して再利用することができます。
- 以降に説明する、このチュートリアル演習の高度なセクションに進むには、[ルート案内] ウィンドウを閉じます。そうでない場合は、ArcMap を終了して、「Exercise 07.mxd」に対する変更は保存しません。
既存のソリューションの変更による別のシナリオの解析
配車ルートのソリューションは、これまで適切に機能していました。しかし数週間後、Truck_2 に割り当てられている運転手が休暇をとりました。このため、配送会社は 2 台のトラックで、これまでと同じ店舗に配達を行う必要があります。作業量が増加するため、2 人の運転手には時間外手当を払い、昼に 1 回の休憩を取らせることにしました。また、配送会社は 2 箇所のサテライト配送センターを追加しました。配送中のトラックは、積荷を補充するためにメインの配送センターに戻る代わりに、これらのセンターを利用できます。前のステップで得られたソリューションを、これらの変更に合わせて修正します。
ソリューションから既存のルートを削除
-
Network Analyst ウィンドウで、[ルート] クラスの [Truck_2] オブジェクトを右クリックし、[削除] をクリックします。
ルート リニューアルの追加
取得した新しい 2 つのサテライト配送センターは、800 Brush Street と 100 Old County Road にあり、トラックのリニューアル場所として機能できます。これにより、トラックは起点の配送センターに戻ることなく、これらのリニューアル ロケーションで荷物を積み替えることができるため、時間を節約できます。ここでは、住所をジオコーディングして、リニューアル ロケーションを拠点ネットワーク解析クラスに追加します。リニューアル ロケーションで荷物の積み替えが可能なルートと荷物の積み替え時間は、[ルート リニューアル] ネットワーク解析クラスで指定します。
-
Network Analyst ウィンドウの [拠点 (1)] を右クリックし、[住所検索] を選択します。
[検索] ダイアログ ボックスが表示されます。
- [住所ロケータの選択] ドロップダウン リストから [SanFranciscoLocator] を選択します。
-
[Street or Intersection] ボックスに「800 Brush St」と入力します。
-
[検索] をクリックします。
Exercise07.mxd ですでに追加した住所ロケータの SanFranciscoLocator に一致する住所が検索され、[検索] ダイアログ ボックスの下部に結果が表示されます。
-
[検索] ダイアログ ボックスの結果を右クリックし、[ネットワーク解析オブジェクトとして追加] を選択します。
住所ロケーションが Network Analyst ウィンドウおよびマップ表示に拠点として追加されます。
- [検索] ダイアログ ボックスの [Street or Intersection] ボックスに「100 Old County Rd」と入力します。
- [検索] をクリックします。
-
[検索] ダイアログ ボックスの下部に表示されている新しい検索結果を右クリックし、[ネットワーク解析オブジェクトとして追加] を選択します。
3 か所目の拠点が [拠点] ネットワーク解析クラスに追加されます。
- [検索] ダイアログ ボックスを閉じます。
-
Network Analyst ウィンドウの [ルート リニューアル (0)] を右クリックし、[アイテムの追加] を選択します。
Network Analyst ウィンドウの [ルート リニューアル] クラスの下に Item1 という新しいルート リニューアル オブジェクトが追加され、Item1 の [プロパティ] ウィンドウが表示されます。
-
[プロパティ] ウィンドウで、以下に従ってルート リニューアルの属性を指定します。
属性
値
説明
DepotName
800 Brush St
トラックの荷物の積み替え拠点として使用できる拠点ロケーション
RouteName
Truck_1
車両の名前
ServiceTime
30
トラックの荷物を積むのに必要な時間(分単位)
-
[OK] をクリックします。
800 Brush St という新しいルート リニューアル オブジェクトが Network Analyst ウィンドウの [Truck_1] アイテム内に表示されます。
-
最後の 3 つのステップに従ってルート リニューアル オブジェクトをさらに 3 つ追加し、各トラック(Truck_1 と Truck_3)が 800 Brush St と 100 Old County Rd の両方のリニューアル ロケーションで荷物の積み替えをできるようにします。
Network Analyst ウィンドウでは、[Truck_1] と [Truck_3] の項目それぞれに 2 つのルート リニューアル オブジェクトが表示されます。
両方のトラックが 800 Brush Street および 100 Old County Road ロケーションで荷物の積み替えができるため、各トラックを 2 か所のリニューアル ロケーションに関連付けます。VRP 解析により、各トラックの最適なリニューアル ロケーションが計算されます。
超過勤務を含めたルートの変更
追加の作業量に対応するために、ルートの最大時間、最大移動時間、または最大距離の制限をなくしたい場合があります。運転手の労働時間は以前より長くなるため、6 時間の労働時間を超過した場合は、時給 18 ドルの残業代を支払うことにします。ここでは、ルートのプロパティを変更します。
-
Network Analyst ウィンドウの [ルート] ネットワーク解析クラスで、[Truck_1] をダブルクリックします。
[プロパティ] ウィンドウが表示されます。
-
以下の表の値になるよう、Truck_1 の属性を変更します。
属性
値
説明
OvertimeStartTime
360
残業代を支払う基準時間。この場合は、6 時間(360 分)の労働時間を超過した場合に運転手に残業代が支払われます。
CostPerUnitOvertime
0.3
トラックの運転手に支払う残業代。残業には時給 18 ドルが支払われるため、1 分あたりの給料は $18.00/60 分 = $0.30/分となります。
MaxOrderCount
20
超過時間で配送する店舗の最大数。運転手には残業代が支払われるため、多くの店舗に配送することが求められます。
MaxTotalTime
<Null>
運転手の作業シフトの合計時間の制限がなくなります。
MaxTotalTravelTime
<Null>
走行時間の制限がなくなります。
MaxTotalDistance
<Null>
トラックの移動距離の制限がなくなります。
- [OK] をクリックします。
- [Truck_3] に対して最後の 3 つのステップを繰り返します。
休憩の追加
運転手の労働時間が長くなるため、作業シフト中に 30 分の休憩を 1 回取るようにします。ここでは、各ルートで休憩を指定します。
-
Network Analyst ウィンドウの [休憩 (0)] を右クリックし、[アイテムの追加] を選択します。
[プロパティ] ウィンドウが表示されます。
-
新しい休憩の属性値を以下の表のように指定します。
属性
値
説明
TimeWindowStart
12:30 PM
休憩の開始時間。この場合は、午後 0 時 30 分以前に休憩を取ることはできません。
TimeWindowEnd
1:30 PM
休憩の終了時間。この場合は、午後 1 時 30 分以降に休憩を取ることはできません。
RouteName
Truck_1
休憩を追加するルートの名前
ServiceTime
30
休憩時間(分単位)
MaxViolationTime
0
休憩は 午後 0 時 30 分から午後 1 時 30 分の間に開始する必要があります。値がゼロの場合、午後 1 時 30 分以降に休憩を開始することはできません(休憩タイム ウィンドウの条件は厳しいということです)。
IsPaid
True
この場合は、休憩時間も支払いの対象になります。このため、このコストはルートの合計コストに含まれます。
- [OK] をクリックします。
-
最後の 3 つのステップを繰り返して、[Truck_3] の [RouteName] プロパティを入力します。
Network Analyst ウィンドウでは、[休憩] クラスの下に 2 つの休憩オブジェクト(Truck_1 および Truck_3)が表示されます。
ソリューションの決定
-
[Network Analyst] ツールバーの [解析の実行] ボタン をクリックします。
VRP 解析により、2 本の配送ルートが計算され、各配送先を結ぶラインが直線で描画されます。各ルートの起点と終点は配送センターになり、ルートに沿って各店舗への配送が行われます。各トラックはルート上のリニューアル ロケーションで荷物を積み替えて、残りの店舗に配送し、最後に配送センターに戻ります。
このソリューションは、配送会社が指定したすべての制約を満たしています。ただし、2 人の運転手にルートの道程を割り当てた後、Truck_1 の運転手は Downtown エリアの運転を、Truck_3 の運転手は East Bay エリアの運転を好むことがわかりました。このため、配送会社は運転手が希望するエリアの配送先を含むルートを提供する新しいソリューションを決定したいと考えています。次のステップでは、運転手の希望に合わせてルート シード ポイントを追加します。
ルート シード ポイントの追加
ここでは、住所をジオコーディングして、Truck_1 と Truck_3 のルート シード ポイントを追加します。ルート シード ポイントは、既存のポイント フィーチャクラスからインポートしたり、[ネットワーク ロケーションの作成] ツール で対話的に作成することもできます。
-
Network Analyst ウィンドウの [ルート シード ポイント (0)] を右クリックし、[住所検索] を選択します。
[検索] ダイアログ ボックスが表示されます。
-
[Street or Intersection] コンボ ボックスに「278 Dorantes Ave」と入力します。
-
[検索] をクリックします。
SanFranciscoLocator に一致する住所が検索され、[検索] ダイアログ ボックスの下部に結果が表示されます。
-
検索結果を右クリックし、[ネットワーク解析オブジェクトとして追加] を選択します。
住所ロケーションがルート シード ポイントとして追加されます。Network Analyst ウィンドウおよびマップ表示に表示されます。
- [検索] ダイアログ ボックスを閉じます。
-
Network Analyst ウィンドウで、新しいルート シード ポイント [278 Dorantes Ave] をダブルクリックします。
[プロパティ] ダイアログ ボックスが表示されます。
-
ルート シード ポイントの属性値を以下の表のように指定します。
属性
値
説明
RouteName
Truck_1
ルート シード ポイントを追加するルートの名前
SeedPointType
静的
これにより、指定されたシードポイントの近くの訪問先をより確実に Truck_1 に割り当てます。
- このセクションのステップ 1 ~ 5 を繰り返して、1888 Peralta St にもう 1 つのルート シード ポイントを追加します。
-
ステップ 6 と 7 を繰り返して、2 か所目のシード ポイントの [RouteName] 属性を「Truck_3」に変更します。
ソリューションの決定
-
[Network Analyst] ツールバーの [解析の実行] ボタン をクリックします。
VRP 解析により、2 本の配送ルートが計算され、各配送先を結ぶラインが直線で描画されます。Truck_1 のルートには、Downtown エリアにある配送店舗のみが含まれます。
- 変更を保存せずに ArcMap を終了します。