雨の中、歩くべきか走るべきか

Share

傘を忘れた日の永遠の問い、歩くか、走るか、いやいっそ雨宿りをするのか。物理で決着をつける。


モデル

人体を直方体で近似。上面積 $A_{\text{top}}$(頭・肩)、前面積 $A_{\text{front}}$(胸・顔)。雨は鉛直一様(落下速度 $v_r$、数密度 $n$)、距離 $d$ を速度 $v$ で直線移動する。

人体の直方体モデルは、上から見た水平断面が $A_{\text{top}}$、正面から見た鉛直断面が $A_{\text{front}}$ の二面で構成される。移動方向は水平、雨は鉛直に降る。

受ける雨滴数は、上面が $n v_r A_{\text{top}} \cdot d/v$(滞在時間比例)、前面が $n A_{\text{front}} d$(速度非依存)。無次元化 $u = v/v_r$, $\rho = A_{\text{front}}/A_{\text{top}}$ で、

$$ \boxed{\hat{W}(u) = \frac{1}{u} + \rho} $$

$\hat{W}'' = 2u^{-3} > 0$(狭義凸)より恩恵は単調逓減、下限 $\rho$ に漸近。二速度間の削減率 $\Delta_\% = (u_2 - u_1)/[u_2(1 + \rho u_1)]$ は距離にも雨量にも依存しない普遍量。$\rho \approx 2$ で歩行→全力疾走($u: 0.2 \to 1.1$)は約59%削減。

向かい風 $w = v_w/v_r$ を加えると $\hat{W}(u) = (1 + \rho w)/u + \rho$。双曲線構造は不変、向かい風で速度増加の恩恵が拡大する。


雨宿り vs ダッシュ

雨が時間変動 $n(t)$ する場合、時刻 $T$ まで屋根の下で待ち $v_{\max}$ で走ると、移動時間 $\tau = d/v_{\max}$ のスケールで $n$ がほぼ一定なら $W(T) \propto n(T)$。指数減衰 $n = n_0 e^{-\mu t}$ で半減期 $k$ 回分待つと $1 - 2^{-k}$ 削減。半減期1回分(50%削減)が全力疾走(59%)とほぼ等価。

最適制御による一般化

状態 $x$(位置)、制御 $v(t) \in [0, v_{\max}]$、自由終端 $T$ の最適制御問題:

$$ \min_{v(\cdot)} \int_0^T n(t)\bigl[v_r A_{\text{top}} + A_{\text{front}} v(t)\bigr] dt, \quad \dot{x} = v,\; x(0)=0,\; x(T)=d $$

ハミルトニアンが $v$ にアフィン、共役変数 $p = \text{const}$ より、スイッチング関数の符号変化は高々1回。最適戦略はバンバン制御($t^*$ まで停止→全力走行)に限られ、最適出発時刻は

$$ \boxed{\frac{n(t^*)}{n(t^* + d/v_{\max})} = \frac{1 + \rho\,u_{\max}}{\rho\,u_{\max}}} $$

で決まる($\rho=2, u_{\max}=0.6$ で閾値 $\approx 1.83$)。指数減衰では臨界減衰率が閉じた形で得られ、それより速い減衰なら待ち、遅ければ即走る。

不確実性の下で

$W(T) = n(T) \cdot k$ が $n$ に線形なので確実性等価が厳密に成立。$n(t)$ を条件付き期待値 $\mathbb{E}[n(t) \mid \mathcal{F}_0]$ に置き換えて確定的解析をそのまま適用すればよい。$\mathbb{E}[n(T)] \geq n(0)$(マルチンゲール以上)なら待つ期待利得はゼロ以下。情報がなければ走れ。


結論

$$ \boxed{\hat{W}(u) = \frac{1}{u} + \rho} $$

  1. 一定の雨:走れ。削減率は距離・雨量に依存しない普遍量。
  2. 弱まる雨+屋根あり:半減期1回分の雨宿り $\approx$ 全力疾走。急速に弱まるなら待て。
  3. 未来不明:$W$ の線形性から確実性等価成立。弱まる根拠がなければ走れ。
傘を忘れたら、雨が弱まる根拠があるなら半減期1回分だけ待て。根拠がなければ迷わず走れ。

Read more

青空文庫のParser

青空文庫のParser

青空文庫のParserを作ってます。 GitHub - P4suta/aozora: Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks.Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks. - P4suta/aozoraGitHubP4suta Rustで作ってますが、配布物はcargoのほかにnpm/pypiでも入手できます Documentation * Playground — try it in

By Sakashita Yasunobu

イケイケなWinスクショアプリを作りました

パソコンのスクショってなんというか、地味というか、撮ってそのままだと何とものっぺりしていますよね。 特にWindowsだとMacっぽい丸っこい感じとかもなく、無骨だなあと。 ということで、それっぽくおしゃれな背景や角丸を付けておしゃれに撮影をしてくれるスクショアプリを作りました。 GitHubで公開しています。 GitHub - P4suta/Snaply: Snaply — a modern, clean-architecture Windows screenshot tool (WinUI 3 / .NET 10)Snaply — a modern, clean-architecture Windows screenshot tool (WinUI 3 / .NET 10) - P4suta/SnaplyGitHubP4suta ウィンドウ・領域選択・スクリーンのキャプチャができます。 タッチスクリーンなどにも対応しているはずです。 撮影をすると、クリップボードにコピーされ、フォルダーへの保存もされます。

By Sakashita Yasunobu
Find My Files

Find My Files

Windowsにおける爆速ファイル検索アプリの定番といえば、Everythingです。 voidtoolswebhost2 その高速さの理由は、NTFSの仕組みをうまく活用していることにあります。Windowsで一般的に使われているNTFSには、ファイル情報を管理するマスターファイルテーブル(MFT)と、ファイルシステムの変更履歴を記録するUSN Journalがあります。Everythingはこれらを利用することで、初回に高速にファイル一覧を構築し、その後はUSN Journalを監視してリアルタイムにインデックスを更新しています。そのため、数百万ファイル規模の環境でも非常に高速な検索を実現しています。 もちろん、単純にファイル名やパスを保持するだけでは、大量のメモリを消費してしまいます。また、数百万件ものファイルから一瞬で目的のものを見つけるためには、メモリ効率の高いデータ構造や高速な検索アルゴリズムなど、さまざまな工夫が必要になります。 このように、Everythingは見た目こそシンプルですが、中身はかなり高度なことをやっているソフトウェアです。 なお、Everyth

By Sakashita Yasunobu