Skip to content

Instantly share code, notes, and snippets.

@todorok1
Created June 24, 2018 07:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save todorok1/056bcdd650cc454666a40b56f905fa07 to your computer and use it in GitHub Desktop.
Save todorok1/056bcdd650cc454666a40b56f905fa07 to your computer and use it in GitHub Desktop.
連続確率変数を乱数とカーブで
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class RandomWithCurve : MonoBehaviour {
[SerializeField]
AnimationCurve curve;
[SerializeField]
string outputFileName;
int sampleNum = 10000;
SortedDictionary<int, int> probDict = new SortedDictionary<int, int>();
void Start(){
OutputRandomResults();
}
void OutputRandomResults(){
// 処理開始のメッセージ
Debug.Log("***** 乱数からカーブを使って重み付けするテストを開始 *****");
// CSVファイルのヘッダを出力
StreamWriter sw;
FileInfo fi;
string fineName = Application.dataPath + "/Resources/Csv/RandomCurve/" + outputFileName + ".csv";
fi = new FileInfo(fineName);
sw = fi.CreateText();
sw.WriteLine("取得した値,発生回数,発生確率");
for (int i = 1; i <= sampleNum; i++){
float randomValue = Random.value;
float weightedValue = curve.Evaluate(randomValue);
int roundedValue = Mathf.RoundToInt(weightedValue * 100);
if (probDict.ContainsKey(roundedValue)){
probDict[roundedValue]++;
} else {
probDict.Add(roundedValue, 1);
}
}
foreach (KeyValuePair<int, int> pair in probDict){
System.Text.StringBuilder sb = new System.Text.StringBuilder();
float prob = 1.0f * pair.Value / 100;
sb.Append(pair.Key).Append(",").Append(pair.Value).Append(",").Append(prob);
sw.WriteLine(sb.ToString());
}
// Streamを閉じて書き込み
sw.Flush();
sw.Close();
// 処理開始のメッセージ
Debug.Log("***** 乱数からカーブを使って重み付けするテストを終了 *****");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment