根据海龟数量(输入)和 link 特定品种一起调整世界网格的大小

Resize grid in the world based on number of turtles (input) and link specific breeds together

我需要在方形网格中可视化下面的海龟(来自三个不同品种),其中 links 仅在来自同一品种的海龟之间,除了品种 types2 和 types3,也可以link互相交流。 所以我想要的是一个二维网格,其中每种类型的海龟数量是

40% of type1
40% of type2
20% of type3

(共100只海龟)

  set-default-shape types1 "circle"
  set-default-shape types2 "circle"
  set-default-shape types3 "triangle"

  ask n-of 100 patches [ sprout-types1 1 ]
  ask n-of (100 * 0.4) types1 [set breed types2]
  ask n-of (100 * 0.2) types1 [set breed types3]

值没问题,但海龟 'free' 在世界中,没有显示在网格上。 如何根据上述条件将它们显示到网格中并link它们?

这个答案对此提供了一些帮助,但网格的大小调整和海龟数量不是预期的。

您应该在创建代理之前调整世界大小。 也就是说,从代码的工作流程来看:如果要有n个agent,那么n首先就是patch的个数。然后,一旦出现这种情况,所有补丁将 sprout.

您需要 resize-world command.

你提到你想要 100 只海龟,也就是 100 个补丁,也就是一个 10x10 的世界。

这意味着您可以:

to setup
  clear-all
  
  resize-world 0 9 0 9   ; This creates a 10x10 world.
  set-patch-size 30
  
  ask patches [
    sprout 1 [
      set shape "circle"
      set size 0.5
    ]
  ]
end

只要你对你的世界正好是 100 个补丁的大小感到满意,上面的代码就可以工作,假设大小 = 100 是 hard-coded。

您可能想考虑一些方法来适应代理数量的变化。 例如,只要代理的数量是整数的完美平方,下面的方法就有效:

globals [
  n-agents
]

to setup
  clear-all
  set n-agents 100

  let side-length n-agents ^ (1 / 2) - 1
  resize-world 0 side-length 0 side-length
  set-patch-size 30
  
  ask patches [
    sprout 1 [
      set shape "circle"
      set size 0.5
    ]
  ]
end

归根结底,NetLogo中世界的形状只能是正方形或长方形;也就是说,你不能拥有一个由素数补丁组成的 NetLogo 世界(唯一的例外是 world-height and/or world-width 等于 1 的世界)。

因此,为了让您的代码最适应 n 中的更改,您可以提出更详细的步骤,根据 n 调整世界大小,以便它为您提供n 即使 n 不是完美的正方形也会进行修补;但举例来说,除非你乐于拥有一个单维世界,否则你永远不可能拥有 53 个补丁。不过,既然你说的是网格,我认为这对你来说应该不是问题。