Anylogic处理时间的移动平均值

时间:2018-11-19 17:26:57

标签: java simulation anylogic agent-based-modeling

在我的模型中,我有9个不同的服务块,每个服务可以产生9个不同的功能。每种组合都有不同的延迟时间和标准偏差。例如,功能3在服务块8中需要5分钟,偏差为0.05,而在服务块4中仅需要3分钟,偏差为0.1。

如何永久跟踪每个组合的最后5次所需时间并计算平均值(如移动平均值)?我想使用平均值让产品根据比较所有机器针对相应功能的过去时间的短路时间,来决定为相应功能选择哪个服务块。产品代理已经具有进入服务时间的参数,并通过从离开服务块的时间中减去输入时间来计算处理时间。

感谢您的支持!

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解您的要求,但这可能是答案:

要跟踪最近5次需要的时间,您可以使用分析面板中的数据集,将样本数限制为5 ...

dataset

您将使用dataset.add(yourTimeVariable);更新数据集,以便将数据集的垂直轴值保留为空。

我假设每个功能需要1个数据集

然后您可以计算自己的移动平均值:

dataset.getYMean();

如果需要81个数据集,则可以创建一个元素类型为DataSet的集合作为ArrayList 在“主要”属性的“启动时”中,可以添加以下代码,其效果相同。

for(int i=0;i<81;i++){
    collection.add(new DataSet( 5, new DataUpdater_xjal() {
        double _lastUpdateX = Double.NaN;
        @Override
        public void update( DataSet _d ) {
          if ( time() == _lastUpdateX ) { return; }
          _d.add( time(), 0 );
          _lastUpdateX = time();
        }
        @Override
        public double getDataXValue() {
          return time();
        }
      } )
  );
}

您只需记住与什么服务块和功能相对应的内容,然后就可以

collection.get(4).getYMean();

并向数据集添加新值:

collection.get(2).add(yourTimeVariable);