Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
VRPの近傍操作SWAP*について調べてみた
Search
NearMeの技術発表資料です
PRO
July 05, 2024
Technology
1
270
VRPの近傍操作SWAP*について調べてみた
NearMeの技術発表資料です
PRO
July 05, 2024
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
Box-Muller法
nearme_tech
PRO
1
15
Kiro触ってみた
nearme_tech
PRO
0
34
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
4
350
ReactNative のアップグレード作業が (意外に)楽しかった話
nearme_tech
PRO
2
93
強化学習アルゴリズムPPOの改善案を考えてみた
nearme_tech
PRO
0
27
Apple Containerについて調べて触ってみた
nearme_tech
PRO
0
370
Rust 並列強化学習
nearme_tech
PRO
0
32
並列で⽣成AIにコーディングをやらせる
nearme_tech
PRO
1
210
希望休勤務を考慮したシフト作成
nearme_tech
PRO
0
48
Other Decks in Technology
See All in Technology
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
3
120
衛星画像超解像化によって実現する2D, 3D空間情報の即時生成と“AI as a Service”/ Real-time generation spatial data enabled_by satellite image super-resolution
lehupa
0
190
能登半島地震において デジタルができたこと・できなかったこと
ditccsugii
0
250
やる気のない自分との向き合い方/How to Deal with Your Unmotivated Self
sanogemaru
1
520
Click A, Buy B: Rethinking Conversion Attribution in ECommerce Recommendations
lycorptech_jp
PRO
0
100
Wasmのエコシステムを使った ツール作成方法
askua
0
220
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
12
81k
Introdução a Service Mesh usando o Istio
aeciopires
0
200
難しいセキュリティ用語をわかりやすくしてみた
yuta3110
0
300
Node.js 2025: What's new and what's next
ruyadorno
0
410
「れきちず」のこれまでとこれから - 誰にでもわかりやすい歴史地図を目指して / FOSS4G 2025 Japan
hjmkth
1
320
20251014_Pythonを実務で徹底的に使いこなした話
ippei0923
0
210
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
Producing Creativity
orderedlist
PRO
347
40k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
115
20k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Code Review Best Practice
trishagee
72
19k
Why Our Code Smells
bkeepers
PRO
340
57k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
35
6.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Transcript
0 2024-07-05 第97回NearMe技術勉強会 Kenji Hosoda VRPの近傍操作SWAP* について調べてみた
1 SWAP*に興味をもった経緯 • VRPにおける近傍操作のアルゴリズムの⼀つ • いくつかのアクティブなVRPのライブラリで取り⼊れられている ◦ https://github.com/VROOM-Project/vroom ☆1.3k ◦
https://github.com/reinterpretcat/vrp ☆329 ◦ https://github.com/PyVRP/PyVRP ☆229 • ⽐較的最近提案されている ◦ 2020年にarxivで提案 ▪ https://arxiv.org/abs/2012.10384 ◦ 2022年にComputers & Operations Researchに掲載 ▪ https://www.sciencedirect.com/science/article/abs/pii/S030505482100349X • 計算時間が愚直な実装に⽐べて → になる
2 https://developers.google.com/optimization/routing/vrp VRP(Vehicle Routing Problem)ついて ⼀連の場所を訪れる複数の⾞両の最適なルートを⾒つける 車庫 (DEPOT) 車両 1
車両 2 車両 3 車両 4
3 VRPの解き⽅ • 混合整数計画法で解く ◦ 厳密な最適化ができ、解の品質が保証される ◦ 計算時間が⾮常に⻑くなる時がある • メタヒューリスティクスで解く
◦ 厳密な最適解ではないが、実⽤的に良好な解を得られる ◦ 計算時間は⽐較的短く、時間制約を設けて解を得ることも可能 ◦ 問題に応じてアルゴリズムを調整しやすい ◦ シミュレーテッドアニーリング / 遺伝的アルゴリズム など
4 https://www.researchgate.net/publication/363632926_A_reinforcement_learning-Variable_neighborhood_search_method_for_the_capacitated_Vehicle_Routing_Problem VRPの近傍操作について • 近傍操作はメタヒューリスティクスの ⼀部として使⽤される ◦ 近傍操作を繰り返すことで局所解 を探索する •
近傍操作の例 • ルート内 ◦ エッジ繋ぎ変え (2-OPT) ◦ ノード移動 (MOVE) • ルート間 ◦ ノード交換 (SWAP) ◦ ノード移転 (RELOCATE)
5 SWAP操作について A B C D DEPOT E F G
H Route1 Route2 SWAP前の2つのルート
6 SWAP操作について A B C D DEPOT E F G
H Route1 Route2 ルート間でノードを交換する
7 SWAP操作について あるルート間のノードペアにおいては、例えば、 ノードEをRoute1のどこに挿⼊するか、ノードCをRoute2のどこに挿⼊するか、 を洗い出して、その中でベストな挿⼊ポイントを⾒つける A B C D DEPOT
E F G H Route1 Route2 A B C D DEPOT E F G H Route1 Route2 …
8 SWAP操作について • 全体としては、 ◦ ルート間のノードペアがΘ(n^2)通り ◦ あるノードペアにおける挿⼊ポイントがΘ(n^2)通り ◦ で、Θ(n^4)通りの動きがある
• 愚直な実装で、計算時間はΘ(n^3) ◦ (ノードペアにおけるベストな挿⼊ポイントの計算は、 ペアの⽚⽅ずつ独⽴に⾏えるのでΘ(n)の計算時間)
9 SWAP*について 1: EをRoute1に付け加えた時のコストを考える A B C D DEPOT E
F G H C 0E CEA C0A Route1 Route2 上の例のコスト差分は、∆(E, 0, A) = C0E + CEA - C0A となる ※ルートのコストは各エッジのコストの和で決まるものとする
10 SWAP*について 1: EをRoute1に付け加えた時のコストを考える A B C D DEPOT E
F G H CAE CEB CAB Route1 Route2 上の例のコスト差分は、∆(E, A, B) = CAE + CEB - CAB となる
11 SWAP*について A B C D DEPOT E F G
H CBE CEC CBC Route1 Route2 上のコスト差分は、∆(E, B, C) = CBE + CEC - CBC となる 1: EをRoute1に付け加えた時のコストを考える
12 SWAP*について A B C D DEPOT E F G
H CCE CED CCD Route1 Route2 上のコスト差分は、∆(E, C, D) = CCE + CED - CCD となる 1: EをRoute1に付け加えた時のコストを考える
13 SWAP*について 上のコスト差分は、∆(E, C, D) = CDE + CE0 -
CD0 となる 1: EをRoute1に付け加えた時のコストを考える A B C D DEPOT E F G H CDE CD0 Route1 Route2 CE0
14 SWAP*について 上のコスト差分は、 ∆(E, B, D) - ∆(C, B, D)
= (CBE + CED - CBD) - (CBC + CCD - CBD) = CBE + CED - CBC - CCD となる 2: Route1ではCを取り除いて、Cの場所をEで置き換えた場合を考える A B C D DEPOT E F G H CBE CBD Route1 Route2 CED CBC CCD
15 SWAP*について この中から最初コストとなるEの配置を選ぶ ↓Cを取り除く場合はこのパタンはない 1: EをRoute1に付け加える場合 2: Cの場所をEで置き換える場合 ここからCを取り除く (差分コストはさらに∆(C,
B, D)だけ引かれる) こちらは既に Cは取り除かれてる
16 SWAP*について この中から最初コストとなるEの配置を選ぶ 1: EをRoute1に付け加える場合 2: Cの場所をEで置き換える場合 この中から最⼩コストとなるTop3を選ぶ ここからCを取り除く (差分コストはさらに∆(C,
B, D)だけ引かれる) Cを取り除く場合にありえないパタンを除く (Top3の中でありえないパタンは最⼤2個なので、最⼩コストのものは残る) 枠の部分はRoute1で取り除くノードに関わらず 事前に計算して使いまわせる (計算量を”n回分”減らせる)
17 SWAP*のアルゴリズム全体像 ルートペアを選出(計算量削減のため近傍のルートペアに限定) https://arxiv.org/abs/2012.10384 ベストな挿入ポイントの Top3を事前計算 各ルート間のノードペアにおいて 最小コスト差分を計算 ベストなルート間のノードペアを選択 ベストなルート間のノードペアを交換
18 SWAP*の適⽤例 https://arxiv.org/abs/2012.10384 32と46を交換
19 SWAP*のパフォーマンス • 計算時間は最⼤32% → 古典的な⽅法に⽐べ劇的に改善 • 15%ほどの解の改善に貢献 • 解の改善が難しくなる後半の探索ほど解の改善に貢献
https://arxiv.org/abs/2012.10384 これは直感に合う
20 Thank you