【问题标题】:NetLogo: Can I write a syntax that allows a turtle to be die and a new turtle jump into the same specific patch at the same time within 1 tick?NetLogo:我可以写一个语法,让一只乌龟死去,一只新的乌龟在 1 刻内同时跳入同一个特定的补丁吗?
【发布时间】:2019-10-22 14:26:39
【问题描述】:

我可以控制在一个特定的补丁(max-pxcor 0)中一只乌龟死去,然后在 1 个滴答时间内顺利地将另一只乌龟跳到一个特定的补丁(max-pxcor 0)吗?我想保留特定补丁(max-pxcor 0)的规则是只能存在一个乌龟的条件(此规则已在另一种情况下解决。因此示例代码已省略此语法)。以下是示例语法的一部分,但它不起作用。在这种语法的情况下,海龟不能在 1 个滴答时间内同时死亡和移动。感觉就像乌龟死了,并且在 2 个滴答声内移动。移动到语法是否会导致此问题?

      if (count turtles-on patch max-pxcor 0 = 1)[
      ask turtles-on patch max-pxcor 0 [ die ]]
      ask turtles-on patch (max-pxcor - 1) 0 [
      move-to patch max-pxcor 0 ]
      tick

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    这是重新定位括号的代码,以便您可以看到逻辑块。

    if (count turtles-on patch max-pxcor 0 = 1)
    [ ask turtles-on patch max-pxcor 0
      [ die
      ]
    ]
    ask turtles-on patch (max-pxcor - 1) 0
    [ move-to patch max-pxcor 0
    ]
    tick
    

    您的问题的描述很难理解。您建议海龟以不同的刻度移动。您的代码不会发生这种情况。但我可以看到一些可能是错误的。

    通过查看代码,我认为您可能在最后一个补丁中得到了很多海龟。如果这是问题所在,那么它发生的原因是因为无论if 条件如何,您都在倒数第二个补丁上移动海龟。移动海龟的ask不在括号内。

    另一个潜在的问题是你的if 条件只有在海龟的数量正好等于 1 时才起作用。只要你在最后一个补丁上有超过 1 只海龟,没有海龟会死,它们只会继续前进到最后一个补丁。

    结合起来,这能解决问题吗?

    if (count turtles-on patch max-pxcor 0 >= 1)  ; changed the = to >=
    [ ask turtles-on patch max-pxcor 0
      [ die
      ]
      ask turtles-on patch (max-pxcor - 1) 0     ; moved this inside the [ ]
      [ move-to patch max-pxcor 0
      ]
    ]
    tick
    

    【讨论】:

    • 感谢您的建议。我的问题是我提问的方式复杂且不清楚,我无法呈现所有完整的代码。尚未达成完整的解决方案,但我从您的建议中收到了一些提示。特别是 if 条件语句中海龟数量为 1 的条件太强了。 max-pxcor 0 坐标位于世界边界上。你知道与其他细胞相比,细胞需要特别注意阻止或入侵乌龟吗?
    • 进入世界边界的单元格并没有什么特别之处。显然,海龟只能沿着边界离开该单元格或离开边界,到达边界后不能继续前进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多