Skip to content

教程:模拟练习成功要诀

  • Academic

挑战

作者:David Sturrock(Simio LLC)

在 2015 年冬季仿真会议上发表

仿真项目远不止是建立一个模型,成功所需的技能也远不止了解特定的仿真工具。一位拥有 30 年经验的资深专家探讨了使项目取得成功的一些重要步骤,以及帮助避免常见陷阱的一些注意事项和技巧。本内容与 WSC 前几届会议上的演讲类似。

引言

本文讨论了新手和有抱负的仿真人员经常忽略的建模问题。本文特别提供了一些提示和建议,帮助您避免一些常见陷阱,确保您的第一个项目取得成功。前四个主题涉及确定项目目标、了解系统、创建功能规范和管理项目,但初学者往往对这些主题重视不够。后几节涉及模型的构建、验证、确认和展示,为我们提供了一些行之有效的方法。

确定研究目标

最初考虑进行模拟研究时,首先要考虑的是项目目标。为什么有人想要模拟这个系统,他们希望从中得到什么?更具体地说,您必须确定谁是利益相关者,以及他们如何定义成功。

谁是利益相关者?

利益相关者是指与项目结果有利害关系的人,也就是关心项目的人。"谁是你的利益相关者?"这似乎有一个显而易见的答案--你的经理或客户。但是,如果你去探究为什么有人想要看到这项研究的结果,你可能会发现更多的利益相关者。您是否想提高工厂的生产率?如果是,负责日常系统运行的经理就会希望确保结果准确无误。负责底线的高管会希望看到财务结果。工人代表可能会对工作内容的变化感兴趣。如果员工可能发生变动,人力资源人员可能会对研究结果感兴趣。其他各种运营(维护)和员工(流程工程)职能部门也可能感兴趣。甚至市场营销部门也可能对使用动画进行宣传感兴趣。

每个项目都会有不同的利益相关者,显然有些利益相关者会比其他人更感兴趣。有些利益相关者可能比其他利益相关者更重要。虽然最重要的利益相关者显然必须得到满足,但也不要忽视其他利益相关者。很多时候,不太重要的利益相关者的合作和满意度会决定项目的成败。

利益相关者如何定义成功?

务实营销小组创造了一个短语 "你的意见虽然有趣,但无关紧要"。这句话的基本意思是,客户(这里指利益相关者)对项目成功的看法比你自己的看法重要得多。即使你个人认为项目取得了巨大成功,但如果你最重要的利益相关者认为项目是失败的,那么你的项目就是失败的。了解利益相关者的真实需求和期望非常重要。他们是否希望减少人员或开支?提高利润?提高系统的可预测性或可靠性?增加产出?改善客户服务?在所有情况下,你不仅需要了解他们看重的是什么,还需要了解他们是如何衡量的,以及他们希望看到怎样的结果。

明智的做法是还要注意任何 "隐藏的目的"。进行仿真分析的真正原因是有人要求他们建立模型吗?有时,客户或资金来源会要求建立一个仿真模型作为合同的条件。在这种情况下,利益相关者的主要目的可能是建立一个模型,以支持他们无论如何都要做的事情。引用一个流行的机器人的话...... "危险,威尔-鲁滨逊!"一开始就必须 "证明 "自己的答案,这是需要不惜一切代价避免的情况。

了解了最重要的利益相关者是如何定义(希望还能衡量)成功的,现在你就可以撰写高层次的目标了。这将是进一步讨论项目的起点,以便每个人都有一个共同的愿景。这些信息也为您稍后的详细功能说明提供了一个良好的开端。

解决方案

了解系统

如果幸运的话,您正在建模的系统就是您的系统,而且您对它非常了解。更常见的情况是,即使该系统为贵公司所有,您对它的了解也不足以对其进行准确建模。每个系统都有一些微妙之处,而这些微妙之处往往非常重要。虽然期望仿真人员了解每个系统是不合理的,但一名优秀的仿真人员应该知道要问的重要问题,并能够理解答案。

一个好的开始是回顾流程,以便了解关键方面。实体是什么?它们是如何转换的?有哪些制约因素?如果可能的话,利用机会实际走一遍实际或类似的设施,以发现在讨论或图表审查中可能遗漏的东西。

提出问题。问更多的问题。向不同的人提出相同的问题,不要对得到的不同答案感到惊讶。这一阶段的目标不是解决问题,而是充分了解问题和系统,以便对工作进行描述和估算。这一阶段的部分工作是确定您还不知道什么,以便在项目中留出时间和风险来进行启蒙。

创建功能规范

有一句古老的格言说:"如果你不知道要去哪里,你怎么知道什么时候能到达那里?在模拟项目中,这句话尤其适用。功能规范明确了模型的范围和详细程度。最重要的是,它明确定义了交付成果。它既定义了目标,也定义了可交付成果,还确定了每个人如何知道何时完成。

功能规范应明确项目,并使每个人对可交付成果达成共识。主题应包括

  • 目标 - 从最初的高层次目标中总结出您打算解决什么问题,以及您不打算解决什么问题。
  • 详细程度 - 模型始终只是现实的近似值,总是可以改进的。确定模型的界限非常重要。例如,特定模型的详细程度可能适合比较不同设计的相对生产率,但可能不够详细,无法可靠地预测系统的绝对生产率。
  • 数据要求 - 确定需要哪些数据来支持商定的详细程度。这些数据从何而来?由谁负责提供?何时提供?
  • 假设和控制逻辑 - 概述您对系统各点逻辑的理解。列出您将作出的任何假设,以便您和所有利益相关者对系统各部分的建模细节有一个共同的理解。例如,在开始建模之前,应就调度、队列优先级和资源分配的细节达成一致。
  • 分析和报告 - 确定谁将参与项目的分析阶段。确定要提交的结果的形式和内容。最终报告的模型是功能规范的重要组成部分。在审查模拟报告时,利益相关者几乎肯定会发现缺少的内容和不必要的内容。此时发现这些问题比在最终项目演示时发现要好得多。
  • 动画 - 模型开发和验证通常需要一定程度的动画。动画对利益相关者有多重要?在许多情况下,利益相关者最初可能会表示动画对他们并不重要。我的一般经验是,一旦利益相关者看过开发过程中制作的二维或三维动画,他们就会认识到动画的交流价值,并要求将其作为交付成果的一部分。
  • 到期日和灵活性--模拟通常是一个发现的过程。在建立模型和了解系统的过程中,您会发现有新的替代方案需要探索,也可能发现模型中需要更多细节的地方。充分探索这些领域可能会使项目更有价值。但是,如果在做出决策后才提供可能的最佳结果,那么这些结果就没有任何价值。何时期待结果?什么时候是绝对的 "夭折 "日期,过了这个日期,结果就没有价值了?

您可能会认为您的项目不需要功能规范,或者认为对于小型项目或内部项目来说,功能规范过于形式化。这并不一定是正式的。但是,每个项目都需要功能规格说明书,而且应该用项目总时间的 5-10% 来完成。即使是一个预计在一天内完成的项目,也应该用 30-60 分钟的时间来定义范围和细节。提前思考的时间在项目后期会得到更多回报。事实上,最好不要把这看作是在项目开始时花费的额外时间,而是项目后期的选定任务提前到最早的阶段。例如,在某些时候,您肯定需要确定您需要哪些数据以及这些数据的来源--将这一步骤移到项目开始阶段会有很大的好处。

在功能规范阶段开发原型对各方都有启发。你可能会发现,开发原型比你想象的要容易或困难得多。即使是最小的项目,通常也值得展示一个快速模型并提出问题:这是你的意思吗?你可能会发现自己与利益相关者的理解完全不同。通常情况下,一个原型模型可以满足利益相关者所提出的大部分需求。他们一看到原型,就会想起之前忽略的复杂情况和所有其他需求。

功能规范阶段的最后一部分是签字确认。每个人都应清楚地认识到,该功能规范定义了项目,当功能规范的所有方面都交付后,项目才算完成并取得成功。理想情况下,最终规范应至少得到主要利益相关者的正式批准,以避免日后出现争议。

项目管理

虽然开始仿真研究的最佳时机是在相关项目生命周期的早期,但遗憾的是,这并不是最常见的情况。 更常见的情况是,在周期的后期遇到问题时才开始考虑仿真,也许是在必须做出最终决定之前的很短时间内。 此时,一切都变得紧迫,甚至可能还没开始就 "迟到 "了。

在这种情况下,人们往往会进入被动反应模式,任由紧迫感牵引着自己先朝一个方向走,然后又朝另一个方向走。而且,跳过重要步骤的压力总是存在,比如决定你想要完成的确切目标(功能规范阶段)。这往往会导致工作流程不尽如人意,甚至项目无法完成。

管理项目,不要让项目管理你。刚做出决定完成的项目价值不大。管理模拟项目是你工作的一部分,这样你才能及时提供有价值的见解。请注意 "有价值的见解 "这几个字。所有模拟都是近似值。虽然近似值更有价值,但粗略的近似值仍能提供有价值的视角。如果没有足够的时间做好整个项目,那么就选择一个子集或一个粗略的近似值,以便在分配的时间内做好。这一点应反映在功能规范的假设中。

模拟通常是一个发现的过程。从准确描述系统到早期仿真结果的过程中,您会不断获得知识。这些新信息往往会推动研究向新的方向发展。在应对这种需求时,一定程度的灵活性是适当的;但是,过于灵活可能会阻碍项目的完成。在这种情况下,你必须迈出艰难的一步,对利益相关者说 "不",并将此类要求推迟到项目的后期阶段。虽然没有人喜欢听到 "不 "这个字,但大多数利益相关者更喜欢诚实的 "不",而不是误导性的 "是"。"是 "的基本意思是:"是的,我会按照你的要求去做,但结果是,项目可能无法在你的期限内取得任何有用的成果。做好时间预算,以便完成重要任务,然后才允许项目探索一些意料之外的方向。

收集输入数据

输入数据这一主题往往会让模拟人员措手不及。这很容易导致项目失败。在计算机和自动化还未普及的时代,通常情况下几乎没有数据可用。而现在,你更有可能被数据淹没。组织数据并使其具有意义往往是一项挑战。

第一个挑战是了解你的数据。这里有一个简单但相当常见的例子:也许您收集了一些机器停机时间数据,当您分析这些数据时,您会发现它们的最短维修时间为 8 分钟,最长维修时间为 32 分钟,最长维修时间为 9.5 小时。如果不进行额外的研究,您可能不会发现最大维修时间还包括 8 小时的下班时间,因为维修是在临近下班时开始的。在模型中错误地使用这些数据很容易产生错误的结果。重要的是要了解自己的数据及其质量如何,"洗刷 "掉任何无效数据,并进行适当的输入分析。

由于收集数据的成本可能很高,因此应评估模拟研究的目标,以确定在哪些方面需要最准确的数据。例如,如果您要评估操作员的利用率,就必须要有足够的与操作员负责的特定任务相关的数据。但是,与系统中对操作员没有影响的另一个区域相关的数据可能可以近似计算。有些软件包含一些功能,可以帮助您评估输入参数对输出响应的影响,并建议您在哪些方面开展额外的数据收集工作。

您还可以使用您的模型和一些试运行,通过确定模型对不同数据值的敏感程度,来帮助确定您在哪些方面需要更好的数据。您应该检查对幅度(如平均值)和变异性(如范围)的敏感性--如果使用其他合理的输入数据时,模型结果变化不大,那么您目前的数据可能足够好。但是,如果您注意到结果发生了显著变化,而幅度或变异性的变化相对较小,那么这可能表明您应该花费更多的时间和精力来确保您拥有该参数的最佳数据。

您已经在功能规范中明确了由谁负责提供数据以及何时提供。为了谨慎起见,应该提前让大家知道什么时候需要数据,以及如果没有数据,项目会在什么时候延误。虽然您可能会将造成项目延迟的责任归咎于他人,但最好还是齐心协力确保项目按时完成并取得成功。

构建并验证模型(迭代)

建立模型是创建一个足以支持实现既定目标的真实系统的过程。验证模型是确保模型真正实现你所想的功能的过程。虽然建立模型和验证模型是两项不同的任务,但我们将它们放在一个主题下讨论,以强调始终反复进行这两项工作的重要性。

构建模型

新手有时会在开始验证之前构建大部分模型,甚至是整个模型。这是导致项目失败的一个重要原因。当您开始验证一个大型模型时,会有太多的事情发生,以至于很难甚至不可能理解详细的交互作用。更有效的方法是采取迭代的方式--先建立模型的一部分,对其进行验证,然后继续向模型中添加更多的逻辑片段。 建立模型的两种非常有效的方法可以概括为 "广度优先 "或 "深度优先"。

在 "广度优先"建模法中,您可以用最低限度的细节构建整个模型或模型的主要部分。然后,您可以在继续之前验证模型是否有效。这样做的好处是可以立即生成一个可能有用的模型。您的第一道工序实际上可能就是功能规范中使用的原型。另一个优点是,您可以更容易地从一个完整的(尽管不是完全详细的)模型中获得利益相关者的反馈,并定期获得关于哪些地方需要更多细节的反馈。有时,作为迭代循环的一部分,您甚至可以进行一定程度的验证(稍后讨论)。

在 "深度优先"建模中,您可以选择系统中的一小部分,并对其进行所需的全面详细建模。您可以对这一模型部分进行全面验证,在极端情况下,再也不必对其进行审查。这种方法的一个优点是可以将模型模块化,这在几个人同时对模型进行操作的情况下尤为重要。新手可能会选择先建立模型的简单部分,以积累经验。经验丰富的模拟师可能会先实施最难或最棘手的部分,以尽早消除一些项目风险。有一定 "敏捷 "背景的建模人员可能会先做优先级最高或最重要的部分。采用后一种方法,在任何阶段都可以完成模型最重要的部分。这有助于降低时间或预算耗尽却无法产生有意义结果的风险。

广度优先 "和 "深度优先 "方法也可以结合使用,交替增加整个模型层面的一些细节,然后再增加(或完成)某个分节的一些细节。但最重要的一点是添加相对较小的模型逻辑部分,然后在添加更多逻辑之前验证每个部分。

在每个验证周期中,您都要明确回答两个问题:我刚刚建立的模型部分是否按我的意图运行(例如,新部分的逻辑中是否存在错误)?当这一新部分与之前构建的模型部分交互时,整个模型是否仍能按预期运行(例如,各部分之间的交互是否存在错误)?随着模型规模的增大,你可能会想把新部分做得更小一些,以便更容易回答第二个问题。

嘿,这很难...

许多仿真供应商都希望您认为建模很简单,只要您选择他们的产品就可以了。公平地说,有些工具比其他工具更容易使用,有些工具在特定的目标应用中比其他工具更容易使用。但是,要建立一个足够详细的复杂模型来有效解决问题,却绝非易事。即使是最有经验的仿真人员,也常常难以解决某些问题。建模工作的很大一部分往往都花在了解决建模问题上。但这也正是建模人员高薪的原因(至少我们建模人员希望如此)。

但 "凡事预则立"。为建模过程中可能出现的问题预留时间,因为这些问题经常会出现。专家用户的一个明显优势是对工具的了解--能够快速、准确地建立模型。与此相关的一个更微妙的优势是知道如何使用工具来识别、隔离和消除模型错误。大多数产品都有一定程度的调试工具。如果您可以选择,请尽可能选择具有最佳调试工具的产品。然后花时间学习如何有效地使用这些工具(见下一节)。

如何验证模型,发现问题后如何隔离?

发现和诊断模型问题的最明显方法是观看动画仔细检查输出结果。大多数产品还提供了各种其他工具来支持模型验证。模型跟踪通常可以提供大量细节,准确说明模型中每一步发生了什么。您可能想从观察单个实体的整个过程开始。通常情况下,软件中会有控件允许您逐步浏览模型,或在特定位置、时间或条件下中断执行。通常会有一个观察窗口,允许您在任何时间或针对任何对象查看详细的系统状态,以帮助进一步澄清正在发生的事情。当然,还可以利用软件提供的仪表盘或其他交互式统计和图形

验证过程肯定是项目中富有启发性且非常必要的一部分。意外的结果并不是问题--它们表明了学习的重要性,而这正是进行模拟的主要原因。无法解释的结果才是问题。当模型产生出乎意料的结果时,您需要使用所有可用的工具来找到解释。在某些情况下,这可能会导致发现必须修复的模型错误。在另一些情况下,这可能会导致 "啊哈 "时刻的到来--对复杂系统如何工作的瞬间启迪。

好听众的帮助

即使采取了上述所有措施,您可能还是会发现有一种情况看起来不太对劲,但又无法解释原因。 这时候就需要进行模型演练了。

找一个好的倾听者,最好是模拟专家或您的利益相关者之一,浏览所有相关的模型部分,并向他们解释发生了什么。如果听者能够理解你的解释并提出问题,那就更好了。但在很大程度上,通过有条不紊地进行互动,你会发现自己的问题。牢记这一点为候选倾听者提供了广阔的可能性。无关的同事、配偶甚至宠物都是很好的候选对象。虽然猫狗有时也是很好的倾听者,但没有什么比宠物金鱼更适合作为听众了。关键在于,大声解释你的模型似乎能打开你大脑的另一部分,让你解决自己的问题。

如何知道自己完成了什么?

如前所述,模型只是真实系统的近似值。通常,建模者和利益相关者都希望模型尽可能准确和全面。为了避免项目无休止、延期和超出预算,你需要回到功能规范文档。您的目标是建立一个足够详细的模型,以实现既定目标,而不是更多!
动画是一个很容易 "迷失 "的领域。动画可能是项目中最有趣、最能让人立即感到满足的工作。让它花费更多的时间是很容易的。大多数软件包都具有一定程度的自动动画功能。对于模型验证来说,这通常已经足够好了。同样,许多软件包都有一定程度的二维或三维动画,而且非常容易生成。通过提供额外的真实度和利益相关者的认可度,一定程度上可以使验证变得更容易。但您必须再次回到功能规范的这一部分。你的最终动画应该足够好,能够满足之前确定的客户目标,而不是更多!

