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
Dynamic Vehicle Routing のシミュレーションを Streamlitで作ってみた
Search
NearMeの技術発表資料です
PRO
March 15, 2024
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dynamic Vehicle Routing のシミュレーションを Streamlitで作ってみた
NearMeの技術発表資料です
PRO
March 15, 2024
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
PosthogのA/Bテスト機能の紹介
nearme_tech
PRO
1
21
AIフレンドリーなプロダクトに向けて
nearme_tech
PRO
1
50
初めてのLean言語
nearme_tech
PRO
0
76
Apache Airflow Workflow orchestration without turning cron into spaghetti
nearme_tech
PRO
1
21
実務で役立つ幾何学 ボロノイ図の基礎から グラフ・ネットワーク応用まで
nearme_tech
PRO
1
59
SQL/ID抽出タスクから考える 実践的なハルシネーション対策
nearme_tech
PRO
1
67
OpenCode & Local LLM
nearme_tech
PRO
0
200
OpenCode Introduction
nearme_tech
PRO
0
59
【Browser Automation × AI】 Stagehandを試してみよう
nearme_tech
PRO
0
160
Other Decks in Technology
See All in Technology
Power Automateアップデート情報
miyakemito
0
150
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
270
OPENLOGI Company Profile for engineer
hr01
1
75k
Vポイント分析基盤におけるデータモデリング20年史
taromatsui_cccmkhd
4
750
システム監視入門
grimoh
1
260
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
2
290
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
450
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
520
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
190
穢れた技術選定について
watany
19
6.2k
MCPをつなげて作る組織横断のAIエージェント基盤
tsubakimoto_s
0
130
データエンジニアリングとドメイン駆動設計
masuda220
PRO
14
2.6k
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
350
How to Talk to Developers About Accessibility
jct
2
430
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
360
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Paper Plane (Part 1)
katiecoart
PRO
1
9.8k
Navigating Team Friction
lara
192
16k
Facilitating Awesome Meetings
lara
57
7k
A Soul's Torment
seathinner
6
3.1k
Utilizing Notion as your number one productivity tool
mfonobong
4
450
First, design no harm
axbom
PRO
2
1.2k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Docker and Python
trallard
47
4k
Transcript
0 Dynamic Vehicle Routing のシミュレーションを Streamlitで作ってみた 2024-03-15 第82回NearMe技術勉強会 Kenji Hosoda
1 • ⾃動運転キャッチアップしたいな ◦ 「Autoware :⾃動運転ソフトウェア⼊⾨」を読む ◦ 要素技術多すぎて、勉強会ネタとしてはまとめきれない。。 • 要素技術の⼀つであるROSにフォーカスするか
• ROSで複数⾞両のルーティングのシミュレーションやってるのないかな ◦ あった ▪ https://github.com/shineyruan/vehicle-routing-ros2?tab=readme-ov-file ◦ 元のPython実装もあった ▪ https://github.com/lb-robotics/python-vehicle-routing ◦ 元の論⽂もあった ▪ “Dynamic Vehicle Routing for Robotic Systems”(Bullo et al., 2011) ▪ https://stanfordasl.github.io/wp-content/papercite-data/pdf/Bullo.Fraz zoli.ea.IEEEProc11.pdf • ⾯⽩いのでやっぱりDynamic Vehicle Routingにフォーカス • こういうシミュレーション基盤も作りたかったな ◦ Streamlitでマルチスレッド処理できるかな? ◦ https://zenn.dev/ohtaman/articles/streamlit_start_stop ◦ いけそうなので作ってみるか (勉強会ネタのチョイスの紆余曲折)
2 Dynamic Vehicle Routingについて • 動的に変わる環境 ◦ 確率的に出現する注⽂/タスク • 複数⾞両/ロボットによるアサイン
◦ ⾃律的な最適化 ◦ 協調的なコントロール • ポリシーの違いによってパフォーマンスは⼤きく異なる • 協調的なコントロールは必須 • 注⽂の確率分布に応じて⾞両をバランスよく配置するこ とも重要 • 注⽂数/⾞両数のバランスの違いによってもパフォーマン スは異なる ◦ 注⽂数が多い時は、TSPが有効 https://github.com/lb-robotics/python-vehicle-routing
3 シミュレータ作ってみた こちらからダウンロードして実⾏ https://gist.github.com/kenji4569/8da401b4d1bbfe2b0b6be41ac6d3d1a2 以下のコマンドを実行 pip install streamlit numpy scipy
pandas altair readerwriterlock streamlit run app.py (wandb利用の場合は以下も実行 ) wandb login pip install wandb ブラウザでStreamlitアプリが立ち上がったら “Start”ボタンを押下
4 マルチスレッドについて class Vehicle(threading.Thread): def __init__(self, events: Events, location: Location,
**kwargs): super().__init__(**kwargs) self.done = threading.Event() ... def run(self): while not self.done.wait(0): time.sleep(TIME_STEP) self._move() class Timer(threading.Thread): def __init__(self, events: Events, **kwargs): super().__init__(**kwargs) self.done = threading.Event() ... def run(self): while not self.done.wait(0): time.sleep(TIME_STEP) self.elapsed_time += TIME_STEP • Timerのスレッド • Vehicle x nのスレッド 各スレッドが並列動く (Streamlitではグローバルにキャッシュでスレッドのオブジェクトを保持する必要あり) @st.cache_resource def get_root_manager(): return RootManager()
5 マルチスレッドの注意点 • ロック処理をしないとどうなるか def _move(self): diff = self.target_location -
self.location diff_norm = np.linalg.norm(diff) if diff_norm < self.pickup_threshold: self.location = self.target_location self._pickup_demand() else: movement = diff * (self.speed / diff_norm) self.location = self.location + TIME_STEP * movement def _pickup_demand(self): if not self.target_demand: return target_demand = self.target_demand with self.lock.gen_wlock(): if not target_demand.picked_up: target_demand.picked_up = True self.events.append( Event( "pickup_demand", {"demand_uid": target_demand.uid, "vehicle_uid": self.uid}, ) ) ここでロック ロックしないとこの値が 書き変わる可能性がある ピックアップイベントが 複数回記録される可能性がある 距離が近くなったら ピックアップ
6 イベントの記録 • グローバルなイベントを記録 ◦ (ROSのrosbagに倣った) • イベントを集計 • 時系列のメトリクスを算出
◦ Streamlitで表⽰ • WandBに連携 ◦ strategy毎の⽐較がしやすい ◦ 右図が⼀例
7 Thank you