首页 文章

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

提问于
浏览
0

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

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

模型说明 .

有一种产品将由两名 Worker 加工 . 基本上,产品必须由3个任务处理,即任务A,任务B和任务C.任务A和C称为“固定任务” . 任务A将由工作站1处的工作人员1完成 . 同样,任务C将由工作站2在工作站2完成 . 但是,任务B,即“共享任务”,可以由任一任务完成 . Worker 1或2在他们自己的车站 . 每当 Worker 1完成任务A时,他必须决定是否将产品放置在 Worker 2的缓冲区以执行共享任务,或者他将自己执行共享任务 . 首先,产品从源块流出,然后由第一个工作站的第一个工作人员处理,在 Worker 1完成他的固定任务后,他将决定是否要执行或将共享任务传递给worker2 . 该决定基于站2前面缓冲区中的子任务总数(让我们分配该值= T) . 将值T与通过计算获得的值R进行比较 . 如果T大于R,那么 Worker 1将执行共享任务,否则他将让 Worker 2执行该操作 . 我的想法是,我在代理(产品)中创建了一个变量,它是要完成的剩余子任务的数量 . 当代理退出selectoutput块时,将嵌入此值true或false . 问题是,在缓冲区,我不知道如何计算T值,这是工作者2必须做的所有剩余子任务的值 . 关于我的问题,如何获得缓冲区中的子任务总数(T)?

Please click to see the model

先感谢您 .

2 回答

  • 1

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

    通常,这种方式比循环更可读 .

  • 0

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

    • 在seize队列中有许多代理

    • 所有代理都是相同的,这意味着它们都包含一个名为"variable"的变量,它可以取任何整数值

    • 您想知道seize队列块中所有代理的变量总和是多少

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

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

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

相关问题