8: 2016-04-02 (土) 01:30:23 osinko Deleted an attach file: prob6.png at 2016-04-01 (金) 23:35:31 |
現: 2016-05-25 (水) 21:34:25 osinko | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | TITLE:幾何分布 | ||
+ | #jsmath | ||
#jsmath | #jsmath | ||
**幾何分布 [#z10603a7] | **幾何分布 [#z10603a7] | ||
Line 13: | Line 15: | ||
この各回の確率の分布状況をグラフで表したものを幾何分布と呼んでいる | この各回の確率の分布状況をグラフで表したものを幾何分布と呼んでいる | ||
&ref(prob7.png); | &ref(prob7.png); | ||
+ | 緑色のグラフが離散的確率(\(x=1,2,3...\)つまり\(x\in \mathbb{N}\))を表し青色グラフは純粋な確率(実数に対応した確率)を表す | ||
コインの表が出ると成功として考える | コインの表が出ると成功として考える | ||
Line 18: | Line 21: | ||
2回目で初めて表が出る確率 25% |×|○| | 2回目で初めて表が出る確率 25% |×|○| | ||
3回目で初めて表が出る確率 12.5% |×|×|○| | 3回目で初めて表が出る確率 12.5% |×|×|○| | ||
- | 4回目で初めて表が出る確率 6.25% |×|×|×|○| (これは逆に考えると3回連続で裏が出る確率6.25% と言える事に留意) | + | 4回目で初めて表が出る確率 6.25% |×|×|×|○| %%(これは逆に考えると3回連続で裏が出る確率6.25% と言える事に留意)%% |
- | 緑色のグラフが離散的確率(\(x=1,2,3...\)つまり\(x\in \mathbb{N}\))を表し青色グラフは純粋な確率(実数に対応した確率)を表す | + | &ref(prob8.png); |
幾何分布の定義は以下になる | 幾何分布の定義は以下になる | ||
- | \(\begin{cases} q=(1-p) \\ { P }\left( x \right) =p{ q }^{ x-1 } \end{cases}\\ \\ P\quad 幾何分布関数\\ p\quad 命題が成功する確率\\ q\quad 命題が失敗する確率\\ x\quad 試行回数\) | + | |
+ | \(\begin{cases} q=(1-p) \\ { P }\left( x \right) =p{ q }^{ x-1 } \end{cases}\) | ||
+ | |||
+ | \(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 } \right) \cdot \left( \frac { 1 }{ 2 } \right) ^{ x-1 }\quad =\quad \frac { 1 }{ { 2 }^{ x } } \) となり | ||
Line 31: | Line 39: | ||
例えば剣を振って敵を倒すことを考える。敵に対する剣の命中率が85%だったとしよう | 例えば剣を振って敵を倒すことを考える。敵に対する剣の命中率が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 |