1: 2016-03-18 (金) 23:48:59 osinko |
2: 2016-03-19 (土) 00:28:54 osinko |
| メモ | | メモ |
| + | |
| + | #jsmath |
| + | ***期待値の和 [#n9c7e98e] |
| + | 資料:「数学ガール 乱択アルゴリズム P155線型性」 |
| + | |
| + | 期待値の線形性の確認 |
| + | &font(Navy,130%){すごろくゲームを作るとしてサイコロを各々のプレーヤーが10回振った程度でゴールする人が出てくるゲームにしたい}; |
| + | この計算に期待値を利用する |
| + | |
| + | 6面ダイスを一回振った時の期待値は |
| + | \(\displaystyle E\left( { X }_{ 1 } \right) \quad =\quad \sum _{ k=1 }^{ 6 }{ k } \cdot \frac { 1 }{ 6 } \quad =\quad \frac { 1+2+3+4+5+6 }{ 6 } \quad =\quad 3.5\) |
| + | となる。これを10回繰り返して試行するので10回加算すれば期待値の和として答えが出てくる |
| + | |
| + | \(E\left[ X \right] \quad =\quad E\left( { X }_{ 1 } \right) +E\left( { X }_{ 2 } \right) +E\left( { X }_{ 3 } \right) +\cdots +E\left( { X }_{ 9 } \right) +E\left( { X }_{ 10 } \right) \) |
| + | |
| + | \(3.5\times 10=35\) |
| + | |
| + | unityで実際に検証してみる |
| + | #code(csharp){{ |
| + | using UnityEngine; |
| + | using System.Collections; |
| + | |
| + | public class SC2 : MonoBehaviour |
| + | { |
| + | |
| + | // Use this for initialization |
| + | void Start() |
| + | { |
| + | Sampling(6, 100000); |
| + | } |
| + | |
| + | private void Sampling(int dice, int sampling) |
| + | { |
| + | int length = 10; |
| + | int total = 0; |
| + | |
| + | for (int j = 0; j < sampling; j++) |
| + | { |
| + | int forward = 0; |
| + | for (int i = 0; i < length; i++) |
| + | { |
| + | forward += TossDice(dice); |
| + | } |
| + | total += forward; |
| + | } |
| + | print((float)total / (float)sampling); |
| + | } |
| + | |
| + | public int TossDice(int dice) |
| + | { |
| + | return Random.Range(1, dice + 1); |
| + | } |
| + | } |
| + | }} |
| + | |
| + | ランダム関数で6面ダイスを10回振り合計する。それを10万回サンプリングし平均を求める |
| + | 結果、計算通り\(35\)周辺の値に収束する。以上により「''すごろくマップの35マス目にゴールを設定すれば希望通りのゲームバランスになる''」 |