【问题标题】:Agent time-in-state statistics代理状态时间统计
【发布时间】:2018-09-10 18:12:06
【问题描述】:

我很想知道 AnyLogic 社区在状态统计中记录时间的不同方法。为了解释我的意思,我举个例子:

假设我正在为一个有多个电影院的电影院建模。每个电影院都被建模为具有状态图的代理,其中电影院可以处于多种状态之一:

  • 空闲(当前未使用电影院)
  • 满座(电影院已开张,满座)
  • InSession(正在播放电影)
  • 清空(电影结束后顾客​​开放,顾客离开)
  • 弄脏了(电影放映后电影院是空的,但尚未清理)
  • 清洁(清洁工正在做他们的事情)

假设我现在想要记录和输出关于每个电影院所处状态的时间和计数的统计数据:

电影院 1 州:

+-----------+-------------+--------------+--------------+
| State     | Occurrences | Average Time | % Total Time |
+-----------+-------------+--------------+--------------+
| Idle      | 25          | 60           | 20%          |
+-----------+-------------+--------------+--------------+
| Filling   | 50          | 20           | 10%          |
+-----------+-------------+--------------+--------------+
| InSession | 50          | 90           | 40%          |
+-----------+-------------+--------------+--------------+
| Etc.      | ...         | ...          | ...          |
+-----------+-------------+--------------+--------------+

请分享您在 AnyLogic 中用于实现此目的的技术。

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    无论你做什么,你都需要创建一个收集信息的变量......

    发生次数:
    您有一个名为occurrences 的变量,它从0 开始,每次代理进入状态时递增1。您可以计算以后所有代理的平均值 average(cinemas,c->c.occurrences)

    平均时间:
    您可以使用代理调色板中的集合或数据集或分析中的统计信息。有很多方法可以做到这一点,我不会在这里列出它们,但是数据集和统计对象有自己的平均值(getYmean 和分别表示)您可以使用的功能。 在状态空闲的情况下,您必须有一个变量 timeIdle 例如,每当状态空闲时,您都会在每个时间单位递增

    if(inState==idle) timeIdle+=timeUnit
    

    当代理退出状态时,或者在模拟结束时,或者当你想要测量值时,如果你正在使用数据集,你可以做 data.add(timeIdle) ,当你需要检索时如果是数据集对象,则可以执行 data.getYmean() 的平均时间,如果是统计对象,则可以执行 data.mean()

    %总时间:
    同样的事情有一个名为 percTotalTime 的变量...在您需要读取值时执行 percTotalTime=timeIdle/time()

    你必须为每个州做同样的事情。

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 1970-01-01
      • 2023-01-05
      • 2018-12-25
      • 1970-01-01
      • 2011-10-13
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多