我还是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)?
提前谢谢。
答案 0 :(得分:1)
AnyLogic允许使用Stream API以下列方式收集此类统计信息:
seize.queue.waitingEntities.stream().mapToInt( a -> a.variable ).sum();'
通常,这种方式比循环更具可读性。
答案 1 :(得分:0)
这就是我理解你的问题的方法:
如果我理解你的问题,你可以这样做:
int var=0;
for(int i=0;i<seize.size();i++){
var+=seize.get(i).variable;
}
&#34;无功&#34;为您提供要计算的数字