在 Python 中引入用于离散事件模拟 ( DES ) 的salabim之后,我想跟进其与统计相关的功能。我在今天的博文中这样做:使用salabim进行统计!
离散事件仿真、作业车间和 Python
离散事件模拟是供应链管理分析员、生产计划员和运筹学分析员适用的几种模拟方法之一。下表提供了这些模拟方法的粗略分类。

离散事件仿真主要用于可操作的和详细的目标,例如生产计划、工厂设计或业务流程设计和改进。对于由顺序事件和队列很好地描述的复杂系统来说,这是一种合适的方法。以下是您可以阅读的一些示例性模拟用例:
- 链接:露天矿模拟以更好地规划
- 链接:在 R 中使用 simmer 的停车场模拟器
- 链接:端到端的家禽供应链模拟
例如,作业车间是一个可以从离散事件仿真中受益的系统,用于其设计和/或持续改进。
使用 salabim 进行作业车间模拟和统计
下面的 Python 代码使用salabim在 Python 中实现了一个作业车间模拟模型。我在以前的博文中使用过这个简单的例子。在本例中,我们正在为一个包含 2 台机器和 100 个作业的简化作业车间建模。作业可以在任何机器上处理,但一次只能由一台机器处理。机器以指定的处理时间(持续时间)处理作业。在这种情况下,机器的容量为 1。一旦机器处理完一项工作,它就完成了。在这种情况下,生产计划被简化到一定程度,并由随机作业生成器建模。作业生成器以随机分布的间隔创建新作业,作业之间有指定的平均时间。除了模型实现和模拟执行之外,代码还实现了动画统计。
第一部分导入salabim并设置常量以及相关数据类型(产品类)。Product 扩展了salabim Component 类。它实现了一个过程方法。此方法用于在指定的持续时间内请求和持有资源。
import salabim as sim
SEED = 42
MACHINES = 2 # amount of machines
INTERVAL = 3 # mean time between two jobs
DURATION = 5.0 # mean processing time of a job
JOBS = 100 # number of jobs that have to be completed
class Product(sim.Component):
def process(self):
yield self.request(machines)
print(f"{self.name()} started at time {env.now()}")
yield self.hold(DURATION)
print(f"{self.name()} completed at time {env.now()}")
下一部分设置模拟环境并定义资源。部分源,即组件生成器,也在本节中定义:
env = sim.Environment(random_seed=SEED)
machines = sim.Resource("machines", capacity=MACHINES)
sim.ComponentGenerator(Product, iat=sim.Exponential(INTERVAL), force_at=True, number=JOBS)
最后,实现了仿真运行和动画。
env.animate(True)
env.modelname("jobshop demonstration")
machines.claimers().animate(x=700, y=100, title="work in progress", direction="e")
machines.requesters().animate(x=200, y=100, title="work waiting", direction="e")
machines.claimers().length.animate(x=10, y=300, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work in prgress")
machines.requesters().length.animate(x=10, y=500, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work waiting")
env.speed(5)
env.run(100)
这会产生一个动画。下图显示了动画的快照。

动画显示了整个过程中正在进行的工作和积压/等待中的工作。
相关内容
如果您对离散事件仿真及其应用程序或其在 R、AnyLogic、VisualComponents 和 Python 中的具体实现感兴趣,请查看以下 SCDA 出版物:
- 链接:离散事件模拟 (DES) 用例
- 链接:离散事件仿真软件列表
- 链接:供应链管理分析师的模拟方法
- 链接:离散事件仿真程序模型
- 链接:用 simmer 模拟收货检验
- 链接:可视化 SimPy 作业车间模拟
- 链接: Simmer in R for discrete-event simulation
- 链接:AnyLogic 中的起重机场模拟
- 链接: AnyLogic 中的输送机模拟
- 链接:Visual Components 财务 KPI 模拟

专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply