á á¨ááł áĽáľááľ ááľáĽ áĽááá áá á ááľá ááá á áááá° áá°á áŤáľáááááłáᥠá ááľááľ ááá
á¨áŤáą á¨áá áŤáá°á á ááᣠáĽá á¨áĽáą áá á áľáአá˛áľá°á.Random á áᢠá á ááľ áá
áľ, á á ááą ááŽáááśá˝ áá, áááąá á á°áᨠááááľ áá°áŠ áĽáá°áá˝á (ááá áĽááłá áĽáŠá áľáááľ áááŤá¸á áááŁá) á¨áá áľááľ á áááťáá.
á¨á፠áá° ááááŽá˝ á áááĄá - áá° áľáááľ áá¸ááአá á áá á á áááá° áááá á˝ááŽá˝ áŤáľá°áŤáááᢠá áá á¨á áá á áááá ááá¨áľ áĽá áľáá˝ áĽááľ áááŤááľ áá°áá-âá áľááâ ááá ááááą á¨áá˝á RNGs áĽáá´áľ áĽáá°áá áĽá á¨áľááá ááá¨áĽ áĽááłááĽá ááľáááᢠá á°á¨ááŞá ᣠáľá âáááááłá¸áâ á¨ááአá áľá°áŤá¨áśá˝á á¨á ááľ áá á áá á°ááťáá - áĽááá°á áá¤áśáš á¨á°ááášáľ áá áĽáá´áľ áĽáá°ááááአáááá
áĽáááá á˘
á áá á¨áľáá ááľ ááŽááŤá ááá RNG á áĽáááą RNG ááá˘
á¨áááá° ááĽá ááááŤáá˝á ááľááá á¨ááŤáá á¨áá áá˛áŤáá áá° âáá¨áŤâ ááá áááá áá˝ááá˘
á¨áááá° ááĽáŽá˝ (RN) á ááłááľ á¨áááá° (á¨á°áá°ááá) áá°áľáᣠá¨á˘ááľáŽá áááá á áá áá á¨ááá አá¨ááĽáŽá˝ á á°á á°á¨á°á áá¸áᢠáŤá áááľ áá á á°á á°á¨á°á áá á¨áĽáą áááá˝ á á¨áľááá á¨ááłáĽ á á áŤáá°ááá - áááľá¤ áĽá á°á áĽá áááááľ á¨áá¸áá.
á¨áááá° ááĽáŠá á¨áááĽá¨á á¨áááá° ááĽá áááŹá°á (RNG) ááŁááᢠááá ááá á¨ááááŞáŤ á°á¨á áááľáá ᣠáá á¨ááľá-ááłáĽ áá° ááááľ á¨á°áááłááľá ᣠá áĽáááą áĽáá°áá á áááľ á á°á á°á¨á°á áááá á á¨áśááľáá áľáá° ááá áá°áá á á áŁá ááá á áá°ááá˘
ááááŤáą á áááá á¨áááł á¤áááľáŽáááľ ááľáĽ á°ááłáłá áľáááľ áŁáááአááᢠáŤááąáŁ á¨áááá° ááĽáŽá˝ á áááá° áááá¸á áŤáááᣠáĽá áááŹá°áŤá¸á áá° á°áŤ á°ááŁá áá° ááá˝ á¨á°áááš ááááŽá˝ ááá¨áŤáᢠá IT ááľá ááľáĽ áááľ áአáŁáááŤáá˝ áá á¨áŁáľ á˝áá áá (áááłá ᣠááľá áŤ) ᣠáá áááá˝ áá á áá á°ááŁáááľ áŤáá áááľá á áá˘
ááá áĽááłá á áĽáááľ á¨áááá° ááĽáŽá˝ áŁáááá ᣠáá á á°áťá áá á ááĽááą á áἠ- á¨áá¸áľ-áŤáá°á ááĽáŽá˝ (PRN) á¨ááŁáᾠᣠá¨ááááľ áľáá° ááá ááťá á áľááá ááᢠá áá ááłá áá áŤáá áľáá° ááá pseudorandom ááĽá áááŹá°á (PRNG) ááŁááá˘
PRNG áááá á áĽá á ááŤáŽá˝ á á ááá áá á¨áá¨á°áá áááá á°á á áá áááááĄ
- á¨á
áľá፠á
áá á áľáááááľ.
PRNG á¨á˘ááľáŽá ááá á¨áááᣠáľááá á¨áá ááá á ááľ á¨ááááŞáŤ áááł áá°á áľ á áá áľá˘ áĽáą áĽáá° ááĽá (ááá áŹáá°á) á¨á°ááḠá˛áá áá (á¨áááá° áá) ááŁááᢠáĽááá áá á¨ááááŁá áŞáŤá á°ááľ ááŁáŞ ááá á¨áľáááľ áá á ááá á áá áĽáá° áá áĽá á áá ááááá˘
- á
á°á á°á¨á°á áĽáá°áá ááŤáŁáľ.
PRNG áá á áá á¨áááľá ááᣠáľááá á á áᏠáá áľ á¨á°áááá áá á¨áá°ááąá á¨ááĽáŽá˝ á á°á á°á¨á°á á áአáááł áááľááᢠáá áááľ á á°ááłáłáŠ áá (á á°ááŤáŠ áááὠᣠá á°ááŤáŠ ááŽááŤáὠᣠá á°ááŤáŠ ááłáŞáŤáá˝) á¨á°ááᨠá¨á°áᨠPRNG á°ááłáłá á á°á á°á¨á°á áááĽáŤáá˘
áĽáá˛áá ᨠPRNG áŁá
áŞá á¨áááá˝ á¨ááŽáŁá˘áᲠáľáááľ ááá
á ááŚáľ - áá ááĽáŽá˝ áĽáá°ááŤááá áĽá á¨á¨áľáá ááľá ááᢠáĽááá áá áá
áá°á á áľáááľ ááá áἠá¨áá áľáááľ ááá˘
áá°á á áľáááľ (ááŤ) áĽá áἠáľáááľ (á áľá°áá)
24 ááá áŤáá ááľáá ááľ á áá áĽáá áᢠá¨áá¨ááŠáľ á ááľ á¨ááááľ áĽáľá á¨1/24 áá áĽáŠá áááá (áá ááĽá á¨ááááľ áĽáľá á°ááłáłá áá)ᢠáĽá ááááŤáá˝á áŤá°á¨á áĽá áá¤áąá á¨ááááĄ, ááá á ááá˝ á áááľ á°ááłáłá áľáááá˝ áĽáá°áááľá áŤáľá°ááá. á áá°á¨áąáŁ áá áłá áἠá¨áá áľáááľ áŤáá RNG á°á°áá ááá°áľ áá˝ááá˘
á¨áĽááá ááľáĽ 10 áąá á á ááľ áá áĽáľáĽá áĽá á á ááá ááĽáŚášá áĽáľááĽááľ? ááĽáą á°ááłáłáááľ áá á á ááá? á á. áĽááá áá, áá á áá° 125 ááĽáŚá˝, áááľá áá ááłááľ á ááŤá áĽá´áľ á áἠáááá. áĽá á áá¤áąá, á¨áááááá á ááľ áĽááłá, á¨áá°ááąá áá¤áľ á áááľ ááááľ áá˝áá.
ááááŤáą á ááŤá ááĽáĽ áááááľ á¨áá°áá á¨áĽáá¨áśá˝ áĽááľ á ááአááᢠá¨áĽáą á¨áŤá, áĽááśáš áĽááŽá˝ - áĽá, á áá áá á¨áľ, á¨ááĽááľ áĽáľá áá á°á áá. áá áá¨á á ááľáá ááአá¨áłá¨áŁ á áľáĽá á¨á°áá á áá˝á áááľááᢠáľááá , á á°áá°á á°á¨á, ᨠ10 áłááľ áľáááľ áá°á á áľáááľ áŤáá RNG á°áĽá áá ፠áá˝áá.
áá ááłá, á áá
áá áĽáť á á ááŽááá áá - ááá áá áá°áŽáľ. á°áłáš á ááŤá áá á¨ááłáŠ áĽááľ ááĽáŽá˝á (x, y) á¨ááŤááá RNG áááá.
á á፠á áŠá áŤáá á ááŤá áá° áĽááá°áá á
áááľ á
áἠáĽáá°áá ááľáá - áá
á¨á°ááá° áľáááľ áŤáá RNG áá. áá á á¨áá á°áá ááľáĽ áŽá¨áŚá˝á áá á°á áŤáľáááááľ RNG á á¨á ááľ áἠáľáááľ áá á áá áá á¨á°ááá áľááááá á ááŤá á¨á°áťá ááᢠá á á ááá á áĽáá¸á áŁáá á°ááŁá áá á áááľá¨áľ áááŹá°á ááá¨áĄ.
á áá áľá PNG á á°á á°á¨á°á áľá á˘ááľáŽá áĽááááá. áááłáᣠáĽáá°áá¨á°áá á¨áááá á á°á á°á¨á°á á áá˘
89, 93, 33, 32, 82, 21, 4, 42, 11, 8, 60, 95, 53, 30, 42, 19, 34, 35, 62, 23, 44, 38, 74, 36, 52, 18, 58 79, 65, 45, 99, 90, 82, 20, 41, 13, 88, 76, 82, 24, 5, 54, 72, 19, 80, 2, 74, 36, 71, 9, XNUMX, XNUMX, ...
á ááááŞáŤ áĽááł áĽááá
ááĽáŽá˝ áá áŤá
á á áááá° áá¸á? áľáááąá á ááŁáŤáľ áĽááááá˘
áá° áŠáááá á
áἠáááľáá ááá áá á¨áááľ ááĽáŽá˝á á
á°á á°á¨á°á áŤáá ᥠáĽá á á ááŽááá áá áĽáá° ááá ááŤáá˝ á¨á°á¨ááá¸á á¨áá¨á°ááá áŤááááĄ-
á
áŚá˝ á ááá˝ ááłáŤá. áĽá á á
á°á á°á¨á°á ááľáĽ áŤáá áá¨á á á°áá°á ááááľ á¨áłáá áľááá (áá
á áá
á°á á˘ááľáŽáá¨á á áá) áá
áá፠á áŁá "á áľáá áááľ" áááĽá áá˝áá. á˘áŤááľ, áĽáá˛á
ááááą PRNG á á ááŽááá áá ááá ááŤáá˝á áááá á á áŁá á°áľáá á áá°áá.
áá á á°á á°á¨á°á:
42, 72, 17, 0, 30, 0, 15, 9, 47, 19, 35, 86, 40, 54, 97, 42, 69, 19, 20, 88, 4, 3, 67, 27, 42, 56, 17 14, 20, 40, 80, 97, 1, 31, 69, 13, 88, 89, 76, 9, 4, 85, 17, 88, 70, 10, 42, 98, 96, 53, XNUMX, XNUMX, ...
á á ááŽááá ááľáĽ áĽááłá ááá ááá áĽáŠ áááľááá˘
á áľáá
áĽáááá¨á°á (á á ááľ áá áśáľáľ ááĽáŽá˝á áŤááĽáĄ)áĄ-
áĽá áĽáá°áá á
áŚá˝. á¨á áá á áá á á áŤáľ ááŹáśá˝ ááľáĽ ááľááááľá ááááŁáľ á ááťáá. ááá áá á
áŚá˝ á áá
ááŹáľ áĽá á áľááá
á°áá˝ áá ááአáá˝áá.
á PRNGs áá á áŁá áĽáĽá á¨áá ááľáááśá˝ á áá°áá áŠá áľ ááŞááśááŤá ááľáĽ, áĽáá˛á ááááą áááł áá˝á á°ááŁáááľ á¨ááá. áľááá , áĽáŤáłá¸áá áááááá áአáľáá° áááŽá˝ á°ááá á°áá, á áá á áááŤáá. áááą á°á áá áĽá á¨á°áᨠá˝áá áááŁááá˘
áá¨áŤ
á ááľ ááá á áĽááá áááľ áŤááá á áłá˛áŤ áĽáá´áľ á¨áĽáą áá ááľáŤáľ áĽáá°ááťá? á¨áľáá á¨áľáŤáá ááĽáŤáľ áĽáá°ááá áľ áŤááá ááááąá ááťáá á áá áá? á¨ááŤáľá¨áľáá ááá á¨á°áᨠááá áá˝ááá˘
á áŠáᲠááľáĽ ááá áłááá á¨áááá° áááłá á°ááłáłá ááᢠá°ááą á áľááá á¨áááľá ááááŽá˝ áŤáłá¨ áĽáŠ áá, ááá áá á á áááš ááááŞáŤ áá á¨á°á áá°á áłáŞá á¨á°ááááá áááá áĽáĽá¨áľ áŁáá áľ á áľááá á°á¨áľáˇá.
áĽá ááłáŞáŤá áĽáá´áľ áĽáá°áá°áŤ áŤááá á áľááá áá áá á áá˝áá. á á á ááá á˘áŤááľ áľá áľáááą á˘áŤááľ á áá¨á¨áť ááá¨ááἠáá¨áŤá áááá°á˝ áĽá áááŤááľ ááá á°ááˇáá˘
áááľáá ááá áĽá áá¤áłá áá á - áľáłá˛áľá˛ááľá áá°áĽáľáĄ, á°á¨áŁá áá¨á áŤáá áĽá áá¤áąá áááá¨áą.
á¨áĽááľ ááá° ááłá
á áŠáᲠááľáĽ á¨áááá° ááĽáŽá˝á áááá á áĽá ááááśá˝ á á - á ááľáľá áá¨ááá˘
- áľáááľ. á¨áááá°.ááŁá()ᢠá á°áá°á á¨áĽá´áśá˝ ááá ááľáĽ á˘áá˛ááŽá˝á áŤáááŤáá˘
- áľáááľ.Random.NextDouble() ᨠ[0] áŁáá ááá ááľáĽ áľáἠáľááááááľ ááĽáŽá˝á áŤáááŤáᢠ1)
- UnityEngine.Random.Range() á á°áá°á á¨áĽá´áśá˝ ááá ááľáĽ áá á áľáááá ááĽáŽá˝á (á°ááłáááá˝á) áŤáááŤáá˘
- UnityEngine.Random.value. ᨠ[0] áŁáá ááá ááľáĽ áá á áľáááá ááĽáŽá˝á (á°ááłáááá˝á) áŤáááŤáᢠ1)
- á ááľááľ.áá˛áá˛ááľ.áŤáá°á.ááŁá áááľ()ᢠá¨á á˛áą á ááľááľ.áá˛áá˛ááľ á¤á°-áá˝áááľ á áŤáᢠá á°áá°á á¨áĽá´áśá˝ ááá ááľáĽ áá á áľáááá ááĽáŽá˝á (á°ááłáááá˝á) áŤáááŤáá˘
á á°ááą ááľáĽ á ááá áŚáł áááľ ááťáá á ááľ áἠáľáááľ á°áááˇáᣠá¨UnityEngine.Random.value á áľá°áá (áľáááą áŤáá°ááá¸á áľáŁ ááá áá á UnityEngine.Random.Range() áŠáááá á°ááłáłáááľ áá á áá) áĽá Unity.Mathematics.Random .NextFloat () (á áá á¨áą ᨠxorshift á áááŞáá áá ᣠáá áááľ áĽáá°áá á ááľ áἠáľáááľ áá á á á ááĽááľ)á˘
á ááŁáŞ, á¨áá á áá áá¤áľ á á°ááą ááľáĽ áĽáá°á°áááá á°ááľáˇá.
áá´
áĽáŤááłááąá á¨áá¨áĄáľá áá´áá˝ á áá áá á¨áááá° ááĽáŽá˝ á á°á á°á¨á°áá˝á á¨áá ᨠáľáá˝ áá°áá áŞáŤ áťáá áĽá áá¤áąá áááŁá áá°áľ á áľááá ááá˘
á¨áĽáŤááłááą á
á°á á°á¨á°á ááááľ 100 ááĽáŽá˝ áá.
á¨áááá° ááĽáŽá˝ ááá [0, 100) ááá˘
áá¨á á¨á°ááŤáŠ á¨ááá ááľá¨áŽá˝ á°á°áĽáľá§ááĄ-
- ᨠWindows
â á ááľááľ v2018.3.14f1ᣠá¨á ááłá áááłáŁ ááᣠ.NET áá°á á 2.0 - macOS
â á ááľááľ v2018.3.14f1ᣠá¨á ááłá áááłáŁ ááᣠ.NET áá°á á 2.0
- á ááľááľ v5.6.4p4, á¨á ááłá áááł, áá, .NET áá°á á 2.0 - ᨠAndroid
â á ááľááľ v2018.3.14f1ᣠá á ááľ ááŁáŞáŤ áááŁáŁ ááᣠ.NET áá°á á 2.0 - ᨠiOS
â á ááľááľ v2018.3.14f1ᣠá á¨ááŁáŞáŤ áááŁáŁ il2cppᣠ.NET Standard 2.0
áľáá áŤ
á¨áááá° ááĽáŽá˝á áááá á á¨á°ááŤáŠ ááááśá˝ á ááᢠááĽáŤááłááłá¸á á¨á°áᨠá¨áá á á፠ááá áĽáá˝ááá ᣠáĽáąá á¨áá¨á°ááľá áá á¨áĽ á áá áľ-
- á¨áĽá´áśá˝á ááá á¨áááááľ ááľá [á°áá/á¨áá°á)ᢠá ááá˘á á áŠá áááááá˘
- MF á¨ááááľ áá´. á°ááłááá áĽáá° á áááą áĽááá¨áĽáŁ áĽáą á¨á áá á á ááá ááá˘
- áá¤áśášá ááááá¨áľ á¨áľáááľ áá´ áľá. ááááťá¸áľ áĽáá° áĽá´áľ á¨áááá áá áľá + á¤áá¤á ááááá¨áľ áĽá á áá á¨áááá áá´ áľá áĽááááłáá.
á ááááŞáŤáŁ á IRandomGenerator á áááá˝ á¨ááá¨ááá á¨áá áĽááá áĄ-
namespace RandomDistribution
{
public interface IRandomGenerator
{
string Name { get; }
float Generate();
}
}
á¨áľáááľ áľáá áŤ. á¨áááá°.ááŁá()
áá áá´ á¨á°ááŤáŠ áĽá´áśá˝á áĽáá˛áŤááá áŤáľá˝áááłá, ááá áá á˘áá˛ááŽá˝á ááááłá, ááá áá á°ááłáááá˝ áŤáľáááá. á˘áá˛ááá áĽáá° á°ááłáá á ááá áá°ááá áá˝áá ᣠááá á¨áĽá´áśášá áá°á á á ááŤáł áľááá áľáááá˝ ááľááᾠᣠá áĽáŤááłááą ááŤá¨áá áľáááľ ááŤáŤáľ áá˝ááᢠáá¤áąá á¨áľááááá á á°á á°á¨á°á áá áĽáá° áá ááĽáĽ áŤá ááá áááá. á¨áĽááá°áá á°ááłáá áĽá´áľ áá áľááááŤá¨áĽ áá á á ááŤá áĽáá áááá.
using System;
namespace RandomDistribution
{
public class SystemIntegerRandomGenerator : IRandomGenerator
{
private const int DefaultFactor = 100000;
private readonly Random _generator = new Random();
private readonly int _min;
private readonly int _max;
private readonly int _factor;
public string Name => "System.Random.Next()";
public SystemIntegerRandomGenerator(float min, float max, int factor = DefaultFactor)
{
_min = (int)min * factor;
_max = (int)max * factor;
_factor = factor;
}
public float Generate() => (float)_generator.Next(_min, _max) / _factor;
}
}
á¨áľáááľ áľáá áŤ.Random.ááŁá áľááĽ()
áĽáá áá á¨áĽá´áśá˝ ááá [0; 1) á áááŁáłá ááľáĽ á á°á áá°á áá áááá°á ááá á áá˛áá˛áá áĽáá áááá-X * (á¨áá°á - á°áá) + á°ááá˘
using System;
namespace RandomDistribution
{
public class SystemDoubleRandomGenerator : IRandomGenerator
{
private readonly Random _generator = new Random();
private readonly double _factor;
private readonly float _min;
public string Name => "System.Random.NextDouble()";
public SystemDoubleRandomGenerator(float min, float max)
{
_factor = max - min;
_min = min;
}
public float Generate() => (float)(_generator.NextDouble() * _factor) + _min;
}
}
á¨á ááľááľ á˘ááá áľáá áŤ.Random.Range()
áá á¨UnityEngine.Random static class áá´ á¨á°ááŤáŠ áĽá´áśá˝á áĽáá˛áŤááá áĽá á¨á°ááłáá á áááľá ááááłáᢠááá á°á¨á᪠áááŚá˝á ááľá¨á á¨ááĽááľá.
using UnityEngine;
namespace RandomDistribution
{
public class UnityRandomRangeGenerator : IRandomGenerator
{
private readonly float _min;
private readonly float _max;
public string Name => "UnityEngine.Random.Range()";
public UnityRandomRangeGenerator(float min, float max)
{
_min = min;
_max = max;
}
public float Generate() => Random.Range(_min, _max);
}
}
UnityEngine.Random.value áľáá áŤ
á¨áááááłááľ ááá UnityEngine.Random áĽá´áľ á¨áá á¨áĽá´áśá˝ ááá ááľáĽ á°ááłáá á áááľ ááááłá [0; 1) System.Random.NextDouble()á áľáá°ááĽá á á°á°á á ááá áá á á°ááłáłá ááááľ áĽááľááľááá˘
using UnityEngine;
namespace RandomDistribution
{
public class UnityRandomValueGenerator : IRandomGenerator
{
private readonly float _factor;
private readonly float _min;
public string Name => "UnityEngine.Random.value";
public UnityRandomValueGenerator(float min, float max)
{
_factor = max - min;
_min = min;
}
public float Generate() => (float)(Random.value * _factor) + _min;
}
}
á¨á ááľááľ.áá˛áá˛ááľ.áá˛áĽ.ááŁá áááľ() áľáá áŤ
á¨NextFloat() á¨Uniity.Mathematics.Random class áá´ á°ááłáá á áááľ á°ááłáá ááĽáĽ ááááłá áĽá á¨áĽá´áśá˝á ááá áĽáá˛áááš áŤáľá˝áááłáᢠáĽá¸áá ááŠááľ áĽáŤááłááą á¨Uniity.Mathematics.Random ááłá á á ááłááľ áá áááá á áá áľ - á áá ááááľ á°á°ááá á á°á á°á¨á°áá˝á ááá á áĽááá áŁááá˘
using Unity.Mathematics;
namespace RandomDistribution
{
public class UnityMathematicsRandomValueGenerator : IRandomGenerator
{
private Random _generator;
private readonly float _min;
private readonly float _max;
public string Name => "Unity.Mathematics.Random.NextFloat()";
public UnityMathematicsRandomValueGenerator(float min, float max)
{
_min = min;
_max = max;
_generator = new Random();
_generator.InitState(unchecked((uint)System.DateTime.Now.Ticks));
}
public float Generate() => _generator.NextFloat(_min, _max);
}
}
ᨠMainController áľáá áŤ
á ááŤáł á¨IRandomGenerator áľáá áŤáá˝ ááá áá¸áᢠá ááá á, á á°á á°á¨á°áá˝á áááá áĽá á¨á°áááá á¨ááἠáľáĽáľáĽ áááľáŹáľ ááľááἠáŤáľáááááłá. áá áá áááľá¨á á áŠáᲠááľáĽ áľáĽáááľ áĽá áľáὠᨠMainController áľááŞááľ áĽáááĽáŤáá ᣠáá á áááá á áľááá áľáŤáá˝á áĽá á á°ááłáłá áá á¨áŠá áአáá ááľá°ááĽá áááááľ á áá áľá˘
á¨áá¨á ááąá áá á áĽá á¨á¤áá¤á áĽá´áśá˝á áá á áĽááľáááĽáŁ áĽá áĽáá˛áá á¨á°ááአáĽá áááľáŤáľ ááá á¨áá áááŹá°áŽá˝á á¨ááááľ áá´á áĽáááá˘
namespace RandomDistribution
{
public class MainController : MonoBehaviour
{
private const int DefaultDatasetSize = 100000;
public float MinValue = 0f;
public float MaxValue = 100f;
...
private IRandomGenerator[] CreateRandomGenerators()
{
return new IRandomGenerator[]
{
new SystemIntegerRandomGenerator(MinValue, MaxValue),
new SystemDoubleRandomGenerator(MinValue, MaxValue),
new UnityRandomRangeGenerator(MinValue, MaxValue),
new UnityRandomValueGenerator(MinValue, MaxValue),
new UnityMathematicsRandomValueGenerator(MinValue, MaxValue)
};
}
...
}
}
á áá á¨ááἠáľáĽáľáĽ áĽááá á. á áá á ááŁá á¨ááἠáááá¨áľ áá¤áąá áá° á˝áá áĽá¨áľ (á csv á áá¸áľ) á¨ááááἠáá ááŁááŤá. á¨áĽáŤááłááąá IRandomGenerator áĽá´áśá˝á ááá¨áá¸áľ á¨áŤáą á¨á°áᨠá ááľ á°ááľá§á ᣠáĽá á¨ááááŞáŤá ááľáá á¨áááŹá°áŠá áľá ááááá˘
namespace RandomDistribution
{
public class MainController : MonoBehaviour
{
...
private void GenerateCsvDataSet(TextWriter writer, int dataSetSize, params IRandomGenerator[] generators)
{
const char separator = ',';
int lastIdx = generators.Length - 1;
// write header
for (int j = 0; j <= lastIdx; j++)
{
writer.Write(generators[j].Name);
if (j != lastIdx)
writer.Write(separator);
}
writer.WriteLine();
// write data
for (int i = 0; i <= dataSetSize; i++)
{
for (int j = 0; j <= lastIdx; j++)
{
writer.Write(generators[j].Generate());
if (j != lastIdx)
writer.Write(separator);
}
if (i != dataSetSize)
writer.WriteLine();
}
}
...
}
}
á¨áá¨á ᨠGenerateCsvDataSet áá´á á ááĽáŤáľ áá¤áąá áá° ááá ááľááἠááá áá˛áŤáá á á ááłá¨ áá¨áĄ áá áŤááá áá¨á á¨áá¨á¨áťá ááŁáŞáŤ áá° á°ááŁáŠ á áááá ááľá°ááá áĽáť ááá˘
namespace RandomDistribution
{
public class MainController : MonoBehaviour
{
...
public void GenerateCsvDataSet(string path, int dataSetSize, params IRandomGenerator[] generators)
{
using (var writer = File.CreateText(path))
{
GenerateCsvDataSet(writer, dataSetSize, generators);
}
}
public string GenerateCsvDataSet(int dataSetSize, params IRandomGenerator[] generators)
{
using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture))
{
GenerateCsvDataSet(writer, dataSetSize, generators);
return writer.ToString();
}
}
...
}
}
á¨ááŽáááą áááŽá˝ á
áá¤áśá˝
ááá á°á áá á áá°áá á¨áᢠáĽááą á¨á á ááľ áŤáááľá áá - á ááá áááłáὠᣠá¨á´áŤ ááá á¨ááá áľ áĽáŠá áľáááľá˘ áááľá¨áŽá˝ á¨á°áᨠááŤáá˝á ááľááἠááĽáĄ á ááłá¨áá - ááá á áááľ á°ááłáłá áá¤áśá˝á áŤáłáŤáá˘
áĽáááłá áá
ááá˘
á¨á ááľáľ áľáááľ áá´áá˝ á á ááŽááá áá á
á°á á°á¨á°áá˝á áá¨áľ-
áĽá ááľááááľ á 3-á. á°ááłáłá áááľ ááááľá¨á á¨System.Random.Next()á áá¤áľ áĽáť áĽá°ááááá˘
á ááá˘áŤá áá áľá UnityEngine áá°á á áľáááľ á¨á°ááá¨á áłáŞá.Random áĽáŤáąá á áá°ááá: ááá ááááŞáŤ áá áľá
á°áľ áá á, ááá á¨á፠á áá á¨áá ááá á áá°áŠ ááľáĽ á°ááá§á. á áá áá áĽááá á ááá˘
ááá: hab.com