当前位置: 首页 > 知识库问答 >
问题:

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

韦泳
2023-03-14

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

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

有一个单一的产品将由两个工人加工。基本上,一个产品要由3个任务来处理,这3个任务是任务a、任务B和任务C,任务a和任务C被称为“固定任务”(fixed-task)。任务A将由工人1在工作站1完成。以同样的方式,任务C将由工人2在工位2完成。然而,作为“共享任务”的任务B可以由工人1或工人2在他们自己的站点上完成。每当工人1完成任务A时,他必须决定是将产品放置在缓冲区中以供工人2完成共享任务,还是由他自己完成共享任务。

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

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

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

提前谢谢你。

共有1个答案

邢博涛
2023-03-14

AnyLogic允许以以下方式使用Stream API收集此类统计信息:Sequee.Queue.WaitingEntities.Stream().MaptoInt(a->a.variable).sum();'

通常,这种方式比for loop更易读。

 类似资料:
  • 如何在Anylogic中获取块队列中的代理列表?在我的模型中,目前位于队列中的每个代理A都是包含一些代理B的容器。我必须计算代理B。为此,我尝试获取队列中代理A的列表: 但是队列。contents()返回一个空列表。你能帮我吗?谢谢。

  • 直接问题:如何检查代理是否在等待块中等待? 更多细节?下面,谢谢。 我按照费利佩先生对一个类似问题的回答(这个问题:任何逻辑-将多个项目组合回原始所有者) 在回答的第4步中,他说“在passengerWait上,在Oneter操作中,您将检查连接到乘客的所有行李是否都在bagWait块上……如果在bagWait块上……那么您将释放(wait.free(agent))乘客和行李” 你知道怎么检查这个

  • 我正在AnyLogic中构建DES-ABM混合模型。代理通过DES块,其中有多个延迟块。 我该怎么办 访问处于延迟块或延迟状态的代理 访问触发延迟块“进入”操作的特定代理 我的最终目标是在代理框架上打开或关闭一个阀门对象,这样我才能/如何打开或关闭a.在代理框架上打开或关闭阀门,直接形成主/根框架(延迟块位于该框架上),或者如果这是不可能的B.在特定代理内发送消息或触发状态图,然后从特工自己的框架

  • 我有一艘容量为1750 pp的船,根据时间表每2小时离开港口一次。乘客到达等候区后,如果满足以下条件,他们可以离开该区域: 码头上有一艘船 (离开等候区的已上船乘客人数) 所有这些条件都正常工作,但由于到达码头需要时间,而且根据安全协议,我想在船只出发前2分钟停止客流,以免乘客没有登上码头。 如何将船期(名为schDepartureBoat1)与乘客等待区(名为waitForBoat1)联系起来?

  • 我开始使用Anylogic作为模拟类,为此我需要对以下行为建模:有一个代理流进入FIFO队列,然后进入服务器(我用延迟块建模),一次一个。代理有两种状态(称为A和B),如果一个代理以状态A到达队列的末尾,它必须等待直到返回到状态B才能进入服务。 我认为在队列和延迟块之间为一个代理提供容量的等待块可能会解决这种情况。但我不知道如何使等待块在代理改变状态时立即释放它。

  • 问题内容: 队列侦听器未在服务器上启动,某些作业已推送(使用Redis驱动程序)。 我该如何计算(或获得全部)这些论文工作?我没有找到任何工匠命令来获取此信息。 问题答案: 如果有人还在这里寻找答案,那是我的方法: 是Redis连接名称,默认情况下为空,并且是队列/管道的名称,默认情况下为“默认”!