7: 2016-04-01 (金) 16:52:25 osinko |
現: 2016-05-25 (水) 21:34:25 osinko |
| + | TITLE:幾何分布 |
| + | #jsmath |
| #jsmath | | #jsmath |
| **幾何分布 [#z10603a7] | | **幾何分布 [#z10603a7] |
| | | |
| 抽象的、一般的な話を最初にせずに簡単に''&font(Red){「幾何分布」};''を説明するならば | | 抽象的、一般的な話を最初にせずに簡単に''&font(Red){「幾何分布」};''を説明するならば |
- | コインを\(k\)回投げて連続で表がずっと出続ける確率は | + | コインを\(x\)回投げて連続で裏が出続け最後に表が出る確率を表している |
- | 1回目50%、2回目25%。3回目12.5%・・・と続いていくという話であり | + | |
| この各回の確率の分布状況をグラフで表したものを幾何分布と呼んでいる | | この各回の確率の分布状況をグラフで表したものを幾何分布と呼んでいる |
- | &ref(prob6.png); | + | &ref(prob7.png); |
- | 緑色のグラフが離散的確率(k=1,2,3...つまり\(k\in \mathbb{N}\))を表し青色グラフは純粋な確率(実数に対応した確率)を表す | + | 緑色のグラフが離散的確率(\(x=1,2,3...\)つまり\(x\in \mathbb{N}\))を表し青色グラフは純粋な確率(実数に対応した確率)を表す |
| + | |
| + | コインの表が出ると成功として考える |
| + | 1回目で初めて表が出る確率 50% |○| |
| + | 2回目で初めて表が出る確率 25% |×|○| |
| + | 3回目で初めて表が出る確率 12.5% |×|×|○| |
| + | 4回目で初めて表が出る確率 6.25% |×|×|×|○| %%(これは逆に考えると3回連続で裏が出る確率6.25% と言える事に留意)%% |
| + | |
| + | &ref(prob8.png); |
| | | |
| 幾何分布の定義は以下になる | | 幾何分布の定義は以下になる |
- | \(\begin{cases} q=(1-p) \\ { P }\left( k \right) =p{ q }^{ k-1 } \end{cases}\\ \\ P\quad 幾何分布関数\\ p\quad 命題が成功する確率\\ q\quad 命題が失敗する確率\\ k\quad 試行回数\) | |
| | | |
- | このケースに幾何分布の定義を利用してみると \({ P }\left( k \right) \quad =\quad \left( \frac { 1 }{ 2 } \right) \cdot \left( \frac { 1 }{ 2 } \right) ^{ k-1 }\quad =\quad \frac { 1 }{ { 2 }^{ k } } \) となり | + | \(\begin{cases} q=(1-p) \\ { P }\left( x \right) =p{ q }^{ x-1 } \end{cases}\) |
- | 出力される数列は \({ P }\left( k \right) \quad =\quad \left\{ \frac { 1 }{ 2 } ,\frac { 1 }{ 4 } ,\frac { 1 }{ 8 } ,\frac { 1 }{ 16 } ,\frac { 1 }{ 32 } ,\frac { 1 }{ 64 } ,... \right\} \) となる | + | |
| + | \(p\quad 命題が成功する確率\) |
| + | \(q\quad 命題が失敗する確率\) |
| + | \(x\quad 試行回数\) |
| + | |
| + | このケースに幾何分布の定義を利用してみると \({ P }\left( x \right) \quad =\quad \left( \frac { 1 }{ 2 } \right) \cdot \left( \frac { 1 }{ 2 } \right) ^{ x-1 }\quad =\quad \frac { 1 }{ { 2 }^{ x } } \) となり |
| + | 出力される数列は \({ P }\left( x \right) \quad =\quad \left\{ \frac { 1 }{ 2 } ,\frac { 1 }{ 4 } ,\frac { 1 }{ 8 } ,\frac { 1 }{ 16 } ,\frac { 1 }{ 32 } ,\frac { 1 }{ 64 } ,... \right\} \) となる |
| | | |
| 話を少し変えてみよう | | 話を少し変えてみよう |
- | 例えば剣を振って敵を倒すことを考える。敵に対する剣の命中率が80%だったとしよう | + | 例えば剣を振って敵を倒すことを考える。敵に対する剣の命中率が85%だったとしよう |
| | | |
- | <TODO> | + | この場合、パラメータは以下となり |
| + | \(p=0.85=\frac { 17 }{ 20 } \quad ,\quad q=0.15=\frac { 3 }{ 20 }\) |
| | | |
- | これは数学的帰納の視点で見ると、そのまま等比数列の定義 | + | 式は以下となる |
- | \({ a }_{ n }={ a }_{ 1 }{ r }^{ n-1 }\) と性質的に同一であることに気が付く必要がある。つまり無限等比級数の収束、極限が使えるという事だ | + | \( { P }\left( x \right) =\left( \frac { 17 }{ 20 } \right) \cdot \left( \frac { 3 }{ 20 } \right) ^{ x-1 }\) |
| | | |
- | **クーポン収集問題 [#d8522ef8] | + | 算出される各確率は以下となる |
| + | \({ P }\left( x \right) =\left\{ \frac { 17 }{ 20 } ,\frac { 51 }{ 400 } ,\frac { 153 }{ 8000 } ,\frac { 459 }{ 160000 } ,\cdots \right\} =\left\{ 0.85\quad ,\quad 0.1275\quad ,\quad 0.019125\quad ,\quad 0.00286875\quad ,\quad \cdots \right\} \) |
| | | |
- | 資料: | + | 剣が敵にヒットすると成功として考える |
- | [[クーポンコレクター問題とは:http://dic.nicovideo.jp/a/%E3%82%AF%E3%83%BC%E3%83%9D%E3%83%B3%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%BF%E3%83%BC%E5%95%8F%E9%A1%8C]] | + | 1回目で初めて敵にヒットする確率 85% |○| |
- | [[カイ二乗分布:https://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%A4%E4%BA%8C%E4%B9%97%E5%88%86%E5%B8%83]] | + | 2回目で初めて敵にヒットする確率 12.75% |×|○| |
| + | 3回目で初めて敵にヒットする確率 1.9125% |×|×|○| |
| + | 4回目で初めて敵にヒットする確率 0.286875% |×|×|×|○| %%(これは逆に考えると3回連続で攻撃が外れる確率は0.2% と言える事に留意)%% |
| + | |
| + | そして、話をこう変えてみる |
| + | 例えば剣を振って敵を倒すことを考える。敵に対する剣の命中率が85%だったとしよう |
| + | ''&font(Red){剣が敵に当たらない場合を成功として考えると&br;};'' |
| + | |
| + | この場合、パラメータは以下となり |
| + | \(p=0.15=\frac { 3 }{ 20 } \quad ,\quad q=0.85=\frac { 17 }{ 20 } \) |
| + | |
| + | 式は以下となる |
| + | \({ P }\left( x \right) =\left( \frac { 3 }{ 20 } \right) \cdot \left( \frac { 17 }{ 20 } \right) ^{ x-1 }\) |
| + | |
| + | 算出される各確率は以下となる |
| + | \({ P }\left( x \right) =\left\{ \frac { 3 }{ 20 } ,\frac { 51 }{ 400 } ,\frac { 867 }{ 8000 } ,\frac { 14739 }{ 160000 } ,\frac { 250563 }{ 3200000 } ,\cdots \right\} =\left\{ 0.15\quad ,\quad 0.1275\quad ,\quad 0.108375\quad ,\quad 0.09211875\quad ,\quad 0.078300937\quad ,\quad \cdots \right\} \) |
| + | |
| + | 剣が敵に当たらない場合を成功として考えると |
| + | 1回目で初めて敵に当たらなかった確率 15% |○| |
| + | 2回目で初めて敵に当たらなかった確率 12.75% |×|○| |
| + | 3回目で初めて敵に当たらなかった確率 10.8375% |×|×|○| |
| + | 4回目で初めて敵に当たらなかった確率 9.211875% |×|×|×|○| |
| + | 5回目で初めて敵に当たらなかった確率 7.8300937% |×|×|×|×|○| %%(&font(Red){??これは逆に考えると4回連続で攻撃がヒットする確率は7.8%(コンボが決まる確率)と言える事に留意};)%% |
| + | |
| + | では剣の敵に対する命中率を90%に変えて計算してみるとどうなるだろうか |
| + | |
| + | \(p=0.1=\frac { 1 }{ 10 } \quad ,\quad q=0.9=\frac { 9 }{ 10 } \quad ,\quad \quad { P }\left( x \right) =\left( \frac { 1 }{ 10 } \right) \cdot \left( \frac { 9 }{ 10 } \right) ^{ x-1 }\\ \\ { P }\left( x \right) =\left\{ \frac { 1 }{ 10 } ,\frac { 9 }{ 100 } ,\frac { 81 }{ 1000 } ,\frac { 729 }{ 10000 } ,\frac { 6561 }{ 100000 } ,\cdots \right\} =\left\{ 0.1\quad ,\quad 0.09\quad ,\quad 0.081\quad ,\quad 0.0729\quad ,\quad 0.06561\quad ,\quad \cdots \right\} \) |
| + | |
| + | 剣が敵に当たらない場合を成功として考えると |
| + | 1回目で初めて敵に当たらなかった確率 10% |○| |
| + | 2回目で初めて敵に当たらなかった確率 9% |×|○| |
| + | 3回目で初めて敵に当たらなかった確率 8.1% |×|×|○| |
| + | 4回目で初めて敵に当たらなかった確率 7.29% |×|×|×|○| |
| + | 5回目で初めて敵に当たらなかった確率 6.561% |×|×|×|×|○| %%(&font(Red){??これは逆に考えると4回連続で攻撃がヒットする確率は6.5%(コンボが決まる確率)と言える事に留意};)%% |
| + | |
| + | これをグラフにすると武器の性能を視覚的に確認できる |
| + | |
| + | &ref(prob9.png); |
| + | |
| + | グラフにすると対象の定量的な性質が視覚的に確認できる。試行の8回目で価値観の逆転が起きているのが分かる |
| + | 実際にunityでこれを確認してみる |
| + | |
| + | #code(csharp){{ |
| + | using UnityEngine; |
| + | using System.Collections; |
| + | |
| + | public class sc4 : MonoBehaviour |
| + | { |
| + | void Start() |
| + | { |
| + | int sampling = 1000000; //サンプリング回数 |
| + | float success = 0.9f; //成功確率 |
| + | int x = 5; //x回目で初めて成功する |
| + | |
| + | int total = 0; |
| + | float result = 0; |
| + | for (int i = 0; i < sampling; i++) |
| + | { |
| + | if( TrialAttack(success) ==x)total++; |
| + | } |
| + | result = (float)total / (float)sampling; //実験から確率の算出 |
| + | print(result); |
| + | } |
| | | |
- | ***メモ [#e0c48aaf] | + | //攻撃試行。無限回数攻撃。攻撃失敗の時点で、それまでの成功回数を返す |
- | マイクロソフトが2007年に残しているゲーム用のC#日本語資料。有用な情報なので一度目を通しておくことをお勧めします | + | int TrialAttack(float successs) |
| + | { |
| + | int i = 0; |
| + | while (true) |
| + | { |
| + | i++; |
| + | if (Attack(successs) == false) return i; |
| + | } |
| + | } |
| | | |
- | 資料:[[C#におけるデーター構造とオーダーに関する資料:http://xbox.create.msdn.com/ja-JP/education/catalog/article/data_structures]] | + | //攻撃判定。成功確率以内なら真を返す |
| + | public bool Attack(float successs) |
| + | { |
| + | if (Random.value < successs) return true; |
| + | return false; |
| + | } |
| + | } |
| + | }} |
| + | この結果を各値を変更しながら確かめると求めたとおりの答えが得られているのが確認できる |
| | | |
- | -Big O (ランダウの漸近記法) とC#のジェネリックについて理解 | + | #navi |