【问题标题】:How to limit number of turtles in a patch in NetLogo如何在 NetLogo 中限制补丁中的海龟数量
【发布时间】:2023-03-10 08:40:01
【问题描述】:

我想限制每个补丁的海龟数量。我想如果我根据 (1) 和 (2) 条件限制海龟的移动,它将限制每个补丁的海龟数量,但到目前为止我为此尝试的任何代码都不起作用。

让我们假设补丁 Y 上有五只海龟,五只是极限。

1) 让站在 X 片(见图)前面的海龟停止移动,直到 Y 片上有 5 只海龟(见图)。

2) 如果补丁 z 上的海龟少于五 (5) 只,则要求站在补丁 Y 前面的海龟向前移动到补丁 z(参见图),否则停止。

最后我使用了下面的简单代码

  let turtles-ahead other turtles in-cone speed 90
  let turtle-ahead min-one-of turtles-ahead [distance myself]
  ifelse turtle-ahead != nobody
  [
      set speed [speed] of turtle-ahead
      slow-down
  ]
  [speed-up]

这段代码只是要求海龟在另一个模式或队列之后移动,但它并不能帮助我限制每个补丁的海龟数量,无论限制可能是 4、5、6、7、8... 我已经发芽了“go”程序中的海龟(根据我的需要,每个补丁 1 个海龟)。海龟是在一组定义的补丁上发芽的,而不是整个世界。所以慢慢地,海龟的数量开始增加并在世界各地移动,经过一定数量的滴答声后,它们被要求离开定义的区域并死亡。现在有时它会在某些补丁上显示 10,11,.... 37 或以上的海龟,我实际上想停止。

我检查了每个补丁一个海龟,其他代码示例和许多其他来自互联网的帮助,但没有结果。

如有任何其他想法或帮助,我将不胜感激。请帮帮我。

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    我想你想让海龟评估它们试图移动到的补丁的turtles-herecount。考虑这个简单的例子:

    to setup
      ca
      ask n-of 15 patches with [ pycor = 0 ] [
        sprout 3 [
          set heading 90 
        ]
      ]
      reset-ticks
    end
    
    to go
      ask turtles [
        if ( count [turtles-here] of patch-ahead 1 ) < 5 and xcor < 16 [
          fd 1
        ]
      ]
      print [count turtles-here] of patches with [ any? turtles-here ]
      tick
    end
    

    在每个刻度上,xcor 小于 16 的海龟(只是为本示例设置停止)都会检查 patch-ahead 1 以获取该补丁上的海龟数量。如果计数小于 5,则海龟移动到该补丁。否则,乌龟什么也不做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      相关资源
      最近更新 更多