75 lines
1.8 KiB
C#
75 lines
1.8 KiB
C#
using EscapeRoomEngine.Engine.Runtime.Utilities;
|
|
using JetBrains.Annotations;
|
|
using MathNet.Numerics.Distributions;
|
|
using NaughtyAttributes;
|
|
using UnityEngine;
|
|
|
|
namespace Test_Assets
|
|
{
|
|
public class ProbabilityTest : MonoBehaviour
|
|
{
|
|
public NormalDistribution distribution = NormalDistribution.Standard;
|
|
public int steps = 24;
|
|
public int n = 1000000;
|
|
public double sample;
|
|
|
|
[Button]
|
|
[UsedImplicitly]
|
|
public void ShowDistribution()
|
|
{
|
|
var samples = Samples();
|
|
|
|
var step = 6f / steps;
|
|
for (var i = -3f; i < 3f; i += step)
|
|
{
|
|
var count = 0;
|
|
for (var j = 0; j < n; j++)
|
|
{
|
|
var sample = samples[j];
|
|
if (sample >= i && sample < i + step)
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
|
|
var row = "";
|
|
for (var j = 0; j < 1000f*count/n; j++)
|
|
{
|
|
row += "*";
|
|
}
|
|
Debug.Log(row);
|
|
}
|
|
}
|
|
|
|
[Button]
|
|
[UsedImplicitly]
|
|
public void CalculateMean()
|
|
{
|
|
Debug.Log(Probability.Mean(Samples()));
|
|
}
|
|
|
|
[Button]
|
|
[UsedImplicitly]
|
|
public void CalculateStandardDeviation()
|
|
{
|
|
Debug.Log(Probability.StandardDeviation(Samples()));
|
|
}
|
|
|
|
[Button]
|
|
[UsedImplicitly]
|
|
public void SamplePercentile()
|
|
{
|
|
Debug.Log(distribution.Cumulative(sample));
|
|
}
|
|
|
|
private double[] Samples()
|
|
{
|
|
var samples = new double[n];
|
|
for (var i = 0; i < n; i++)
|
|
{
|
|
samples[i] = distribution.Sample();
|
|
}
|
|
return samples;
|
|
}
|
|
}
|
|
} |