业务影响

验证结果

需要对模型进行验证,以确定模型是否在实现目标所需的程度上代表了现实。有时,您可以在构建模型和验证迭代的过程中完成一定程度的验证,并应利用一切机会这样做。 但您仍需要对已完成的模型进行额外的验证。完美的验证和确认通常是不可能的,因为唯一完美的模型就是真实系统。但是,您可以通过一些方法来证明模型对于项目目的来说足够有效。

一种常见的验证技术是从现有系统的模型开始(假定真实系统存在)。 将 "原样 "模型的结果与真实系统的性能进行比较。 随机比较可以选择一个有代表性的时间段(如 30 天或 30 周),然后比较该时间段内的平均结果。另一种方法是尽可能使模型具有确定性(如使用精确的实体到达时间、精确的故障数据等),然后比较较短时间内的结果。这两种方法各有其价值。在这两种情况下,您都要努力找出并解释任何重大差异。

另一种验证方法是利用利益相关者的经验。他们对系统非常了解,应该能够观看动画并提供一定程度的信心。您还应让他们有机会看到模型在各种情况下的表现,如大流量、小流量或从故障中恢复。理想情况下,利益相关者甚至应该能够自己创建此类情况,例如 "我想看到机器 A 故障......现在"。

虽然单个利益相关者可以提供有价值的见解,但一群来自不同背景的利益相关者可以提供更大的价值。也许工程师会说:"是的,你完全按照我的描述捕捉到了设计。"对此,操作员可能会回答:"也许是这样,但我们实际上绝不会那样做。我们会这样做......"。此时,模拟已经作为一种交流工具发挥了重要作用。在会议的剩余时间里,你的职责是促进讨论并做好记录。

实验、分析和展示结果

在实验阶段,您将生成功能规范中确定的情景。最有可能的是,您还需要根据在项目进展过程中了解到的情况再增加一些方案。通常情况下,开始时的目标是评估四个方案,但在评估过程中发现其中一个方案已不再有意义,而另外两个方案则值得考虑。这是大多数模拟研究的学习和理解能力提高的自然结果。
统计分析的细节不在本文讨论范围之内,但适当的统计分析至关重要。模拟模型往往严重依赖于输入数据的估计值(例如 "我认为通常需要 5-9 分钟")和不充分的样本("基于我们观察到的 12 次事件......"),这是令人遗憾的,但却是事实。寻找可以帮助您了解这些估计值如何影响结果准确性的软件功能。有关适当实验和统计分析的详细介绍,请参阅补充阅读部分。

与项目的所有其他部分一样,确保在计划中为实验和分析留出足够的时间。很多时候,如果你在项目的模型建立、验证或确认阶段落后了,你可能会发现自己的分析时间非常紧张。请记住,进行仿真项目的目的通常是分析各种情况,因此一定要制定相应的计划,并为最终分析阶段留出充足的时间。

您的首要目标应该是帮助利益相关者在所分配的时间和资源范围内做出最佳决策。虽然您可能有其他个人目标,如建立信誉或盈利,但如果您专注于帮助利益相关者,这些目标很可能都会实现。

在撰写报告之前,考虑每个利益相关者的背景和特殊需求。尽管您可能会为自己的模型和解决复杂问题的详细方法感到自豪,但很少有利益相关者会与您有同样的兴趣。大多数利益相关者对以下三点感兴趣:第一,考虑了哪些替代方案。第二,你的结论或建议是什么。第三,你能提供哪些支持信息来增强他们对你的分析的信心。

尽管你需要数据来支持你的结论,但不要用太多的细节来淹没利益相关者。尽量根据需要提供信息。例如,不要简单地说 "平均驾驶员利用率为 76%",而是可以说 "由于平均驾驶员利用率很高(76%),因此在高峰期没有足够的空闲时间赶上而不造成线路延误"。

不要过分夸大输出数据的准确性。承认甚至向利益相关者强调,模型只是一个近似值,不会产生精确的答案。根据数据和建模假设的准确性,以适当的精度显示数据(如 76.2%,而不是 76.2315738%)。大多数利益相关者都能理解 76.2% ± 1.3% 这样的置信区间。

总结

尽管您可能听说过,做好模拟项目并不容易。即使是经验丰富的模拟专家,也有可能在很多方面失败。本文讨论了一些常见的陷阱和避免这些陷阱的方法。虽然遵循这些建议并不能保证一击即中,但肯定会提高命中目标的几率。