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

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

Dependabotの対応が面倒なのでRenovateを導入する

Dependabotくんはある程度の依存関係の更新を通知してくれるが、山のようにprojectを抱えているとなんとも痒いところに手が届かない。 ということで、Renovateを使ってみる。 Build software better, togetherGitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.GitHub ここからGitHub Appを入れる。 あとは、指示に従ってポチポチするだけで、超かんたんだった。 感想 自動化最高。

By Sakashita Yasunobu

nodejsのバグを見つけたのでPRを投げてみた

概要 要するに、node --testで特定のバイナリを標準出力に書くと、テストランナーが固まったり、異常終了したりするバグです。 バグ自体は既知のものだったようで、修正がされていました。 test_runner: infinite loop in FileTest#drainRawBuffer when child stdout contains FF 0F followed by large size bytes · Issue #62693 · nodejs/nodeVersion v25.9.0 (also reproduced on v24.14.1 LTS, v22.21.0 LTS, v23.4.0) Platform Darwin 25.

By Sakashita Yasunobu
青空文庫の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