Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ローカル線全駅下車の最適化 @Optimization Night #4
Search
hiromakimaki
December 02, 2020
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ローカル線全駅下車の最適化 @Optimization Night #4
数理最適化: Optimization Night #4 のLT資料です
https://optimization.connpass.com/event/194695/
hiromakimaki
December 02, 2020
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
830
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The SEO Collaboration Effect
kristinabergwall1
1
590
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
710
Building Adaptive Systems
keathley
44
3.3k
The Language of Interfaces
destraynor
162
27k
Optimizing for Happiness
mojombo
378
71k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Thoughts on Productivity
jonyablonski
76
5.4k
We Are The Robots
honzajavorek
0
400
Transcript
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ローカル線全駅下車の最適化 Lightning Talk at Optimization Night #4 Masayuki Hirota (@hiro_makimaki) 2020/12/02 1 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 自己紹介 職歴 サーバーサイドエンジニア(約 5 年) データサイエンティスト(約半年) 趣味 鉄道旅行 競技プログラミング (AtCoder) などなど 2 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ローカル線の旅の楽しさ 景色が良い! 各駅周辺を散策してみるといろいろ面白い! (a) 神戸駅の「清流」 (b) 北濃駅の転車台 ローカル線 100 線とか見てみると、 「こんな路線あったのか」 という気付きがあるかも: http://j100s.com/localline.html 3 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ローカル線の旅の難点 全駅下車して回ろうとすると時間がかかることが多い 列車の運行本数が少なかったり 駅間の所要時間が長かったり ↓ 効率的に回る方法はないものか...? 4 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 解きたい問題 目的 特定の路線の全駅を訪問する 最初の出発駅・出発時刻を固定した上で, 最終駅到着時刻 を最も早くしたい 制約 最終的に出発駅に戻ってくる 各駅では最低 D 分間滞在することにする 散策用の時間確保のため 移動可能な時刻及び最低滞在時間が指定されている 巡回セールスマン問題 5 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 問題で登場する値の整理 V = {1, 2, · · · , N}: 訪問対象の駅 T: 探索対象期間(分) M: 探索対象期間内に走っている列車の本数 D: 各駅における滞在時間(分) 列車データ 1 列車のデータは駅間のセクション情報のリスト セクション情報:出発駅・到着駅・出発時刻・到着時刻 このリストを要素に持つリストが列車データ 6 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 駅数と列車本数の規模 路線によって駅数も列車本数も様々 銚子電気鉄道: 10 駅 34 本 わたらせ渓谷鐵道: 17 駅 39 本 秋田内陸線: 29 駅 28 本 長良川鉄道: 38 駅 51 本 ※2020/12/05 時点、両方面合計、臨時列車除く土日ダイヤ 7 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 解法:前処理& Bit DP 列車データを使いやすい形に変換 Bit DP に帰着して解く 8 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 列車データの変換 元となる列車データ 1 列車のデータは駅間のセクション情報のリスト セクション情報:出発駅・到着駅・出発時刻・到着時刻 このリストを要素に持つリストが列車データ 下記のような map に変換する(arr_time と表記) キー:出発駅・到着駅・現在時刻 値:最速到着時刻(途中の乗換OK) 処理の詳細は割愛するが、各駅のペアについて出発時刻を ずらしつつ乗換検索を走らせるイメージ 9 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bit DP 手順(駅 0 から出発して駅 0 に戻る) dp[S][v]: 駅集合 S ⊂ V に含まれる駅を全て訪問済み&最後 に駅 v ∈ V を訪問する場合の, 最も早い v への到着時刻 v の 1 つ前に訪問した駅が u だとすると, u を出発できる時 刻は滞在時間を考慮して dp[S − {v}][u] + D となる よって dp[S][v] = min u∈S−{v} arr_time[(u, v, dp[S − {v}][u] + D)] が成り立つ あとは dp[ϕ][0] = 0 として dp[V][0] を求めればよい 経路復元に必要な情報は別途用意 計算量: O(N2 × 2N) 10 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数値実験 駅数 N 列車本数 M 滞在時間 D 探索対象期間 T ケース 1 10 18 30 1280 ケース 2 17 30 15 1540 ケース 3 17 39 15 1361 ケース 1: 人工データ ケース 2: 人工データ ケース 3: 実例(わたらせ渓谷鐵道) コード: https://github.com/hiromakimaki/study- memo/blob/main/railway-tsp/solve.py 実行環境 OS: Windows 10 CPU: Core i7-7700HQ RAM: 16GB Python 3.6.1 11 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数値実験結果: ケース 1(人工データ) 水平線の部分が滞在箇所 time=600 付近の斜め線は駅 9 経由の移動(無駄な動き…) 計算時間: 0.23s (前処理) + 0.02s (Bit DP) 12 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数値実験結果: ケース 2(人工データ) 水平線の部分が滞在箇所 time=600 付近の斜め線は駅 7 経由の移動(無駄な動き…) 計算時間: 1.42s (前処理) + 6.61s (Bit DP) 13 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数値実験結果: ケース 3(実例) 水平線の部分が滞在箇所 time=600 付近の斜め線は駅 2 経由の移動(無駄な動き…) 計算時間: 1.89s (前処理) + 8.43s (Bit DP) 14 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Future work 無駄な動きを抑えられないか? 他の路線でも試してみる 実際の路線の時刻表データを作るのが大変 時刻表がデータのコピペ不可な PDF だったり... 1 日で回りきるのが不可能な場合の考慮 「一夜を明かす場合は野宿せずに済む駅で明かす」というよ うな制約を組み込みたい 15 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . まとめ ローカル線の全駅下車最適化問題を Bit DP で解いてみた 16 / 17
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 以上です 17 / 17