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
150
VRPの近傍操作SWAP*について調べてみた
NearMeの技術発表資料です
PRO
July 05, 2024
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
ESLintをもっと有効活用しよう
nearme_tech
PRO
0
6
リファクタリングのための第一歩
nearme_tech
PRO
0
29
ガウス過程回帰とベイズ最適化
nearme_tech
PRO
1
71
確率的プログラミング入門
nearme_tech
PRO
2
65
Observability and OpenTelemetry
nearme_tech
PRO
2
35
観察研究における因果推論
nearme_tech
PRO
1
100
React
nearme_tech
PRO
2
40
Architecture Decision Record (ADR)
nearme_tech
PRO
1
860
遺伝的アルゴリズムを実装する
nearme_tech
PRO
1
61
Other Decks in Technology
See All in Technology
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
230
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
170
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
18
5.2k
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
32k
APIとはなにか
mikanichinose
0
110
Oracle Cloud Infrastructure:2024年12月度サービス・アップデート
oracle4engineer
PRO
1
230
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
38
16k
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
200
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
120
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
88
5.7k
Typedesign – Prime Four
hannesfritz
40
2.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Documentation Writing (for coders)
carmenintech
66
4.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
The Cost Of JavaScript in 2023
addyosmani
46
7k
A better future with KSS
kneath
238
17k
YesSQL, Process and Tooling at Scale
rocio
169
14k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
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