繁体   English   中英

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

[英]Q: [Anylogic] How to calculate the sum of variables of all agents that is waiting in the queue of seize block?

我仍然是Anylogic的新手。 我需要解决这个问题的建议。 例如,现在seize块的队列中有3个代理程序正在等待。 第一代理包含变量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执行共享任务。

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

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

请点击查看模型

先感谢您。

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

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

这就是我对您的问题的理解:

  1. 扣押队列中有许多座席
  2. 所有代理都相同,这意味着它们都包含一个称为“变量”的变量,该变量可以采用任何整数值
  3. 您想知道seize队列块中所有代理的变量总和是多少

如果我正确理解了您的问题,您可以这样做:

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

“ var”为您提供您要计算的数字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM