確率と統計/確率の基礎2
をテンプレートにして作成
Unity学習帳2冊目
確率と統計/確率の基礎2 をテンプレートにして作成
[
トップ
] [
差分
|
バックアップ
|
リロード
] [
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
[ ]
開始行:
TITLE:確率の基礎2
**確率の基礎2
#jsmath
***case2
白ボール10個、黒ボール3個を一つの袋に入れてよく混ぜ、一...
取り出すのを終了して、袋の中の残りのボールの数を数える。...
同じように白ボール100個、黒ボール2個を一つの袋に入れてよ...
取り出すのを終了して、袋の中の残りのボールの数を数える。...
先に求める式を書いてしまうと以下になる
\(\frac { 1 }{ 3+1 } \times 10+\frac { 1 }{ 10+1 } \times...
\(\frac { 1 }{ 2+1 } \times 100+\frac { 1 }{ 100+1 } \tim...
前者が2.772個。後者の問題が33.353個となる
では、unityでシミュレーションして、この求めた値が正しいか...
シミュレーションでは試行を10万回繰り返し平均値を求めて...
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Test6 : MonoBehaviour
{
void Start()
{
print("計算で求めた値:" + (10f / (3f + 1f) + 3f ...
print("シミュレーション値:"+Sampling(10, 3, 10000...
print("計算で求めた値:" + (100f / (2f + 1f) + 2f...
print("シミュレーション値:" + Sampling(100, 2, 10...
//Rest(10, 3,true);
}
//サンプリングして平均値を返す
float Sampling(int whiteBall, int blackBall, int loop...
{
int rest = 0;
for (int i = 0; i < loopCount; i++)
{
rest += Rest(whiteBall, blackBall);
}
return (float)rest / (float)loopCount;
}
//シミュレーション。残り個数を返す
int Rest(int whiteBall, int blackBall,bool debug=false)
{
int whiteCount = 0;
int blackCount = 0;
int pointer = 0;
bool[] quary = ShuffleBall(whiteBall, blackBall);
for (int i = 0; i < quary.Length; i++)
{
pointer++;
if (quary[i] == true) whiteCount++;
else blackCount++;
if (whiteCount >= whiteBall) break;
if (blackCount >= blackBall) break;
}
//参考用(中身を視覚的に確認できる)
if (debug)
{
foreach (var item in quary)
{
print(item);
}
print(quary.Length);
print(pointer);
print(quary.Length - pointer);
}
return quary.Length - pointer;
}
//標本空間上のボールをシャッフル
bool[] ShuffleBall(int whiteBall, int blackBall)
{
bool[] query = GetBall(whiteBall, blackBall).ToAr...
//書籍「ゲームの作り方unityで覚える遊びのアルゴリ...
//念のため3回全体シャッフルしている
//(3回以下だとこのアルゴリズムでは偏りがあった)
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < query.Length - 1; i++)
{
int pointer = Random.Range(i + 1, query.L...
bool temp = query[pointer];
query[pointer] = query[i];
query[i] = temp;
}
}
return query;
}
//白玉と黒玉の標本空間を作成
IEnumerable<bool> GetBall(int whiteBall, int blackBall)
{
for (int i = 0; i < whiteBall; i++)
{
yield return true; //trueが白玉
}
for (int i = 0; i < blackBall; i++)
{
yield return false; //falseが黒玉
}
}
}
}}
<実行値の一例>
計算で求めた値:2.772727
シミュレーション値:2.76931
計算で求めた値:33.35313
シミュレーション値:33.3682
この様に値が正しい事が実際に体験し確認できた。では、これ...
#navi
終了行:
TITLE:確率の基礎2
**確率の基礎2
#jsmath
***case2
白ボール10個、黒ボール3個を一つの袋に入れてよく混ぜ、一...
取り出すのを終了して、袋の中の残りのボールの数を数える。...
同じように白ボール100個、黒ボール2個を一つの袋に入れてよ...
取り出すのを終了して、袋の中の残りのボールの数を数える。...
先に求める式を書いてしまうと以下になる
\(\frac { 1 }{ 3+1 } \times 10+\frac { 1 }{ 10+1 } \times...
\(\frac { 1 }{ 2+1 } \times 100+\frac { 1 }{ 100+1 } \tim...
前者が2.772個。後者の問題が33.353個となる
では、unityでシミュレーションして、この求めた値が正しいか...
シミュレーションでは試行を10万回繰り返し平均値を求めて...
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Test6 : MonoBehaviour
{
void Start()
{
print("計算で求めた値:" + (10f / (3f + 1f) + 3f ...
print("シミュレーション値:"+Sampling(10, 3, 10000...
print("計算で求めた値:" + (100f / (2f + 1f) + 2f...
print("シミュレーション値:" + Sampling(100, 2, 10...
//Rest(10, 3,true);
}
//サンプリングして平均値を返す
float Sampling(int whiteBall, int blackBall, int loop...
{
int rest = 0;
for (int i = 0; i < loopCount; i++)
{
rest += Rest(whiteBall, blackBall);
}
return (float)rest / (float)loopCount;
}
//シミュレーション。残り個数を返す
int Rest(int whiteBall, int blackBall,bool debug=false)
{
int whiteCount = 0;
int blackCount = 0;
int pointer = 0;
bool[] quary = ShuffleBall(whiteBall, blackBall);
for (int i = 0; i < quary.Length; i++)
{
pointer++;
if (quary[i] == true) whiteCount++;
else blackCount++;
if (whiteCount >= whiteBall) break;
if (blackCount >= blackBall) break;
}
//参考用(中身を視覚的に確認できる)
if (debug)
{
foreach (var item in quary)
{
print(item);
}
print(quary.Length);
print(pointer);
print(quary.Length - pointer);
}
return quary.Length - pointer;
}
//標本空間上のボールをシャッフル
bool[] ShuffleBall(int whiteBall, int blackBall)
{
bool[] query = GetBall(whiteBall, blackBall).ToAr...
//書籍「ゲームの作り方unityで覚える遊びのアルゴリ...
//念のため3回全体シャッフルしている
//(3回以下だとこのアルゴリズムでは偏りがあった)
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < query.Length - 1; i++)
{
int pointer = Random.Range(i + 1, query.L...
bool temp = query[pointer];
query[pointer] = query[i];
query[i] = temp;
}
}
return query;
}
//白玉と黒玉の標本空間を作成
IEnumerable<bool> GetBall(int whiteBall, int blackBall)
{
for (int i = 0; i < whiteBall; i++)
{
yield return true; //trueが白玉
}
for (int i = 0; i < blackBall; i++)
{
yield return false; //falseが黒玉
}
}
}
}}
<実行値の一例>
計算で求めた値:2.772727
シミュレーション値:2.76931
計算で求めた値:33.35313
シミュレーション値:33.3682
この様に値が正しい事が実際に体験し確認できた。では、これ...
#navi
ページ名: