使用 salabim(DES、Python)可视化统计数据

在 Python 中引入用于离散事件模拟 ( DES ) 的salabim之后,我想跟进其与统计相关的功能。我在今天的博文中这样做:使用salabim进行统计!

离散事件仿真、作业车间和 Python

离散事件模拟是供应链管理分析员、生产计划员和运筹学分析员适用的几种模拟方法之一。下表提供了这些模拟方法的粗略分类。

stats with salabim 在 Python 中进行离散事件模拟

离散事件仿真主要用于可操作的和详细的目标,例如生产计划、工厂设计或业务流程设计和改进。对于由顺序事件和队列很好地描述的复杂系统来说,这是一种合适的方法。以下是您可以阅读的一些示例性模拟用例:

例如,作业车间是一个可以从离散事件仿真中受益的系统,用于其设计和/或持续改进。

使用 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 出版物:

You May Also Like

Leave a Reply

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据