仿真集合:蒙特卡罗采样

Python 中的离散事件模拟

Diogo Costa (PhD, MSc)

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

系统对不同情景的响应

  • 非确定性过程会引起系统响应的波动
  • 上个视频:学习了如何建模非确定性过程
  • 表征模型中的不确定性传播
  • 研究系统对不同情景的响应

这有助于:

  • 规划业务扩张
  • 进行压力测试
  • 为极端情形做准备
Python 中的离散事件模拟

蒙特卡罗采样

  • 重复随机采样
  • 在小幅变动下建模系统
  • 检查系统对变动的响应

样本增多时的参数空间

显示 100 次蒙特卡罗样本结果的图。模型结果的模式不可见。

显示 1500 次蒙特卡罗样本结果的图。部分结果模式已可见,但仍有限。

显示 5000 次蒙特卡罗样本结果的图。结果呈现清晰模式,出现网格结构。

Python 中的离散事件模拟

蒙特卡罗采样:过程分析

示例:运行蒙特卡罗以了解基于正态(高斯)分布的事件生成器的输出范围

import random as rd
import numpy as np
import matplotlib.pyplot as plt

# Generating samples: Gaussian distribution
duration_sample = [rd.gauss(25, 5) 
for i in range(5000)]

# Plotting
plt.scatter(duration_sample, np.r_[0:5000], 
marker='.', c=duration_sample, cmap='CMRmap')
plt.xlabel("Duration [min]")
plt.ylabel("Monte Carlo Runs")

绘图结果 显示基于高斯分布生成的持续时间的蒙特卡罗采样图。

Python 中的离散事件模拟

蒙特卡罗采样:离散事件模型

根本目标

  • 探索模型不确定性
  • 源自非确定性过程
  • 表征不确定性
  • 支持决策

一个包含四个状态的系统示意图,过程中状态发生变化。由于每次重复时各过程持续时间存在波动,随着过程序列推进,模型系统状态的可能性数量增加。

Python 中的离散事件模拟

蒙特卡罗采样:离散事件模型

  • 各过程时长的不确定性在系统中传播

  • 导致不同的模型轨迹

  • 称为"响应包络"

示例:

n_trajectories = 50

process_1 = {"Name": "Raw_material", 
             "OperationTime": 20, 
             "MaxDelayTimePercent": 10}
process_2 = {"Name": "Unloading", 
            "OperationTime": 15, 
            "MaxDelayTimePercent": 5}

显示包含一系列串行工序的制造活动响应包络的图。

Python 中的离散事件模拟

¡Vamos a practicar!

Python 中的离散事件模拟

Preparing Video For Download...