2009 年冬季模拟会议论文集
M.D. Rossetti、R. R. Hill、B. Johansson、A. Dunkin 和 R. G. Ingalls 编辑。
David T. Sturrock
西米欧有限责任公司
504 Beaver St
Sewickley, PA 15143, USA
仿真项目不仅仅是建立一个模型。所需的技能远远超出对特定仿真工具的了解。本文讨论了使项目取得成功的一些重要步骤,以及帮助避免常见陷阱的一些注意事项和技巧。
本文讨论了新手和有抱负的仿真者经常忽略的建模的一些方面。本文特别提供了一些提示和建议,帮助您避免一些常见的陷阱,确保您的第一个项目取得成功。前四个主题涉及确定项目目标、了解系统、创建功能规范和管理项目,但初学者往往对这些主题重视不够。后几节涉及模型的构建、验证、确认和展示,提供了一些行之有效的方法。
首次考虑进行模拟研究时,首先要考虑的是项目目标。为什么有人想要模拟这个系统,他们希望从中得到什么?更具体地说,您必须确定谁是利益相关者,以及他们如何定义成功。
利益相关者是指与项目结果有利害关系的人,也就是关心项目的人。谁是你的利益相关者?"答案似乎很明显--你的经理或客户。但是,如果你去探究为什么有人想要看到这项研究的结果,你可能会发现更多的利益相关者。您是否想提高工厂的生产率?如果是,负责日常系统运行的经理就会希望确保结果准确无误。负责底线的高管会希望看到财务结果。工人代表可能会对工作内容的变化感兴趣。如果员工可能发生变动,人力资源人员可能会对研究结果感兴趣。其他各种运营(维护)和员工(流程工程)职能部门也可能感兴趣。甚至市场部也可能对使用动画进行宣传感兴趣。
每个项目都会有不同的利益相关者,显然有些利益相关者会比其他人更感兴趣。有些利益相关者可能比其他利益相关者更重要。虽然最重要的利益相关者显然必须得到满足,但也不要忽视其他利益相关者。很多时候,不太重要的利益相关者的合作和满意度会决定项目的成败。
务实营销小组创造了一个短语 "你的意见虽然有趣,但无关紧要"。这句话的基本意思是,客户(这里指利益相关者)对项目成功的看法比你自己的看法重要得多。即使你个人认为项目取得了巨大成功,但如果你最重要的利益相关者认为项目是失败的,那么你的项目就是失败的。
了解利益相关者的真实需求和期望非常重要。他们是否希望减少人员或开支?提高利润?提高系统的可预测性或可靠性?增加产出?改善客户服务?在所有情况下,您不仅需要了解他们的价值所在,还需要了解他们是如何衡量这些价值的。
最好还能意识到 "隐藏的目的"。进行仿真分析的真正原因是有人要求他们建立模型吗?有时,客户或资金来源会要求建立一个仿真模型作为合同的条件。在这种情况下,利益相关者的主要目的可能是建立一个模型,以支持他们无论如何都要做的事情。引用一个流行的机器人的话...... "危险,威尔-鲁滨逊!"一开始就提出必须 "证明 "的答案,是需要不惜一切代价避免的情况。
了解了最重要的利益相关者是如何定义(希望还能衡量)成功的,现在你就可以撰写高层次的目标了。这将是进一步讨论项目的起点,以便每个人都有一个共同的愿景。这些信息也为您稍后的详细功能说明提供了一个良好的开端。
如果幸运的话,您正在建模的系统就是您自己的系统,而且您对它非常了解。更常见的情况是,即使该系统为贵公司所有,您对它的了解也不足以对其进行准确建模。每个系统都有一些微妙之处,而这些微妙之处往往非常重要。虽然期望模拟人员了解每个系统是不合理的,但一名优秀的模拟人员应该知道应该提出哪些重要问题,并能够理解问题的答案。
一个好的开始是回顾流程,以便了解关键方面。实体是什么?它们是如何转换的?有哪些制约因素?如果可能的话,利用机会实际走一遍实际或类似的设施,以发现在讨论或图表审查中可能遗漏的东西。
提出问题。问更多的问题。向不同的人提出相同的问题,不要对得到的不同答案感到惊讶。这一阶段的目标不是解决问题,而是充分了解问题和系统,以便对工作进行描述和估算。这一阶段的部分工作是确定您还不知道什么,以便在项目中留出时间和风险来进行了解。
有一句古老的格言说:"如果你不知道要去哪里,你怎么知道什么时候能到达那里?在模拟项目中尤其如此。功能规范明确了模型的范围和详细程度。最重要的是,它明确定义了交付成果。它既定义了目标,也定义了可交付成果,还确定了每个人如何知道何时完成。
功能规范应明确项目,并使每个人对可交付成果达成共识。主题应包括
在功能规范阶段开发原型对各方都有启发。你可能会发现它比你想象的要容易或困难得多。即使是最小的项目,通常也值得展示一个快速模型并提出问题:这是你的意思吗?你可能会发现自己与利益相关者的理解完全不同。通常情况下,一个原型模型可以满足利益相关者提出的大部分需求。但他们一看到原型,就会想起之前忽略的复杂情况和所有其他需求。
功能规范阶段的最后一部分是签字确认。每个人都应该清楚地认识到,该功能规范定义了项目,当功能规范的所有方面都交付后,项目才算完成并取得成功。理想情况下,最终规范应至少得到主要利益相关者的正式批准,以避免日后出现争议。
虽然开始仿真研究的最佳时机是在相关项目生命周期的早期,但遗憾的是,这并不是最常见的情况。更常见的情况是,在周期的后期遇到问题时才开始考虑仿真;也许是在必须做出最终决策前不久。此时,一切都变得紧迫起来,甚至可能还没开始就 "迟到 "了。
在这种情况下,人们往往会进入被动反应模式,任由紧迫感牵引着自己先朝一个方向走,然后又朝另一个方向走。而且,跳过重要步骤的压力总是存在,比如决定你想要完成的确切目标(功能规范阶段)。这往往会导致工作流程不尽如人意,甚至项目无法完成。
管理项目,不要让项目管理你。刚做出决定就完成的项目价值不大。管理模拟项目是你工作的一部分,这样你才能及时提供有价值的见解。请注意 "有价值的见解 "这几个字。所有模拟都是近似值。虽然近似值更有价值,但粗略的近似值仍能提供有价值的见解。如果没有足够的时间做好整个项目,那么就选择一个子集或一个粗略的近似值,以便在分配的时间内做好。这一点应反映在功能规范的假设中。
模拟通常是一个发现的过程。从准确描述系统到早期仿真结果的过程中,您会不断获得知识。这些新信息往往会推动研究向新的方向发展。在应对这种需求时,一定程度的灵活性是适当的;但是,过于灵活可能会阻碍项目的完成。在这种情况下,你必须迈出艰难的一步,对利益相关者说 "不",并将此类要求推迟到项目的后期阶段。虽然没有人喜欢听到 "不 "这个字,但大多数利益相关者更喜欢诚实的 "不",而不是误导性的 "是"。"是 "的基本意思是:"是的,我会按照你的要求去做,但结果是,项目可能无法在你的最后期限内取得任何有用的成果。做好时间预算,以便完成重要任务,然后才允许项目探索一些意料之外的方向。
输入数据这一主题往往会让模拟人员措手不及。这很容易导致项目失败。在计算机和自动化还未普及的时代,通常情况下只有很少或根本没有数据可用。而现在,你更有可能被数据淹没。组织数据并使其具有意义往往是一项挑战。
第一个挑战是了解你的数据。这里有一个简单但相当常见的例子:也许您收集了一些机器停机时间数据,当您分析这些数据时,您会发现它们的最短维修时间为 8 分钟,最长维修时间为 32 分钟,最长维修时间为 9.5 小时。如果不进行额外的研究,您可能不会发现最大维修时间还包括 8 小时的下班时间,因为维修是在临近下班时开始的。在模型中错误地使用这些数据很容易产生错误的结果。重要的是要了解您的数据及其质量如何,"擦洗 "掉任何无效数据,并进行适当的输入分析。
由于收集数据的成本可能很高,因此应评估模拟研究的目标,以确定在哪些方面需要最准确的数据。例如,如果您要评估操作员的利用率,就必须要有足够的与操作员负责的特定任务相关的数据。但是,与系统中对操作员没有影响的其他领域相关的数据可能可以近似计算。
您还可以使用模型和一些试运行,通过确定模型对不同数据值的敏感程度,来帮助确定在哪些方面需要更好的数据。您应该检查对幅度(如平均值)和变异性(如范围)的敏感性 - 如果使用其他合理的输入数据时,模型结果几乎没有变化,那么您目前的数据可能足够好。但是,如果您注意到结果发生了重大变化,而幅度或变异性的变化相对较小,那么这可能表明您应该花费更多的时间和精力来确保您拥有该参数的最佳数据。
您已经在功能规范中明确了由谁负责提供数据以及何时提供。为了谨慎起见,应该提前让大家知道什么时候需要数据,以及如果没有数据,项目会在什么时候延误。虽然您可以将造成项目延迟的责任归咎于他人,但最好还是齐心协力确保项目按时完成并取得成功。
建立模型是创建一个足以支持实现既定目标的真实系统的过程。验证模型是确保模型真正实现你所想的功能的过程。虽然建立模型和验证模型是两项不同的任务,但我们将它们放在一个主题下讨论,以强调反复进行这两项任务的重要性。
新手有时会在开始验证之前构建模型的大部分,甚至整个模型。这是导致项目失败的一个重要原因。当您开始验证一个大型模型时,会有太多的事情发生,以至于很难或不可能理解详细的交互作用。更有效的方法是采取迭代方法--构建模型的一部分,验证它,然后继续向模型添加更多的逻辑片段。建立模型的两种非常有效的方法可以概括为 "广度优先 "或 "深度优先"。
在 "广度优先 "建模法中,您可以用最低限度的细节构建整个模型或模型的主要部分。然后,您可以在继续之前验证模型是否有效。这样做的好处是可以立即生成一个可能有用的模型。您的第一道工序实际上可能就是功能规范中使用的原型。另一个优点是,您可以更容易地从一个完整的(尽管不是完全详细的)模型中获得利益相关者的反馈,并定期获得关于哪些地方需要更多细节的反馈。有时,作为迭代循环的一部分,您甚至可以进行一定程度的验证(稍后讨论)。
在 "深度优先 "建模中,您可以选择系统中的一小部分,并对其进行所需的全面详细建模。您可以对这一模型部分进行全面验证,在极端情况下,再也不必对其进行审查。这种方法的一个优点是可以将模型模块化,这在几个人同时对模型进行操作的情况下尤为重要。新手可能会选择先建立模型的简单部分,以积累经验。经验丰富的模拟师可能会先实施最难或最棘手的部分,以便在早期消除一些项目风险。有一定 "敏捷 "背景的建模人员可能会先做优先级最高或最重要的部分。采用后一种方法,在任何阶段都可以完成模型最重要的部分。这有助于降低耗尽时间或预算却无法产生任何有意义结果的风险。
广度优先 "和 "深度优先 "方法也可以结合使用,交替增加整个模型层面的一些细节,然后再增加(或完成)某个分节的一些细节。但最重要的一点是增加相对较小的模型逻辑部分,然后在增加更多逻辑之前对每个部分进行验证。
在每个验证周期中,您都要明确回答两个问题。我刚刚建立的模型部分是否按照我的预期运行(例如,新部分的逻辑中是否存在错误)?当这个新部分与之前构建的模型部分交互时,整个模型是否仍能按预期运行(例如,各部分之间的交互是否存在错误)?随着模型规模的扩大,您可能希望将新部分的规模缩小,以便更容易回答第二个问题。
发现和诊断模型问题的最明显方法是观看动画和检查输出结果。意外的结果并不是问题,而是进行模拟的主要原因。无法解释的结果才是问题。当模型产生出乎意料的结果时,您需要使用所有可用的工具来找到解释。在某些情况下,这可能会导致发现一个必须修复的错误。在其他情况下,这可能会带来 "啊哈 "时刻--对复杂系统工作原理的醍醐灌顶。
大多数产品都有各种工具来支持模型验证。模型跟踪通常可以提供大量细节,准确说明模型中一步步发生了什么。您可能想从观察单个实体的整个过程开始。通常情况下,软件中会有一些控件,允许您逐步浏览模型,或在特定位置、时间或条件下 "中断 "执行。通常会有一个观察窗口,允许您在任何时间或针对任何对象查看详细的系统状态,以帮助进一步澄清正在发生的事情。当然,还可以利用软件提供的仪表盘或其他交互式统计和图形。验证过程肯定是项目中富有启发性且非常必要的一部分。
即使采取了上述所有措施,您可能还是会发现有一些情况看起来不太对劲,但又无法解释其原因。这时候就需要进行模型演练了。
找一个好的倾听者,最好是模拟专家或您的利益相关者之一,浏览所有相关的模型部分,并向他们解释发生了什么。如果你的听众能够理解你的解释,那就更好了。
但在很大程度上,通过有条不紊地进行互动,你会发现自己的问题。牢记这一点为候选倾听者提供了广阔的可能性。无关的同事、配偶甚至宠物都是很好的候选对象。虽然猫狗有时也是很好的倾听者,但没有什么比宠物金鱼更适合作为听众了。关键在于,大声解释你的模型似乎能打开你大脑的另一个部分,让你解决自己的问题。
如前所述,模型只是真实系统的近似值。通常,建模者和利益相关者都希望模型尽可能准确和全面。为了避免项目无休止、延期和超出预算,你需要回到功能规范文档。您的目标是建立一个足够详细的模型来实现既定目标,而不是更多!
动画是一个很容易 "迷失 "的领域。动画可能是项目中最有趣、最能让人立即感到满足的工作。让它花费更多的时间是很容易的。大多数软件包都具有一定程度的自动动画功能。对于模型验证来说,这通常已经足够好了。同样,许多软件包都有一定程度的二维或三维动画,而且非常容易生成。通过提供额外的真实度和利益相关者的认可度,一定程度上可以使验证变得更容易。但您必须再次回到功能规范的这一部分。您的最终动画应该足够好,以满足之前确定的客户目标,而不是更多!
需要对模型进行验证,以确定模型是否在满足目标所需的程度上反映了现实。有时,您可以在模型构建和验证迭代过程中完成一定程度的验证,并应利用一切机会进行验证。但您仍然需要对完成的模型进行额外的验证。完美的验证和确认通常是不可能的,因为唯一完美的模型就是真实系统。但是,您可以尝试用一些方法来证明模型对于项目目的来说足够有效。
一种常见的验证技术是从现有系统的模型开始(假设真实系统存在)。将 "原样 "模型的结果与实际系统的性能进行比较。随机比较可以选择一个有代表性的时间段(如 30 天或 30 周),然后比较该时间段内的平均结果。另一种方法是尽可能使模型具有确定性(例如,使用精确的实体到达时间、精确的故障数据等),然后比较较短时间内的结果。这两种方法各有其价值。在这两种情况下,您都要努力找出并解释任何重大差异。
另一种验证方法是利用利益相关者的经验。他们对系统非常了解,应该能够观看动画并提供一定程度的信心。您还应让他们有机会看到模型在各种情况下的表现,如大流量、小流量或从故障中恢复。理想情况下,利益相关者甚至应该能够自己创建此类情况,例如 "我想看到机器 A 故障......现在"。
虽然单个利益相关者可以提供有价值的见解,但一群来自不同背景的利益相关者可以提供更大的价值。也许工程师会说:"是的,你完全按照我的描述捕捉到了设计",而操作员可能会回答:"也许是这样,但我们实际上不会那样做。我们会这样做......"。此时,模拟已经作为一种交流工具发挥了重要作用。在会议的剩余时间里,你的作用是促进讨论并做记录。
在实验阶段,您将生成功能规范中确定的情景。很有可能,您还需要根据项目进展过程中了解到的情况增加一些情景。统计分析的细节不在本文讨论范围之内,但正确的统计分析至关重要。有关适当的实验和统计分析的详细介绍,请参阅补充阅读部分。
与项目的所有其他部分一样,确保在计划中为实验和分析留出足够的时间。很多时候,如果你在项目的模型建立、验证或确认阶段落后了,你可能会发现自己的分析时间非常紧张。请记住,进行仿真项目的目的通常是分析各种情况,因此一定要制定相应的计划,并为最终分析阶段留出充足的时间。
您的首要目标应该是在时间和资源分配允许的情况下,帮助利益相关者做出最佳决策。虽然您可能有其他个人目标,如建立信誉或盈利,但如果您专注于帮助利益相关者,这些目标很可能都会实现。
在撰写报告之前,考虑每个利益相关者的背景和特殊需求。尽管您可能会为自己的模型和解决复杂问题的详细方法感到自豪,但很少有利益相关者会与您有同样的兴趣。大多数利益相关者对三件事感兴趣。第一,考虑了哪些替代方案。第二,你的结论或建议是什么。第三,你能提供哪些支持信息来增强他们对你的分析的信心。
尽管您需要数据来支持您的结论,但不要用太多的细节来淹没利益相关者。尽量根据需要提供信息。例如,不要简单地说 "平均驾驶员利用率为 76%",而是可以说 "由于平均驾驶员利用率很高(76%),因此在高峰期没有足够的空闲时间赶上而不造成线路延误"。
不要过分夸大输出数据的准确性。承认甚至向利益相关者强调,模型只是一个近似值,不会产生精确的答案。根据数据和建模假设的准确性,以适当的精度显示数据(例如 76.2%,而不是 76.2315738%)。尽可能显示数字的准确性。大多数利益相关者都能理解 76.2% ± 1.3% 这样的置信区间。
不管你听说过什么,做好模拟项目并不容易。即使是经验丰富的模拟专家,也有可能在很多方面失败。本文讨论了一些常见的陷阱和避免这些陷阱的方法。虽然遵循这些建议并不能保证一定会成功,但肯定会提高您命中目标的几率。
其他阅读
Banks, J., J. S. Carson, B. L. Nelson, and D. M. Nicol.2010.离散事件系统仿真》。第 5 版。Upper Saddle River, New Jersey:Prentice-Hall, Inc.
Law, A. M. 2007.Simulation Modeling & Analysis.4th ed.New York:McGraw-Hill, Inc.
Sadowski, D. A. and M. R. Grabau.1999.成功实践模拟的技巧》。In Proceedings of the 1999 Winter Simulation Conference, ed.. P. A. Farrington, H. B. Grabau.P. A. Farrington, H. B. Nembhard, D. T. Sturrock, and G. W. Evans, 60-66.新泽西州皮斯卡塔韦:新泽西州皮斯卡塔韦:电气与电子工程师协会。
Sturrock, D. T., Success in Simulation, Ongoing blog and discussion at .
下载 PDF 版本