Псевдослучайные события и методы

Дискретно-событийное моделирование на Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Рандомизация процессов (событий)

Что такое рандомизация?

  • Процесс придания чему-либо случайного характера
  • В данном случае — случайность событий (или процессов)
  • Полезна для моделирования недетерминированных процессов

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

  • Для повышения случайности генератора часто используются текущее время и другие внешние переменные.
Дискретно-событийное моделирование на Python

Случайное и псевдослучайное

«Истинная» случайная генерация

  • Числа действительно случайны
  • Случайность ограничена аппаратными возможностями машины

Псевдослучайная генерация

  • Числа генерируются на основе вероятностных распределений
  • Статистическое распределение становится заметнее с ростом выборки

Пример: Завод с ручной сборкой

Диаграмма рассеяния, показывающая продолжительность конкретной операции ручной сборки при многократном повторении.

  • Вероятностное распределение лучше подходит для генерации псевдослучайного следующего события
Дискретно-событийное моделирование на Python

Пакеты для псевдорандомизации

Можно использовать несколько статистических пакетов:

  • NumPy
  • SciPy
  • statsmodels
  • pandas
  • Random
  • scikit-learn

Пакет Random

  • Генерирует случайные и псевдослучайные числа

Наш фокус

  • Методы, часто применяемые в моделях дискретных событий
Дискретно-событийное моделирование на Python

Случайное число в заданном диапазоне

Случайное целое число в заданном диапазоне

Метод:

random.randint(start, end)

Пример: случайное целое число от 3 (включительно) до 9 (не включая)

random.randint(3, 9)
5

Случайное число с плавающей точкой в заданном диапазоне

Метод:

random.uniform(start, end)

Пример: случайное число с плавающей точкой от 3 до 9

random.uniform(3, 9)
6.4557754
Дискретно-событийное моделирование на Python

Случайные выборки и последовательности

Случайная выборка из последовательности

Метод:

random.sample(mylist, k=number_samples)

Пример: 2 случайных элемента из списка

mylist = ["apple", "banana", "cherry"]
random.sample(mylist, k=2)
['cherry', 'banana']

Перемешивание списка (изменение порядка элементов)

Метод:

random.shuffle(mylist)

Пример: случайное изменение порядка элементов списка

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Дискретно-событийное моделирование на Python

Распределения Гаусса и показательное

Распределение Гаусса

Метод:

random.gauss(average, standard_dev)

Пример: псевдослучайное число с плавающей точкой со средним 100 и стандартным отклонением 50

random.gauss(100, 50)
123.59383

Показательное распределение

Метод:

random.expovariate(lambda)
  • если lambda>0, результаты [0, infinity]
  • если lambda<0, результаты [-infinity, 0]

Пример: псевдослучайное число с плавающей точкой на основе показательного распределения с lambda = 1,5: random.expovariate(1.5)

0.2234355
Дискретно-событийное моделирование на Python

Давайте потренируемся!

Дискретно-событийное моделирование на Python

Preparing Video For Download...