Network Analyst のライセンスで利用可能。
この演習では、配送会社の運営により、複数の車両で配送センターから食料品店 25 店舗へ商品を配送するための最適ルートを検索します。注文数は各店舗によって異なり、各トラックの最大積載量にも制限があります。この演習の主要な目的は、商品を配送する店舗の一部を配送トラックに割り当て、全体の輸送コストを最小限に抑えられるように配送順序を決定することです。
この問題は、配車ルート (VRP) を解析することで解決できます。配送順序が決定したら、ルートの案内図を電子ファイルで配布するか、または印刷して運転手に渡します。
データの取得
このチュートリアルのデータは、ダウンロードして使用できます。
- データ ダウンロード ページに移動します。
- [ダウンロード] ボタンをクリックしてファイルをローカルに保存します。
- ダウンロードしたファイルを展開します。
マップの作成
- ArcGIS Pro を開きます。
- [Map.aptx] テンプレートに基づいて新しいプロジェクトを作成します。
マップを含む新しいプロジェクトが表示されます。
プロジェクトへのチュートリアル データの追加
ネットワーク データセットは、道路システムの高機能なモデルです。ネットワーク データセットには、道路の位置と属性だけでなく、どの道路が接続されているか、接続されている道路間のどのターンが許可または禁止されているかなどの、道路の相互関係に関する情報や、可能な移動パスや移動時間に影響する他の情報も含まれています。ルート解析では、ネットワーク データセットを参照して、ストップ間の最短距離のパスが特定されます。
メモ:
ArcGIS Online を使用して解析する場合は、その解析で、ArcGIS Online クラウドに格納されている高品質な世界規模のネットワーク データセットが参照され、ArcGIS Online クレジットが使用されます。また、自分のコンピューターにローカルに保存した独自のネットワーク データセットを使用し、または ArcGIS Enterprise を使用して独自のネットワーク データセットを使用するルート検索サービスを公開して Enterprise ポータルでサービスを構成し、ArcGIS Pro で利用することができます。次の一連の手順で、ネットワーク データセットをマップに追加します。
- [カタログ] ウィンドウ (デフォルトではアプリケーションの横側にある) で [フォルダー] を右クリックし、[フォルダー接続の追加] を選択します。
[フォルダー接続の追加] ダイアログ ボックスが表示されます。
- チュートリアル データを置いたフォルダーを参照して、[Network Analyst] をダブルクリックし、[Tutorial] をクリックしてこのフォルダーを選択します。
- [OK] をクリックします。
Tutorial フォルダーへの接続が作成されます。
- [カタログ] ウィンドウで、[フォルダー] > [Tutorial] > [SanFrancisco.gdb] > [Transportation] の順に展開します。
- [Streets_ND] (ネットワーク データセット アイコン を持つ) をマップにドラッグします。
このネットワーク データセットが [コンテンツ] ウィンドウとマップに追加されます。
- [コンテンツ] ウィンドウで [Streets_ND] を右クリックし、[レイヤーにズーム] を選択して、サンフランシスコ エリアを表示します。
デフォルトでは、交通量データで構築されたネットワーク データセットは、マップに追加されると、現在の時刻の交通状況を表示します。このネットワーク データセットには履歴交通量データが含まれているため、現在の時刻と曜日の標準的な交通状況が表示されます。このネットワーク データセット内のすべての道路に交通量が含まれているわけではないため、デフォルトでは交通量を含む道路だけが表示されます。
ネットワーク データセットによってカバーされるエリアに対して、ネットワーク解析を実行できます。
解析を実行するためにネットワーク データセットを表示する必要はありません。そこで次に、ネットワーク データセットを非表示にします。
- [コンテンツ] ウィンドウで、[Streets_ND] をオフにして、ベースマップだけを表示します。
- [カタログ] ウィンドウで、[Tutorial] > [SanFrancisco.gdb] > [Analysis] の順に参照します。
- [カタログ] ウィンドウで、[Stores] レイヤーを右クリックして [現在のマップに追加] を選択します。
[Stores] レイヤーが [コンテンツ] ウィンドウとマップに追加されます。
- 手順 9 を繰り返し、マップに [DistributionCenter] レイヤーを追加します。
メモ:
レイヤーを [カタログ] ウィンドウからマップにドラッグして、マップに追加することもできます。
次に、このフォルダーに含まれているネットワーク データセットの 1 つをマップに追加します。
配車ルート (VRP) レイヤーの作成
配車ルート (VRP) レイヤーは、複数の配車ルート解析の設定と実行に必要な構造およびプロパティを提供します。このレイヤーには、解析後の結果も含まれます。
- [解析] タブの [ワークフロー] グループで、[ネットワーク解析] > [配車ルート (VRP)] の順にクリックします。
VRP レイヤーが [コンテンツ] ウィンドウに追加されます。このレイヤーには、解析の入力と出力を保持するいくつかのサブレイヤーが含まれます。
VRP レイヤーの作成時にサンフランシスコ ネットワークが [コンテンツ] ウィンドウ内にあったため、このレイヤーはサンフランシスコ ネットワーク データセットを参照しています。
メモ:
ネットワーク解析レイヤーの作成に使用されるネットワーク データ ソースを表示または変更するには、[解析] タブの [ワークフロー] グループで、[ネットワーク解析] ドロップダウン メニューをクリックして、[ネットワーク データ ソース] の下を確認します。
- [コンテンツ] ウィンドウで、[配車ルート (VRP)] をクリックし、グループ レイヤーを選択します。
ArcGIS Pro の上部にある [Network Analyst] グループに [配車ルート (VRP)] タブが表示されます。
- [VRP] をクリックし、タブのコントロールを表示します。
これらのコントロールを使用して、生成する VRP モデルを定義します。
ヒント:
[VRP] タブは、[コンテンツ] ウィンドウで VRP レイヤーを選択した場合のみ表示されます。また、複数の VRP レイヤーが存在する場合は、それぞれの VRP レイヤーが独自のタブを持ちます。
訪問先の追加
ここでは、[訪問先] ネットワーク解析クラスに食料品店のロケーションを追加します。各食料品店は配送センターに商品を注文しているため、訪問先は常に十分にあるものと考えることができます。訪問先クラスのメンバーは、最終的には車両のルートのストップになります。
食料品店のロケーションは、すでに「Stores」フィーチャ レイヤーとしてマップ ドキュ メントに追加されています。Stores レイヤーの属性には、各店舗から注文される商品の合計重量 (ポンド単位)、配送のタイム ウィンドウ (この時間内で商品を配送)、各店舗でのサービス時間 (分単位) の情報が含まれています。サービス時間とは、商品の積み下ろしに要する時間のことです。
このテーブルは、1899 年 12 月 30 日の日付値を示しています。これは、時間のみを指定することを示す日付値です。すべての時間フィールドで、時間値にこの日付が関連付けられている場合、解析ではデフォルトの日付を使用して、解析に使用する日付を決定します。この場合、一般的に月曜日を解析します。また、月曜日は各時間フィールドでも使用されます。
- [VRP] タブの [入力データ] グループで、[訪問先のインポート] をクリックします。
[ロケーションの追加 (Add Locations)] ツールを示す [ジオプロセシング] ウィンドウが表示されます。[ロケーションの追加 (Add Locations)] ツールは、フィーチャを VRP レイヤーなどのネットワーク解析レイヤーに読み込みます。このツールは、店舗を表すポイントを訪問先サブレイヤーに読み込むことができます。
- [入力ネットワーク解析レイヤー] が [配車ルート (VRP)] に設定され、[サブ レイヤー] が [訪問先] に設定されていることを確認します。
- [入力ロケーション] のドロップダウン矢印をクリックし、[Stores] を選択します。これは、以前にマップに追加したポイント フィーチャクラスです。
- [フィールドの割り当て] で [プロパティ] から [NAME] を選択し、[NAME] が [フィールド名] パラメーターに自動的に割り当てられていることを確認します。
- 次のフィールドが自動的に割り当てられていない場合は、割り当てを行います。
- [TimeWindowStart] > [TimeStart1]
- [TimeWindowEnd] > [TimeEnd1]
- [DeliveryQuantity_1] > [Demand]
- [フィールド マッピング] で [プロパティ] から [MaxViolationTime] を選択し、[デフォルト値] パラメーターに「0」を入力します。
これは、この場所は所定のタイム ウィンドウ外に訪問できないことを示します。
- 残りのツール パラメーターはデフォルト設定のままにして、[ジオプロセシング] ウィンドウの下部にある [実行] ボタンをクリックします。
訪問先の属性テーブルに合計 25 店舗がリストされ、マップに訪問先として表示されます。
拠点の追加
商品は、1 か所の配送センターから配送されます。配送センターのロケーションは、先ほどマップに追加した DistributionCenter フィーチャ レイヤーに表示されます。配送センターの営業時間は午前 8 時 00 分 ~ 午後 5 時 00 分です。ここでは、このポイント フィーチャを [拠点] ネットワーク解析クラスに追加します。
- [VRP] タブの [入力データ] グループで、[拠点のインポート] をクリックします。
[ロケーションの追加 (Add Locations)] ツールを示す [ジオプロセシング] ウィンドウが表示されます。
- [入力ネットワーク解析レイヤー] が [配車ルート (VRP)] に設定され、[サブ レイヤー] が [拠点] に設定されていることを確認します。
- [入力ロケーション] のドロップダウン矢印をクリックし、[DistributionCenter] を選択します。
- [フィールドの割り当て] で [プロパティ] から [NAME] を選択し、[NAME] が [フィールド名] パラメーターに自動的に割り当てられていることを確認します。
- [フィールドの割り当て] で [プロパティ] から [TimeWindowStart] を選択し、[デフォルト値] パラメーターに「8AM」と入力します。
- [フィールドの割り当て] で [プロパティ] から [TimeWindowEnd] を選択し、[デフォルト値] パラメーターに「5PM」と入力します。
- 残りのツール パラメーターはデフォルト設定のままにして、[ジオプロセシング] ウィンドウの下部にある [実行] ボタンをクリックします。
1 か所の配送センターが拠点の属性テーブルに表示され、拠点としてマップにも表示されます。
ルートの追加
配送センターには 3 台のトラックが配置されており、各トラックの最大積載重量は 15,000 ポンドです。ここでは、3 本のルート (各車両に 1 本のルート) を追加し、配送センターの運行手順に基づいてルートのプロパティを設定します。
- [VRP] タブの [入力データ] グループで、[ルートのインポート] のドロップダウン矢印をクリックして [ルートの追加] を選択します。
[配車ルート (VRP) ルートの追加 (Add Vehicle Routing Problem Routes)] ツールを示す [ジオプロセシング] ウィンドウが表示されます。このツールは、指定したパラメーターを使用し、VRP レイヤーにルートを作成します。これにより、同じパラメーターを持つ複数のルートを同時に作成できます。
- [入力配車ルート (VRP) レイヤー] が [配車ルート (VRP)] に設定されていることを確認します。
- [ルート数] に「3」と入力します。
- [ルート名の接頭辞] に「Truck」と入力します。
- [開始拠点名] ドロップダウン オプションと [終了拠点名] ドロップダウン オプションでサンフランシスコを選択します。
- [最早開始時間] と [最遅開始時間] を 8:00:00 AM に変更します。
- [訪問先の最大数] を「10」に変更します。
- [Capacity_1] には「15000」を入力します。
- [ルート制約] には次の値を入力します。
パラメーター
値
説明
最大合計時間
360
運転手の作業シフトの最大時間。この場合は、就業規則により 6 時間 (360 分) を超えることはできません。
最大合計移動時間
120
トラックが連続走行できる最大時間。この場合は、就業規則に従い 2 時間 (120 分) を超えないようにします。配送する店舗の数は、店舗での荷物の積み下ろし時間を考慮して、指定した時間内で無理なく配送できるようにします。
最大合計距離
80
トラックの最大走行距離。この場合は、配送車両の 1 日あたりの燃料消費と保守費用を考慮し、トラックのルート走行距離が 80 マイルを超えないようにします。
- [コスト] には、次の値を入力します。
パラメーター
値
説明
単位時間ごとのコスト
0.20
トラックの運転手の 1 分あたりの給料。この場合、運転手に 1 時間に 12 ドルずつ支払うため、$12.00/60 分 = $0.20/分となります。
単位距離ごとのコスト
1.5
燃料消費、トラックの減価償却費、および保守費用の 1 マイルあたりの平均額
- 残りのツール パラメーターはデフォルト設定のままにして、[ジオプロセシング] ウィンドウの下部にある [実行] ボタンをクリックします。
これらのルートは、Route サブレイヤーの属性テーブルに追加されます。
配車ルート解析用のプロパティ設定
[VRP] リボンには、レイヤーに対するパラメーターを指定できるセクションがあります。
- [VRP] タブの [移動モード] グループで、[移動モード] セクションの右隅にある [移動モード プロパティの起動] ボタンをクリックしてレイヤーのプロパティを開きます。
[レイヤー プロパティ: 配車ルート (VRP)] ダイアログ ボックスが表示されます。
- [U ターン] セクションを展開して、ドロップダウンリストから [なし] を選択します。
- [OK] をクリックします。
[モード] ドロップダウン リストに [<運転時間>] が表示されます。これは、移動モードが調整されることを示します。
- [移動モード] グループで、[時間フィールドの単位] が [分]、[距離フィールドの単位] が [マイル] に設定されていることを確認します。
- [デフォルトの日付] グループで、[デフォルトの日付タイプ] ドロップダウン リストから [曜日] を選択します。
- 曜日が表示されたドロップダウン リストから、[月曜日] を選択します。
- [出力ジオメトリ] グループで [出力ジオメトリの線形形状タイプ] ドロップダウン リストから [直線] を選択します。
[直線] 出力ジオメトリは、ルートに割り当てられた訪問先と、その訪問順序を知りたい場合に便利です。各車両がたどった正確なルートを把握するには、[正確な形状] オプションを使用します。
メモ:
出力ジオメトリ オプションはルート表示のみに影響し、VRP 解析の結果には影響しません。
メモ:
この設定は、ArcGIS Online では使用できません。
解析の実行
VRP 解析を実行し、最適なルート割り当てと訪問順序を決定します。
- [VRP] タブで、[実行] をクリックします。
VRP 解析により、3 本の配送ルートが計算され、各配送先を結ぶラインが描画されます。各ルートの起点と終点は配送センターになり、ルートに沿って各店舗への配送が行われます。
ルートのターンごとのルート案内の決定
[ルート案内] ウィンドウで、ルート案内の詳細の移動を確認できます。
- [VRP] タブの [ルート案内] グループで、[ルート案内の表示] ボタンをクリックします。
[ルート案内] ウィンドウが開き、各ルートのターンごとのルート案内が表示されます。
- 以降に説明する、このチュートリアル演習の高度なセクションに進むには、[ルート案内] ウィンドウを閉じます。高度なセクションに進まない場合は、プロジェクトを保存して終了します。ArcGIS Pro
既存のソリューションの変更による別のシナリオの解析: 既存ルートの削除
この VRP ソリューションは、これまでこの会社で適切に機能していました。しかし数週間後、Truck2 に割り当てられている運転手が休暇をとりました。このため、配送会社は 2 台のトラックで、これまでと同じ店舗に配達を行う必要があります。作業量が増加するため、2 人の運転手には時間外手当を払い、昼に 1 回の休憩を取らせることにしました。また、配送会社は 2 箇所のサテライト配送センターを追加しました。配送中のトラックは、積荷を補充するためにメインの配送センターに戻る代わりに、これらのセンターを利用できます。前のステップで得られたソリューションを、これらの変更に合わせて修正します。
- [コンテンツ] ウィンドウで、[ルート] を右クリックして、ショートカット メニューから [属性テーブル] を選択します。
各ルートの入力フィールドと出力フィールドを含む属性テーブルが表示されます。
- Truck2 の行を選択し、テーブル ビューの [選択セットの削除] ボタンをクリックします。
この操作により、テーブルから行が削除され、それに対応するルートがマップから削除されます。
- [編集] タブをクリックし、[編集の管理] グループにある [保存] ボタン をクリックします。
- [編集の保存] ダイアログ ボックスで、[はい] をクリックします。
超過勤務を含めたルートの変更
追加の作業量に対応するために、ルートの最大時間、最大移動時間、または最大距離の制限をなくしたい場合があります。運転手の労働時間は以前より長くなるため、6 時間の労働時間を超過した場合は、時給 18 ドルの残業代を支払うことにします。ここでは、ルートのプロパティを変更します。
- ルート属性テーブルが開いた状態で、OvertimeStartTime フィールドが表示されるまでテーブルをスクロールし、フィールドをダブルクリックして編集します。
- 以下のテーブルの値に一致するよう、Truck1 と Truck3 を編集します。<NULL> 値を持つ属性については、存在する値を削除します。
フィールド名
値
説明
OvertimeStartTime
360
残業代を支払う基準時間。この場合は、6 時間 (360 分) の労働時間を超過した場合に運転手に残業代が支払われます。
CostPerUnitOvertime
0.3
トラックの運転手に支払う残業代。残業には時給 18 ドルが支払われるため、 1 分あたりの給料は、$18.00/60 分 = $0.30/分となります。
MaxOrderCount
20
超過時間で配送する店舗の最大数。運転手には残業代が支払われるため、多くの店舗に配送することが求められます。
MaxTotalTime
<NULL>
運転手の作業シフトの合計時間の制限がなくなります。
MaxTotalTravelTime
<NULL>
走行時間の制限がなくなります。
MaxTotalDistance
<NULL>
トラックの移動距離の制限がなくなります。
- [編集] タブをクリックし、[編集の管理] グループにある [保存] ボタン をクリックします。
- [編集の保存] ダイアログ ボックスで、[はい] をクリックします。
- ルート属性テーブルを閉じます。
ルート リニューアルの追加
配送会社は、トラックのリニューアル ロケーションとして、800 Brush Street と 100 Old County Road の 2 か所にサテライト配送センターを設置しました。これにより、トラックは起点の配送センターに戻ることなく、これらのリニューアル ロケーションで荷物を積み替えることができるため、時間を節約できます。ここでは、住所をジオコーディングして、リニューアル ロケーションを拠点ネットワーク解析クラスに追加します。リニューアル ロケーションで荷物の積み替えが可能なルートと荷物の積み替え時間は、[ルート リニューアル] ネットワーク解析クラスで指定します。
はじめに、リニューアル ロケーションを Depots サブレイヤーに設定します。
- [マップ] タブをクリックし、[照会] グループで [場所検索] ボタン をクリックします。
[場所検索] ウィンドウが表示されます。
- 検索ボックスの横の [オプション] ドロップダウン ボタンをクリックし、[プロバイダー設定] を選択します。
- [ロケーターのプロジェクトへの追加] ボタンをクリックします。
[既存ロケーターの選択] ダイアログ ボックスが表示されます。
- チュートリアル データの場所を参照し、[SanFranciscoLocator.loc] を選択します。
- [既存のロケーターを選択] ダイアログ ボックスで [OK] をクリックします。
[プロバイダー設定] ウィンドウに SanFranciscoLocator.loc が追加されます。
- [場所検索ウィンドウに戻る] ボタンをクリックします。
- [検索] ボックスに「800 Brush St.」と入力して、Enter キーを押します。
- [SanFranciscoLocator] で「800 Brush St, Oakland, California, 94607」を右クリックし、ショートカット メニューで [フィーチャクラスに追加] を選択します。
メモ:
ロケーターとして [World Geocoding Service] を使用すると、クレジットを消費します。
- [フィーチャクラスに追加] ダイアログ ボックスで「配車ルート (VRP): 拠点」を展開し、[拠点] を選択します。
- [OK] をクリックします。
拠点が拠点属性テーブルとマップに追加されます。
- 100 Old County Rd, Brisbane, California, 94005 の拠点についても、手順 7 ~ 10 を繰り返します。
- [場所検索] ウィンドウを閉じます。
- [コンテンツ] ウィンドウで、[拠点] サブレイヤーを右クリックして、ショートカット メニューから [属性テーブル] を選択します。
- 拠点属性テーブルで [名前] フィールドをダブルクリックし、新しく追加された拠点について、「800 Brush St」拠点を「Brush St」に、「100 Old County Rd」拠点を「Old County Rd」にそれぞれ名前を変更します。
ここで指定する名前は、ルート リニューアル情報を追加する次の手順で、完全に一致する必要があります。
- [編集] タブの [編集の管理] グループにある [保存] ボタン をクリックします。
- [編集の保存] ダイアログ ボックスで、[はい] をクリックします。
- 拠点属性テーブルを閉じます。
- [コンテンツ] ウィンドウで、[ルート リニューアル] サブテーブルを右クリックして [開く] をクリックします。
テーブルは空です。
- [クリックして新しい行を追加] します。
- 属性テーブルに次の情報を追加します。
RouteName
DepotName
ServiceTime
Truck1
Brush St
30
Truck3
Brush St
30
Truck1
Old County Rd
30
Truck3
Old County Rd
30
拠点テーブルとルート テーブルの Name フィールドで、スペルが完全に一致することを確認します。属性テーブルは、以下の図のようになります。
- [編集] タブの [編集の管理] グループにある [保存] ボタン をクリックします。
- [編集の保存] ダイアログ ボックスで、[はい] をクリックします。
- ルート リニューアル属性テーブルを閉じます。
休憩の追加
運転手の労働時間が長くなるため、作業シフト中に 30 分の休憩を 1 回取るようにします。ここでは、各ルートで休憩を指定します。
- [VRP] タブの [入力データ] グループで、[休憩のインポート] のドロップダウン矢印をクリックして [休憩の追加] を選択します。
[配車ルート (VRP) 休憩の追加 (Add Vehicle Routing Problem Breaks)] ツールを示す [ジオプロセシング] ウィンドウが表示されます。このツールは、指定したパラメーターを持つ休憩を VRP レイヤーに作成し、同時に複数の休憩を作成することができます。
- [入力配車ルート (VRP) レイヤー] パラメーターが [配車ルート (VRP)] に設定されていることを確認します。
- [ターゲット ルート名] は空白のままにします。
このようにしておくと、設定する休憩がすべてのルートに対して適用されます。現在ルート属性テーブルに設定されている各ルートに対し、入力が行われます。
- [休憩タイプ] がタイムウィンドウ休憩に設定されていることを確認します。
- [有給] ボックスをオンにします。
休憩時間中も運転手には給料は支払われるため、休憩時間に伴うコストも、ルートの総コストに含まれます。
- [休憩時間] を 30 に設定します。
運転手には、30 分間の昼休憩が与えられます。
- [タイム ウィンドウ開始] を 12:30 PM に設定します。
- [タイム ウィンドウ終了] を 1:30 PM に設定します。
- [最大超過時間] を 0 に設定します。
休憩は午後 12 時 30 分から午後 1 時 30 分の間に開始する必要があります。値がゼロの場合、午後 1 時 30 分以降に休憩を開始することはできません。
- 残りのツール パラメーターはデフォルト設定のままにして、[ジオプロセシング] ウィンドウの下部にある [実行] ボタンをクリックします。
休憩属性テーブルには、各ルート (Truck1 と Truck3) で午後 12 時 30 分から午後 1 時 30 分までの間に有給の休憩時間が発生するという、2 つのエントリが表示されます。
解析の実行
次の手順を実行して解析を実行します。
- [VRP] タブで [実行] ボタン をクリックします。
VRP 解析により、2 本の配送ルートが計算され、各配送先を結ぶラインが直線で描画されます。各ルートの起点と終点は配送センターになり、ルートに沿って各店舗への配送が行われます。各トラックはルート上のリニューアル ロケーションで荷物を積み替えて、残りの店舗に配送し、配送センターに戻ります。
[拠点立ち寄り状況] 属性テーブルでは、1 日の始めとリニューアル ロケーションを訪問したときに積み込まれた荷物の数量についての情報を確認できます。また、これらの拠点への予定到着時間も表示されます。