工厂车间模拟

时间:2010-01-29 19:06:05

标签: c# simulation

我想创建一个工厂车间的模拟,我正在寻找如何做到这一点的想法。到目前为止我的想法是:

•工厂由一系列流程组成,其中一些流程是串联的,一些是并行的。每个进程都会与它的上游和下游以及并行邻居进行通信,让他们知道它是通过put

•每个流程都有自己的基本属性,如最大吞吐量,直接维护成本

显然我还没有完全考虑过这个问题,但我希望有人能够给我一些想法,或者可能是一个在线资源的链接

更新: 这个项目只是为了我自己的娱乐,也许可以学习一点点。我不是一名程序员,编程对我来说只是一种爱好。我决定用C#编写它。

5 个答案:

答案 0 :(得分:4)

准确地模拟整个工厂是一项重要工作。

首先你需要弄清楚:你为什么要进行模拟?它是谁的?它会给他们什么价值?模拟的哪些部分很有趣?它需要多准确?该过程的哪些部分不需要准确模拟?

要弄清楚这些问题的答案,您需要与想要编写模拟的人交谈。

一旦你弄明白了要模拟什么,那么你需要弄清楚如何模拟它。您需要这些模型的一些模型和一些参数。您可以从实际生产中获得一些实际数据,并尝试从数字中推导出模型。模型可以是输入和输出之间的简单线性关系,更复杂的关系,甚至可能是随机(随机)效应。如果您无法访问真实数据,那么您必须在模型中进行猜测,但这绝不会那么好,所以尽可能尝试获取真实数据。

您可能还需要考虑组件发生故障的概率,以及可能产生的影响。工人罢工怎么样?原料不可用?机械磨损导致产量随时间逐渐降低?您可能不想再考虑这些细节,这取决于客户的需求。

如果您的模拟涉及随机事件,您可能需要多次运行并获得平均结果,例如使用Monte Carlo模拟。

为了给出更好的答案,我们需要更多地了解您需要模拟的内容以及您想要实现的目标。

答案 1 :(得分:4)

由于您的客户是您自己,因此您需要确定Mark Byers所提出的所有问题的答案。但是,我会给你一些建议,希望他们能给你一个开始。

让我们假设您的工厂需要几个不同的部件,并将它们组装成一个成品。装配过程的流程图可能如下所示:

Factory Flowchart http://img62.imageshack.us/img62/863/factoryflowchart.jpg

对于组装小部件A和B的第一颗钻石,假设完成此步骤平均需要30秒。我们假设两个小部件组装所需的实际时间是normally,平均为30秒,方差为5秒。对于第二颗钻石,假设它平均需要30秒,但大多数情况下它不会花费那么长的时间,有时则需要更长的时间。这很好地近似为exponential distribution,其中30 s作为速率参数,通常用lambda表示。

对于第一个过程,计算将小部件A和B组合为的时间:

timeA = randn(mean, sqrt(variance)); // Assuming C# has a function for a normally
                                     // distributed random number with mean and 
                                     // sigma as inputs

对于第二个过程,计算将小部件C添加到程序集的时间为:

timeB = rand()/lambda;  // Assuming C# has a function for a uniformly distributed
                        // random number

现在,每个iGadget的总装配时间为timeA + timeB + waitingTime。在每个装配点,存储等待装配的小部件队列。如果第二个装配点是瓶颈,它的队列将填满。您可以为其队列强制执行最大大小,并在达到最大大小时保持更上游的内容。如果一个项目在队列中,那么它的装配时间会因装配线中的所有iGadgets而增加。我会告诉你如何编写代码,你可以进行大量的试验,看看总装配时间是多少。结果分布是什么样的?

如何“加强思考”:

  • 每个A小部件需要3个B小部件。玩弄库存。随机补充库存。
  • 添加质量保证检查(指数分布在这里很好用),并拒绝一些已完成的iGadgets。我建议使用低拒绝率。
  • 尝试使用与我建议的不同的概率分布。了解它们如何影响您的模拟。总是试图弄清楚概率分布的输入参数如何映射到真实世界值。

你可以通过这个简单的模拟做很多事情。下一步是概括您的代码,以便您可以拥有任意数量的小部件和组装步骤。这不是那么容易的。有一整个应用数学领域称为operations research,专门用于此类模拟和分析。

答案 2 :(得分:1)

您所描述的是离散事件模拟解决的经典问题。已经开发了各种通用和专用模拟语言来模拟这些类型的问题。虽然我不建议从头开始编程以解决“真正的”问题,但为小排队问题编写自己的代码可能是一个很好的练习,这样你就可以理解事件调度,随机数生成,跟踪日历等等。一旦你做完了,一个通用的模拟语言将为你做所有的事情,这样你就可以专注于大局。

一个很好的参考是Law & Kelton。 ARENA是标准包装。它被广泛使用,恕我直言,这种模拟非常全面。 ARENA书籍也是一本关于模拟的好书,它附带了可以应用于小问题的软件。要模拟更大的问题,您需要获得许可证。您应该可以下载ARENA here的试用版。

答案 3 :(得分:0)

Automod是要走的路。 http://www.appliedmaterials.com/products/automod_2.html

有很多东西需要学习,而且不会便宜。

ASI的Automod已经在工厂模拟业务工作了大约30年。它现在归应用材料公司所有。在仓库中处理物料搬运的大型企业使用Automod,因为它是久经考验的领导者。

答案 4 :(得分:0)

它可能比您正在寻找的更多,但visual components是一个很好的工业模拟工具。

要明确我不为他们工作,我目前工作的公司目前还没有使用它们,但我们已经查看了它们。