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

我的模型与selectHowMany块打开

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

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

条件:

agent.isItEnough = true

输出属性

最后,在每个服务区的出口处,我有以下代码,因此变量实际上是根据行人的行为进行修改的:

ped.howMany = ped.howMany - 1.0

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

无论我如何尝试,行人都不会使用块(无论它退出哪个selectHowMany输出(,所以修改变量是不正确的。ped是连续循环的,它永远不会到达水槽。

我希望有人能帮助我。

非常感谢,Peter

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

agent.isItEnough == true

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

另一个问题是AnyLogic在进入块之前评估选择输出条件。请参阅其他问题:AnyLogic 中的SelectOutput块出现意外行为

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

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

最新更新