服务热线:010-62964229
格瑞纳根植于教育行业,让仿真软件从理论教学到应用实践
新闻资讯
当前位置:首页 > 新闻资讯 > 行业新闻
经验分享 | 仿真模型生命周期(第4部分)—— 校核和验证
2023-03-10 17:20:58 发布人:admin 阅读 1153

本文分享了由Vitor Lemos编写的关于AnyLogic的使用实践技巧,希望能为正在学习或使用AnyLogic的用户提供帮助。

作者:Jaco-Ben Vosloo

更新:Feb 22, 2022

阅读时间:7 min

本系列文旨在从头到尾,对仿真项目的生命周期进行说明,并给出一些最佳实践和实用建议。

这篇文章是关于仿真模型生命周期的 7 部分系列文章的第 4 部分。 你可以点击查看以前的文章。


仿真模型的生命周期

  1. 调查结果报告
    1.定义问题
    2.处理数据
    3.构建模型
    4.校核和验证
    5.实验
    6.分析结果
    7.调查结果报告

注意:在后面的步骤中可能会“返回”前面的步骤中执行一些活动,但并不需要重做整个步骤。 上面列出的步骤是典型项目遵循的一般步骤。在所有步骤中,您都可以后退并重新访问之前的步骤,但在完成至少 80%-90% 的步骤之前,您不太可能跳过一个步骤或向前移动。

4)校核和验证

首先有一件事情要做——就是对两个术语的定义达成一致,因为有时这些词会带来很多不必要的麻烦。

校核(Verification):检查模型是否符合您的设计目标

这应该包括检查模型设计和架构的质量,以及代码的结构。 这可以通过测试、检查、设计分析等来完成,通常应该先由建模人员完成,然后由其他人完成,这个其他人可以是另一个团队成员,甚至是外部人员。

最基本的校核形式是使用单元测试,但您也可以使用动画来直观地校核模型是否在做它应该做的事情。目视检查的问题在于它不是自动化的,或者是在没有相关知识的人 “观看”仿真的情况下运行。我们在上一篇文章中介绍了单元测试。其中一个关键部分是通过对数据进行一些汇总分析来审查模型的输出数据。 这不仅可以校核您是否正在记录模型范围中定义的所需结果,还可以检查您是否正确记录了它们,最后,它还在某种程度上校核了模型逻辑。

校核相对客观,是非分明。 您的模型通过或未通过单元测试。 它要么正确记录和计算指标或关键绩效指标,要么不正确。 它要么做它应该做的,要么没做到。 对于校核,只有100%是可以接受的。

所以在校核里,你要确保无论你在做什么,你都做对了!这非常重要!任何值得做的事情都值得正确地去做,否则你就是在浪费你的时间,也在浪费所有相关人员的时间。

验证(Validation):检查是否(适当地)符合实际

这一步是我们检查模型输出是否匹配的,确定仿真模型代表实际系统的正确性程度,如果情况允许,要检查历史和预期结果。典型的做法是通过使用包含非常低级的详细数据来检查模型的内部逻辑,以及通过高级汇总数据来验证总体预期结果。

团队中的每个人都必须知道,验证阶段是非常主观的。您不能也永远不会 100% 匹配历史输出或预期现实。尤其是在具有高波动性和异常事件的环境中,想要能够匹配任意一组输出数据是不可能的。

影响验证过程的一些因素包括:


验证是非常重要的,它设定了模型结果应该如何使用的界限,并定义了如何解释结果效用的视角。如果创建了某个假设未来场景的模型,那么验证将与基于我们当前对未来系统的理解的预期结果和假设模型结果相对比。这将构建我们查看结果的方式,并基于当前的一些假设了解结果的准确性。

另一方面,如果您的模型是当前系统的副本,并且您将测试当前系统的更改验证级别,则模型结果的置信度将基于输入数据和记录的输出数据的准确性。

