AnyLogic - 修改代理变量

问题描述

在 AnyLogic 中,我试图根据代理内部的变量创建一个小服务循环。出于某种原因,我的变量没有像我预期的那样改变,我无法让它工作。

在我的块 selectHowMany 中,我有以下代码,它应该修改客户群中的变量:

ped.howMany = ped.howMany + 1.0
ped.howMany = ped.howMany + 2.0
ped.howMany = ped.howMany + 3.0
ped.howMany = ped.howMany + 4.0
ped.howMany = ped.howMany + 5.0

my model with selectHowMany block open

然后,我希望输出确定 ped 是应该去服务还是下沉,这取决于 howMany 变量是否大于 1。为此,我在客户群中有另一个布尔变量 isItEnough,在 output 块中有“if”语句。

  if(agent.howMany < 1.0){
    agent.isItEnough = false;
}

条件:

agent.isItEnough = true

output properties

最后,在每个服务块的出口处,我有以下代码,以便根据行人的动作实际修改变量:

ped.howMany = ped.howMany - 1.0

我的意图是,进入 selectHowMany 街区的行人将定义客户群体内部的变量,以确定该行人将使用其中一个服务街区的次数

无论我如何尝试,行人都不会使用块(无论它退出哪个 selectHowMany 输出),因此修改变量是不正确的。 ped 处于连续循环中,永远不会到达 sink。

我希望有人能够帮助我。

非常感谢, 彼得

解决方法

对于条件,您需要使用两个等号,而不是一个。

agent.isItEnough == true

这是我能够识别的一个错误......如果这不能解决问题,请告诉我。

另一个问题是 AnyLogic 在进入块之前评估选择输出条件。参考另一个问题: Unexpected behavior SelectOutput block in AnyLogic

因此,当您在选择输出的 On Enter 中添加操作时,不会影响该选择输出的决策。如我共享的链接中所述,解决它的一种方法是在放置以下代码的 select 输出元素之前添加一个 0.01 毫秒的虚拟延迟:

 if(agent.howMany < 1.0){
    agent.isItEnough = false;
}