【问题标题】:AnyLogic Sensitivity analysis visualizationAnyLogic 灵敏度分析可视化
【发布时间】:2020-09-21 13:04:39
【问题描述】:

我是新手,不知道如何为 AnyLogic 敏感性分析创建可视化。总结如下:

我有在模拟运行结束时捕获因变量和自变量的数据集(最后只捕获一对)。尝试改变自变量以查看对因变量的影响。结果数据集是正确的(当我在 Excel 中复制和粘贴时),但图表看起来是空白的。

此外,输出表明它完成了 5 次迭代,但我指定了 10 次,数据显示实际上有 10 次迭代。

图表数据没有参数(见截图),但我猜它是根据代码在模拟结束时自动填充的(也在下面复制)?否则,我无法弄清楚图表数据中的内容(尝试手动输入变量/数据集无济于事)。

这是每次模拟运行后的代码:

Color color = lerpColor( (getCurrentIteration() - 1) / (double) (getMaximumIterations() - 1), blue, red );
chart0.addDataSet( root.died_friend, format( root.SocFriendBrave ), color, true, `Chart.INTERPOLATION_LINEAR, 1, Chart.POINT_NONE );`

我意识到这是一个非常基本的问题,但我迷失了方向,无法根据我找到的帮助走上正确的道路。谢谢。

【问题讨论】:

  • 谢谢@Felipe。在敏感性实验期间数据集不是空的,我可以从图表中复制实际数据(最后一个截图),我只是无法将它显示在图表上。不确定chart0.addDataSet(... 是否应该在图表中添加数据并试图弄清楚。附言实验中我没有使用java动作填充数据集,我只是将数据集大小定义为1,然后指定在模拟的最后一天更新它。
  • 谢谢你,@Stuart Rossiter。我想我找到了问题所在。虽然输出(缩放器或数据集)是在顶级代理中定义的,但它引用了另一个代理的值(“people.nInfected()”问题已解决。

标签: anylogic


【解决方案1】:

假设您有 2 个实验:模拟(正常的一个)和敏感性分析(新的一个)

图表看起来空白的唯一方法是如果您的数据集 dead_friend 为空。发生这种情况的原因有很多,但我怀疑它发生在这里的原因是因为您在模拟运行结束时用信息填充了这个数据集,这意味着您可能正在使用模拟实验的 java 操作。

灵敏度实验不会读取您在模拟实验的 java 操作上写的内容,所以这可能是问题所在。

如果不是这种情况,您需要在运行敏感性分析时检查数据集为空的其他可能原因。

请记住:您的数据集在模拟实验中有数据这一事实并不一定意味着该数据集在敏感性实验中不会为空。

【讨论】:

    【解决方案2】:

    由于灵敏度分析实验是通过向导设置的,因此最好向我们展示如何设置它,而不是生成 AnyLogic 生成的代码。

    根据您在此处所说的,您可能错误地尝试使用数据集而不是标量值。如果有一个“因变量”(感兴趣的模型输出),那么“自变量”需要是模型参数(您的顶级代理的参数,通常是 Main,实验会有所不同)。

    所以你应该指定:

    • 改变相关参数(看起来你希望它是 0、0.25、0.5、0.75、1,所以最小 0,最大 1,步长为 0.25)

    • 为您想要的标量输出生成图表。 (如果这是一个名为 outputValue 的变量,那么在向导中设置图表时,您将使用表达式 root.outputValue。)

    此外,如果您错误地设置了参数变化标准,您应该只获得超过 5 次迭代。

    (实验图表中的数据集输出通常用于您的模型生成时间序列作为输出的位置 --- 即,模拟时间与值的数据集 --- 并且您希望敏感性分析实验显示图表每次运行的时间序列作为单独的线(即,X 轴上的时间)。标量图表用于 X 轴是变化的参数,Y 轴是感兴趣的输出。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 2017-09-23
      相关资源
      最近更新 更多