【问题标题】:ped.getGroup().size() weird behaviorped.getGroup().size() 奇怪的行为
【发布时间】:2021-10-30 00:32:12
【问题描述】:

我遇到了我的一个小组的奇怪行为,我错过了什么吗?

1 到 4 组正在接近一个 pedOutput 块,在第一个出口下存在这种情况:

ped.getGroup().size() <= 2 && v_table02_occupied < 20;

该条件在一段时间内正常工作,正如我所期望的(v_table02_occupied 变量,但是你知道,当这个组进入 pedOutput 块时,它打印为 16。

以前有人看到过类似行为不端的团体吗?

谢谢, 彼得

【问题讨论】:

  • 您是否跟踪了“在出口 2”中的组大小以及该变量的值?一旦你这样做了,你的困惑可能会消失,可能是你的一些逻辑错误:)
  • 感谢您的回答,不幸的是我仍然找不到错误...我将它们全部追踪并退出 2 始终显示高于 2 的组。我在错误之前的最后一次阅读:pedGroup size at exit 1 is 4variable is 16
  • v_table02_occupied 的完整条件是什么,您的屏幕截图似乎在那里被截断。你的traceln中的variable是什么意思?确保在这里准确和具体:)
  • 感谢帮助 :) 所以条件 1 中的完整代码是 ped.getGroup().size() &lt;= 2 &amp;&amp; v_table02_occupied &lt; 20; v_table02_occupied 变量是 Main 中的一个简单整数,初始值为 0。它的唯一目的是限制行人的数量通过出口 1 退出(至 20)。有趣的是,当我在 pedSource 中使用不同的到达次数重新调整模拟时,错误在不同的组(3 个 ped 组)中重复出现。意思是——它在我最初的实验中运行了这么长时间的事实一定是巧合,整个事情都不起作用。

标签: anylogic


【解决方案1】:

问题是您的v_table02_occupied +1 代码在条件检查之后执行。

通过在pedSelectOutput 前面使用0 持续时间的简单延迟,最好在条件之前执行代码。在其“输入时”代码框中调用+1 代码。

然后阅读一下代码是如何顺序执行的,这对许多人来说是一个典型的陷阱,因为它是如此微妙:)

【讨论】:

  • 非常感谢本杰明,很高兴知道这一点。实际上,我在选择输出前面已经有一个延迟块用于其他一些操作,所以我也可以在那里添加这部分。但是,我的问题仍然存在并且问题仍然存在。我可能是错的,但我看不到 v_table02_occupied 变量如何在这里产生影响,因为在检查该条件之前,条件 ped.getGroup().size() &lt;= 2 必须为真 - 而不是,看到 3 组或 4 个正在使用 true 结果检查此条件。也许整个陈述有问题?谢谢,彼得
  • 公平,但我强烈怀疑这是同一个核心问题。您将需要通过进行更多测试和简化设置来深入挖掘自己的核心。 99.999% 不是错误,而是误解 ;)
【解决方案2】:

我犯了一个愚蠢的错误。

条件语句似乎不应以 ; 结尾。

有效的语句:

ped.getGroup().size() <= 2 && v_table02_occupied < 20

代替:

ped.getGroup().size() <= 2 && v_table02_occupied < 20;

感谢本杰明抽出时间提供帮助。 //彼得

【讨论】:

  • 看,告诉你用截图给我们看完整的声明:D 感谢分享回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多