車輪の再発明(しゃりんのさいはつめい、英: reinventing the wheel)は、車輪を題材にした慣用句であり、世界中で使われている。「広く受け入れられ確立した技術や解決法を無視して、同様のものを再び一から作ってしまうこと」を意味する。
(wikipediaより)

人が作ったプログラムを使うのが嫌いなイッシーは、車輪どころかのこぎりやネジの再発明をするのが大好きです。
よくそのへんの車輪をばらして、自分用に再構築しながら道具も自前で用意します。その過程で、砲弾並みの破壊力をもった金槌とか、四角い車輪を作ったりしてます。でもその過程でいろいろ詳しくなれるので、これはこれで良いんじゃないかと思います。


そんなイッシーは、趣味にしているマジックでも車輪の再発明が大好きです。
すでに論じつくされているマナカーブ理論とかも、自分で考えます。
歴史をたどれば、すでに出ている結論も多いはずですが、英語を勉強する気がないこともあり、ぜんぶ自分で考えます。
(そもそも、昔はマナカーブ理論すら知らずに、自分で期待値計算していたしなぁ)


マナカーブの基礎は、期待値計算から始まります。
カードの引きすぎ、引かなすぎは等しく事故であると考えると、期待値をとることになります。
つまり、こうなります。

Xターン目にN枚引きたいカードをデッキに入れるべき枚数
=(X+6)枚カードを引いたときに、期待値でN枚引けるカード枚数
=デッキ総枚数×N÷(X+6)

この計算、いつもきりがよければ問題ないのですが、
やってみると、8.57とか、端数が結構でてきます。
では、この端数はどうすれば良いか?
・・・イッシーは気分で切り上げ・切捨てをやってました。

しかし、ボトムデッカーさんから、
(デッキ総枚数+1)×N÷(X+6)を切り捨て
という式をおそわりました。

イッシーは、この式の意味が最初よくわからなかったのですが、
よく調べてみたらなんとなく わかりました。
同じように意味がわかっていない人は多い気がするので、
今回はこの式をばらしてみた時の話を書きます。
(前置き長いな・・・)


この式は、分解すると、

デッキに入れるべき枚数
=デッキ総枚数×N÷(X+6)+端数調整 を切り捨て

端数調整
=N÷(X+6)
=ドローしたい割合

となります。

基本は通常の期待値計算ですが、
後ろに端数調整用の計算が入っているわけですね。

この端数調整用の計算は、こんな感じに働きます。

ドローしたい割合が50%=四捨五入
ドローしたい割合が20%=八捨二入
ドローしたい割合が10%=九捨一入

その働きがどうして正しいのかまではイッシーの算術能力では説明できないのですが、
結論がそうなるのはわかる気がします。

・ドローしたい割合が多い場合は、より切り上げ側に近づけるべき。
・引きたいカードではなく、関係ないカードを引く枚数から期待値計算しても同じ結果になる必要がある
 =切り上げ基準をグラフにした場合、傾きが一定の一次関数になる。

あと、この端数処理をして端数が発生しない場合は、切り上げても切り下げても、事故率は同じですね。
どうせ同じならスロットは圧縮したほうがよいので、切捨てにするわけですね。

ふーむなるほど。納得がいった。
実用的には、だいたい切捨てて計算すればOKですね。

あと、ドローしたい割合=100%のときは式がバグりますが、
この式は切捨て・切り上げの判断が必要な際に使う式なので、
100%の場合は、普通に期待値どおり100%入れればOKですね。

コメント

イッシー
2011年5月16日18:08

もう少し噛み砕いて書き足そううかと思っていたのですが、
特に要望もなさそうだし、これは編集中のままで良いかな?

RE.
2011年5月17日13:32

噛み砕いてみないと要望があるかどうかも良くわからないに一票。