如何解决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
最后,在每个服务块的出口处,我有以下代码,以便根据行人的动作实际修改变量:
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。