限制代理可以建立的链接数量

Limit the number of links an agent can make

我有海龟 linking 如果它们具有相同的 var1 值(这很好用)。我想将 link 的数量限制为三个。我在代码的 linking 部分之前添加了一个 IF 语句(If count my-links < 3),但是它不起作用;代理继续 link 超过我设置的最大值。我阅读了另一个问题 ,但这似乎并不能完全满足我在这里的尝试。我做错了什么?

to communicate
  If count my-links < 3
  [
  ask other xagents in-radius 5 with [var1 = [var1] of myself]
  [create-links-with yagents in-radius 5 with [var1 = [var1] of myself]
    [
      set color white
      set thickness 0.1
    ]
  ]
  ]
end

限制海龟的 link 数量,然后再让它们创建新的海龟:

通过查看你的完整模块,正如@JenB 提到的那样,似乎没有条件限制目标乌龟制作 link 的 link 的数量。

这将是第一步:

to communicate
  If count my-links < 3
  [
  ask other xagents in-radius 5 with [(var1 = [var1] of myself) and (count my-links < 3)]
  [create-links-with yagents in-radius 5 with [(var1 = [var1] of myself) and (count my-links < 3)]
    [
      set color white
      set thickness 0.1
    ]
  ]
  ]
end

但是如果没有这样的代理怎么办? (半径为 5,具有相同的 val1 且 links 小于 3)可能需要一个 if 语句。

我还认为您需要在代码中使用 one-of,以便在每个步骤中只生成一个 link。


在每个 tick 后杀死 links 以限制海龟的 links 数量:

您可以在 communicate 子过程的末尾使用它来杀死额外的 links。它有一个随机删除 links 的缺点,也可能从具有较少 link 的海龟而不是那些可能也有额外 links 的海龟中删除 link。

ask turtles with [count my-links > LIMIT] [ if count my-links > LIMIT [ask n-of (count my-links - LIMIT) my-links [die]] ]