【问题标题】:AnyLogic - Modifying agent variableAnyLogic - 修改代理变量
【发布时间】: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,在这个问题上付出了很大的努力,很乐意提供帮助。但是,我可以建议您缩短这个问题并简化它,以便在一分钟左右的时间内掌握它吗?您应该能够首先将问题浓缩为核心问题,也许可以从您的特定模型中抽象出来。让我们的生活变得简单,请参阅 stackoverflow.com/help/how-to-askbenjamin-schumann.com/blog/2021/4/1/…
  • 非常感谢本杰明,反馈很好。我会看看我是否可以通过 Emile 的一些提示来解决它,并将问题改写为更直接。我很抱歉,这并不是我没有阅读如何提问,而是说实话我希望能够验证整个想法,因为我是一个使用任何 Java 的菜鸟。
  • 不用担心。但是你更有可能得到简短而甜蜜的问题的好答案。最好请几个人来验证你的整个想法:)

标签: java anylogic


【解决方案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; }' 再次感谢您的宝贵帮助!一切顺利,彼得
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 2019-02-11
  • 2017-03-21
  • 1970-01-01
  • 2021-10-11
  • 2020-09-17
  • 1970-01-01
相关资源
最近更新 更多