【问题标题】:factory floor simulation工厂车间模拟
【发布时间】:2011-01-10 23:43:36
【问题描述】:

我想创建一个工厂车间的模拟,我正在寻找有关如何执行此操作的想法。到目前为止,我的想法是:

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

• 每个进程都有自己的基本属性,例如最大吞吐量、吞吐量导致的维护成本

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

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

【问题讨论】:

  • +1 个有趣的问题。听起来您想要的是一个数学建模,因此您可以优化某些变量(成本、容量等)。我不确定你真的想要一个“模拟”。
  • 我的工作是一家工厂,有时我们会增加吞吐量。这种增加对其他部门的预算产生了一些负面影响,例如增加的电力成本、增加的维护成本和缩短设备的使用寿命。我认为尝试模拟吞吐量和成本的变化会很有趣。我不是专业的程序员,但我确实涉猎了一点,我认为这将是一个有趣的项目。
  • 您的评论强化了我的观点,即您需要一个数学模型。我同意,这听起来像是一个有趣的项目。当您开始针对某些参数进行优化时,它会变得更加有趣。 ;) 你可以通过简单地使用电子表格来模拟很多这样的变量......当然编写一个程序来做到这一点会更有趣。
  • 除了下面我的回答之外,我要说的是:模拟一个真实的工厂,甚至是真实工厂的一小部分都非常困难,因为我们在模拟真实过程时所做的近似通常是不太现实。我不希望你会从你的真实数据中发现真实的集合点是正态分布的,甚至是指数分布的,但你可能会很幸运。

标签: c# simulation


【解决方案1】:

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

要学的东西很多,而且不便宜。

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

【讨论】:

  • 为什么这被否决了?我对automod一无所知,但有人可以解释一下否决票吗?
  • 我投了反对票,因为它没有为为什么应该使用 automod 提供任何支持,而且通常也没有就如何模拟工厂提供任何建议。
  • @Scottie 很公平,但这个答案似乎与 Jim C 的答案相似。
  • O.P. 直到后来的编辑才解释他的目标。他只是想要一些关于一些工具的信息,我给了他一个。我的回答比 Jim C 的回答好。吉姆 C 的所谓产品是“即将推出”的蒸汽器皿。我不为 ASI 或 Applied 工作,但我使用过 Automod。
  • 我无意在这里伤害感情,我只是不认为你的回答很有帮助。 OP 将从中学到什么,“有很多东西要学,而且不会很便宜?”如果您可以就如何使用 automod 做一些简单的事情提供一些建议,我可能会改变主意。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    假设您的工厂采用几个不同的零件并将它们组装成一个成品。组装过程的流程图可能如下所示:

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

    对于组装小部件 A 和 B 的第一颗钻石,假设完成此步骤平均需要 30 秒。我们假设组装两个小部件的实际时间分布在normally,平均为 30 秒,方差为 5 秒。对于第二颗钻石,假设它也平均需要 30 秒,但大部分时间不会花费那么长时间,而其他时候则需要更长的时间。这可以通过 exponential distribution 很好地近似,其中 30 秒作为速率参数,通常在方程中由 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 小部件。玩弄库存。随机补充库存。
    • 添加一个质量保证检查(指数分布在这里很好用),并拒绝一些完成的 iGadget。我建议使用低拒绝率。
    • 尝试使用不同于我建议的概率分布。看看它们如何影响您的模拟。始终尝试弄清楚概率分布的输入参数如何映射到现实世界的值。

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

    【讨论】:

      【解决方案4】:

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

      需要明确的是,我不为他们工作,我工作的公司目前也没有使用它们,但我们已经研究过了。

      【讨论】:

        【解决方案5】:

        准确模拟整个工厂是一项艰巨的工作。

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

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

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

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

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

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

        【讨论】:

        • 我不是程序员。这听起来像是一个有趣的项目,也许还能学到更多关于编程的知识。我不希望除了我自己之外的任何人都对该应用程序感兴趣。
        • 这种类型的应用程序对于许多管理生产过程的人来说绝对是有趣的,并且大量的时间和金钱用于开发此类应用程序。这不是一个简单的项目,但是如果您可以使用模拟来优化他们的流程,降低故障率等,它会非常划算。如果您只是想学习如何编程,这可能不是一个理想的学习项目,因为它很复杂,您可能没有任何真实数据可供使用。
        • 我有真实数据 - 直接连接到所有工业 SQL 服务器和所有过去 4 年的数据。我还连接到维护数据库,它的成本包括人工、承包商和零件
        • @fishhead:那你当然可以试试。我建议从流程的一小部分的简化模型开始,一旦你开始工作,就添加更多细节。由于您将在一段时间内进行模拟,因此您需要跟踪模拟中的虚拟时间,并为每个时间步更新您正在模拟的所有组件的状态。如果您有一些可以实现的特定目标,您可能会发现更容易在项目中保持积极性。
        猜你喜欢
        • 1970-01-01
        • 2011-10-07
        • 2020-07-03
        • 1970-01-01
        • 2021-07-07
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多