伪随机化的事件与方法

Python 中的离散事件模拟

Diogo Costa (PhD, MSc)

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

事件(或过程)随机化

什么是随机化?

  • 使事物随机的过程
  • 这里指使事件(或过程)随机
  • 用于模拟非确定性过程

注意: 计算机从设计上无法生成真正随机数。

  • 常用当前时间等外部变量参与计算以提高生成器的随机性。
Python 中的离散事件模拟

随机 vs. 伪随机

"真正"随机生成

  • 数字完全随机
  • 随机性受机器内在限制

伪随机生成

  • 按概率分布生成数字
  • 样本增多时呈现统计分布特征

示例: 有手工装配任务的工厂

散点图显示重复多次的某手工装配时长。

  • 用概率分布更适合生成下次伪随机发生时间
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]

示例: 使用参数 1.5 的指数分布生成伪随机浮点数:random.expovariate(1.5)

0.2234355
Python 中的离散事件模拟

Vamos praticar!

Python 中的离散事件模拟

Preparing Video For Download...