【问题标题】:Anylogic moving average of processing times处理时间的任何逻辑移动平均值
【发布时间】:2019-04-22 02:49:27
【问题描述】:

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

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

感谢您的支持!

【问题讨论】:

    标签: java simulation anylogic agent-based-modeling


    【解决方案1】:

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

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

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

    我假设每个特征需要 1 个数据集

    然后你可以计算你的移动平均线:

    dataset.getYMean();
    

    如果您需要 81 个数据集,则可以将集合创建为元素类型为 DataSet 的 ArrayList 而在 Main 属性上,在 On Startup 中可以添加如下代码,效果是一样的。

    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);
    

    【讨论】:

    • 这意味着我总共需要 9*9 = 81 个数据集?我希望我能避免这种情况..
    • 哦,我以为你只需要9个,那样的话答案就完全不同了,我会为此写一个答案
    • 我编辑了这个问题。这为您提供了一种方法,但实际上使用类有更好的方法,在这种情况下,您也可以分配一个特性和一个 serviceBlock ......我可能稍后会这样做
    • 我如何使用集合作为 ArrayList 向数据集添加时间?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2019-07-06
    • 2020-11-24
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多