如果我要写一篇关于这个主题文章和详细例子,我可以洋洋洒洒写下很多内容,但最终我并没有过多的赘述,验证更像是一门艺术而不是一门科学。 它是具有争议的、主观性的,并且依赖于团队的整体经验和专业知识以及模型想要实现的目标。

现在......让我们看一个验证的示例,确认部分我们在上一篇文章——单元测试中已经做了介绍!

零售商示例 - 验证输出

让我们看一下如何使用前几篇文章中的示例模型在 AnyLogic 中执行此操作。您可以从我们在第 3 步中提供的模型开始工作。在此示例中,我们将了解如何从您的模型轻松创建可用于数据验证阶段的低级数据报告。 我们将只进行一次运行,但对于更具统计有效性的练习,您需要运行多次迭代。 我们将在以后的帖子中介绍一些内容——所以请注意这个空间。

Step 1 :添加并设置一个txt文件对象

通过使用 AnyLogic 的一项更高级的功能,您可以简单地将文本文件对象拖到Main中并将模式设置为“写入(Write)”


您还可以通过使用 println() 函数打印单行来在文本文件中设置标题行。 在这个例子中,我们只有一列,所以我们只向第一个条目“Customer Queue Time”添加一个普通字符串,但是如果您有许多列,您可以使用分隔符分隔文本,例如“,” 用于 CSV 或 "\t" 用于制表符等。例如,可以使用 println("Customer Queue Time \t Customer ID") 创建制表符分隔的文件。


Step 2 :将结果输出到文本文件

现在我们需要将我们想要的数据保存在文本文件中。 对于我们非常简单的示例,我们简单地将队列等待时间记录为:当前时间 - 到达时间 - 服务时间。 剩下的时间就是顾客在队列中等待服务的时间。 (这在上一篇文章中已经记录并添加到模型中)

现在,我们唯一添加的是在文本文件中打印一行数据:队列等待时间(queue waiting time)。

customerQueueTime.println(queueWaitingTime);


注意! 如果我们想在不关闭模型的情况下访问它,我们还必须记住关闭文本文件!


专业提示:为您的输出文件添加下载按钮

如果您使用的是 AnyLogic 的专业版,您将可以访问下载按钮,这为模型添加了友好的交互性。


以下是使用这种方法的一些好处:

如果您有很多单独的文件要下载,您也可以在下载之前将它们全部压缩在一起,但在以后的文章中会对此进行更多介绍;-)(如果您想知道答案,只需搜索它.. .使用基于Java的仿真平台是一件好事)

Step 3 :验证

现在您有了数据,您可以轻松地将其与历史数据、您的预期结果或测试一些假设进行比较。

以下是我们模型的仿真数据与实际数据的一些示例输出比较。



注意(再次)!这些都来自一次运行——为了进行统计上有效的比较和更深入的分析,需要运行多次复制并将组合或平均输出与实际值进行比较。

P.S.正如我们之前提到的,验证是非常主观的,因此在这里我们不打算深入研究细节,但是为了这个例子和未来帖子的有效性,我们假设这些结果是项目团队可以接受的;-)

总结一下

在这篇文章中,我们研究了确认和验证之间的区别,并讨论了为什么它在仿真模型生命周期中如此重要。相较于上一篇文章,我们确实在复杂性规模上下降了一个档次,并做了一个非常简单的示例,说明如何轻松记录模型的详细输出数据并让用户随时可用。

在下一篇文章中,我们将着眼于实验阶段,并着眼于稍微先进的方法来快速地运行多个实验并记录它们的数据。

  电话:010-62964229
  邮箱:support@carila.cn
  地址:北京市海淀区上地信息产业基地三街3号楼1门4层401
©2021 北京格瑞纳电子产品有限公司 版权所有 京ICP备19024141号 京公网安备 11010802029095号
 
QQ在线咨询
点击这里给我发消息 点击这里给我发消息
服务热线
010-62964229
E-mail
support@
carila.cn
地址:北京市海
淀区上地信息产
业基地三街3号