запуск события с определенной вероятностью с помощью C#

Я пытаюсь смоделировать реалистичное событие нажатия клавиши. По этой причине я использую метод SendInput (), но для большего результата мне нужно указать задержку между событиями keyDOWN и KeyUP! Эти числа ниже показывают прошедшее время в миллисекундах между событиями DOWN и UP (они действительны/действительны):

96 95 112 111 119 104 143 96 95 104 120 112 111 88 104 119 111 103 95 104 95 127 112 143 144 142 143 128 144 112 111 112 120 128 111 135 118 147 96 135 103 64 64 87 79 112 88 111 111 112 111 104 87 95

Мы можем упростить вывод:

задержка 64 -88 мс -> 20 % времени

задержка 89 -135 мс -> 60 % времени

задержка 136 -150 мс -> 20 % времени

Как запустить событие в соответствии с вероятностями, указанными выше? Вот код, который я сейчас использую.:

        private void button2_Click(object sender, EventArgs e)
        {
            textBox2.Focus();
            Random r = new Random();
            int rez = r.Next(0, 5); // 0,1,2,3,4 - five numbers total

            if (rez == 0) // if 20% (1/5)
            {
                Random r2 = new Random();
                textBox2.AppendText(" " + rez + " " + r2.Next(64, 88) + Environment.NewLine);
// do stuff
            }
            else if (rez == 4)//if 20% (1/5)
            {
                Random r3 = new Random();
                textBox2.AppendText(" " + rez + " " + r3.Next(89, 135) + Environment.NewLine);
// do stuff

            }
            else // if 1 or 2 or 3 (3/5) -> 60%
            {
                Random r4 = new Random();
                textBox2.AppendText(" " + rez + " " + r4.Next(136, 150) + Environment.NewLine);
// do stuff

            }

        }

С этим кодом огромная проблема. Теоретически после миллионов итераций -результирующий граф будет выглядеть примерно так:

comparison

Как решить эту проблему?

РЕДАКТИРОВАТЬ:решение состояло в том, чтобы использовать дистрибутив, как предлагали люди.

вот реализация такого кода на Java:

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextGaussian%28%29

и вот реализация на C #:

Как генерировать нормально распределенные случайные числа из целочисленного диапазона?

хотя я бы предложил немного уменьшить значение "отклонений".

вот интересная статья msdn

http://blogs.msdn.com/b/ericlippert/archive/2012/02/21/generating-random-non-uniform-data-in-c.aspx

всем спасибо за помощь!

6
задан Community 23 May 2017 в 10:30
поделиться