问:[Anylogic]如何计算在seize块队列中等待的所有代理的变量总和?

时间:2017-10-20 15:30:51

标签: production agent anylogic

我还是Anylogic的新手。我需要一个解决问题的建议。 例如,现在有3个代理在seize块的队列中等待。  第一个代理包含变量6  第二个代理包含变量5  第三个代理包含变量6 因此,来自3个代理的变量之和为17。 注意:这三个变量的类型相同(整数)。

问题:我想知道有没有办法计算这个值?

模型说明。

  

有一种产品将由两名工人处理。   基本上,产品必须由3个任务处理,即任务A,任务B和任务C.任务A和C称为“固定任务”。任务A将由工作站1处的工作人员1完成。同样,任务C将由工作站2在工作站2完成。但是,任务B,即“共享任务”,可以由任一任务完成。工人1或2在他们自己的车站。   每当工人1完成任务A时,他必须决定是否将产品放在工人2的缓冲区来执行共享任务,否则他将自己完成共享任务。

     

首先,产品从源块流出,然后由第一个工作站的第一个工作人员处理,在工人1完成他的固定任务后,他将决定是否要做或通过与worker2共享任务。该决定基于站2前面缓冲区中的子任务总数(让我们分配该值= T)。将值T与通过计算获得的值R进行比较。如果T大于R,那么工人1将执行共享任务,否则他将让工人2执行该操作。

     

我的想法是,我在代理(产品)中创建了一个变量,它是要完成的剩余子任务的数量。当代理退出selectoutput块时,将嵌入此值true或false。   问题是,在缓冲区,我不知道如何计算T值,这是工作者2必须做的所有剩余子任务的值。

     

关于我的问题,如何获取缓冲区中的子任务总数(T)?

Please click to see the model

提前谢谢。

2 个答案:

答案 0 :(得分:1)

AnyLogic允许使用Stream API以下列方式收集此类统计信息: seize.queue.waitingEntities.stream().mapToInt( a -> a.variable ).sum();'

通常,这种方式比循环更具可读性。

答案 1 :(得分:0)

这就是我理解你的问题的方法:

  1. 您在抓取队列中有许多代理
  2. 所有代理都是相同的,这意味着它们都包含一个变量,称为"变量"可以采用任何整数值
  3. 您想知道seize队列块中所有代理的变量总和是什么
  4. 如果我理解你的问题,你可以这样做:

    int var=0;
    for(int i=0;i<seize.size();i++){
        var+=seize.get(i).variable;
    }
    

    &#34;无功&#34;为您提供要计算的数字