Java Anylogic处理时间的移动平均值

Java Anylogic处理时间的移动平均值,java,simulation,anylogic,agent-based-modeling,Java,Simulation,Anylogic,Agent Based Modeling,在我的模型中,我有9个不同的服务块,每个服务可以产生9个不同的功能。每种组合都有不同的延迟时间和标准偏差。例如,功能3在服务块8中需要5分钟,偏差为0.05,但在服务块4中只需要3分钟,偏差为0.1 如何永久跟踪每个组合的最后5次所需时间并计算平均值(如移动平均值)?我想使用平均值,让产品根据比较所有机器各自功能的过去时间的最短时间,决定为各自功能选择哪个服务块。产品代理已经有一个进入服务时间的参数,还有一个通过从离开服务块的时间中减去进入时间来计算处理时间 谢谢你的支持 我不确定我是否理解你的

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

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


谢谢你的支持

我不确定我是否理解你的问题,但这可能是一个答案:

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

您将使用
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(2).add(yourTimeVariable);

这意味着我需要9*9=81个数据集的总和?我希望我能避免…哦,我以为你只需要9,如果答案完全不同,我会为此写一个答案,我编辑了这个问题。这为您提供了一种方法,但实际上有一种更好的方法使用类,在这种情况下,您也可以分配一个功能和一个serviceBlock。。。我以后可能会这样做,如何使用集合作为ArrayList向数据集添加时间?
collection.get(2).add(yourTimeVariable);