AnyLogic - 修改代理变量
Posted
技术标签:
【中文标题】AnyLogic - 修改代理变量【英文标题】:AnyLogic - Modifying agent variable 【发布时间】:2021-09-05 03:01:16 【问题描述】:在 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。
希望有人能帮助我。
非常感谢, 彼得
【问题讨论】:
嗨@Peter,在这个问题上付出了很大的努力,很乐意提供帮助。但是,我可以建议您缩短这个问题并简化它,以便在一分钟左右的时间内掌握它吗?您应该能够首先将问题浓缩为核心问题,也许可以从您的特定模型中抽象出来。让我们的生活变得简单,请参阅 ***.com/help/how-to-ask 和 benjamin-schumann.com/blog/2021/4/1/… 非常感谢本杰明,反馈很好。我会看看我是否可以通过 Emile 的一些提示来解决它,并将问题改写为更直接。我很抱歉,这并不是我没有阅读如何提问,而是说实话我希望能够验证整个想法,因为我是一个使用任何 Java 的菜鸟。 不用担心。但是你更有可能得到简短而甜蜜的问题的好答案。最好请几个人来验证你的整个想法:) 【参考方案1】:对于条件,您需要使用两个等号,而不是一个。
agent.isItEnough == true
这是我能够识别的一个错误...如果这不能解决问题,请告诉我。
另一个问题是 AnyLogic 在进入块之前评估选择输出条件。请参阅另一个问题: Unexpected behavior SelectOutput block in AnyLogic
因此,当您在选择输出的 On Enter 中添加操作时,它不会影响该选择输出的决策。正如我分享的链接中提到的那样,解决它的一种方法是在放置以下代码的选择输出元素之前添加一个 0.01 毫秒的虚拟延迟:
if(agent.howMany < 1.0)
agent.isItEnough = false;
【讨论】:
非常感谢 Emile,这很有帮助。我做了虚拟延迟,但到目前为止还没有解决问题。实际上,我使用 traceln 在某些位置打印出我的变量,有趣的是 - if 语句根本不起作用。 if 语句之前:ped.howMany - 5.0; ped.isItEnouhg - 错误; if 语句后:ped.howMany - 5.0; ped.isItEnouhg - 错误;我会尝试更多地朝这个方向挖掘,除非你也在这里发现一些可怕的错误? :-) 刚刚解决了!非常感谢 !其实很简单。我的 if 语句从未将变量变为 false... 愚蠢的错误,但我很高兴能抓住它。最终代码还需要“else”:'if(agent.howMany >= 1.0) agent.isItEnough = true; 其他 agent.isItEnough = false; ' 再次感谢您的宝贵帮助!一切顺利,彼得以上是关于AnyLogic - 修改代理变量的主要内容,如果未能解决你的问题,请参考以下文章