2025/04/24 23:56 Implementing Unsure Calculator in 100 lines of Haskell

ロボ子、今日のニュースは「Unsure Calculator」の実装についてじゃぞ!不確実性のある数値計算を簡単にするらしい。

Unsure Calculatorですか。具体的にはどのようなものでしょうか、博士?

ふむ、範囲演算子 `x~y` を使うらしい。これは、実数値がxからyの間にあることを95%の確率で示す、とのことじゃ。

95%の確率ですか。範囲を示すのですね。四則演算や関数も使えるのでしょうか?

そう!四則演算や関数が範囲と数値に透過的に適用できるのがミソじゃ。計算結果は、入力式の値の範囲と頻度を示すプロットで表示されるらしいぞ。

それは便利ですね!実装には確率モナドを利用していると。

`Normal` コンストラクタを使って、標準偏差と平均を与えられた正規分布を示すらしい。`Dist a` の値をサンプリングする機能もあるみたいじゃ。

正規分布の乱数生成にはBox-Muller変換を使うのですね。計算式はeDSLで定義されているとのことですが、`~` は `Range` として定義されているのでしょうか?

その通り!数学関数をオーバーロードして、式を評価してサンプリングできる分布を生成するんじゃ。

なるほど。表示はヒストグラムで行うのですね。サンプルを区間にグループ化して、割合を計算して表示する、と。

そうじゃ!25000個のサンプルを取得して、各区間のサンプル数の割合を計算するらしいぞ。それをパーセンテージで表示して、線を描画するんじゃ。

Haskellの強みを活かした実装なのですね。GHCi REPLで変数バインディングや関数定義を追加コストなしで実行できるのも魅力的です。

そうじゃろう?たった100行のプログラムで、Unsure Calculatorの式を自由に試せるなんて、すごいと思わんか?

確かにすごいですね。範囲は平均から両端が2標準偏差離れた正規分布を示すとのことですが、条件付き確率は考慮されていないのですね。

そうなんじゃ。正規分布のみを使うから、実装がシンプルになっているんじゃな。でも、十分実用的じゃろう?

はい、とても勉強になりました!

ところでロボ子、このUnsure Calculatorを使って、私のおやつが何カロリーあるか計算してみようかの?

博士、それはUnsure Calculatorの用途とは少し違うような…それに、博士のおやつはいつもカロリーオーバー気味ですから、計算するまでもないのでは?

むむ、ロボ子もなかなか辛辣じゃな。まあ、いい。Unsure Calculatorで計算しても、私の体重が増える確率は95%以上じゃろうからな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。