【问题标题】:Trouble specifying agent's location and sprout command无法指定代理的位置和发芽命令
【发布时间】:2020-09-29 03:33:20
【问题描述】:

我的子模型的目标是模拟狼代理如何避开人类密度高于狼容忍阈值的斑块。运行我的模型时,sprout 命令不会像我预期的那样在城市补丁中生成人类代理的数量。在城市补丁中创建人类的代码是:

询问补丁 [ if self = urban-patches [sprout-humans initial-number-humans]]

这是我的界面标签的图像:NetLogo space

灰色被编码为我的城市补丁,棕色是草地,绿色是森林补丁。为什么我的人类代理没有出现在灰色(城市)补丁中,代理的数量反映了初始人类数量?

这是创建人工代理的代码:code

我已将人工代理的 xy 坐标指定在城市(灰色)区域内,但在我运行模型时只出现一个人工代理。如何正确编码 initial-number-humans 以与发芽命令连接?

【问题讨论】:

  • 是城市补丁补丁集还是补丁拥有的变量还是其他东西?
  • 你好,@JenB。我自己解决了这个问题,方法是对人类代理进行硬编码,使其具有与城市补丁相对应的 xcor 和 ycor。因此,我的发芽命令现在没有实际意义。为了回答您的问题,城市补丁被列为全局变量。我不知道这是否是创建补丁类型的正确方法,但我认为它有效?

标签: netlogo agent


【解决方案1】:

我想你现在已经发现,在一组补丁中随机分配一组海龟的最简单方法是使用create-turtles 而不是sprout。这是因为sprout 在每个发芽它们的补丁上创建指定数量的海龟,因此您需要兼顾要创建的总数和补丁数量。但是,如果您想实现均匀分布而不是随机位置,该选项很有用。这是兼具两者的代码。

globals [urban-patches n-humans]

to setup
  clear-all
  set urban-patches n-of 20 patches
  ask urban-patches [set pcolor gray]
  set n-humans 100
  make-humans-sprout
  make-humans-create
end

to make-humans-sprout
  ask urban-patches
  [ sprout n-humans / count urban-patches
    [ set color red
      set xcor xcor - 0.5 + random-float 1
      set ycor ycor - 0.5 + random-float 1
    ]
  ]
end

to make-humans-create
  create-turtles n-humans
  [ set color blue
    move-to one-of urban-patches
      set xcor xcor - 0.5 + random-float 1
      set ycor ycor - 0.5 + random-float 1
  ]
end

请注意,对xcorycor 的调整是因为sproutmove-to 始终将海龟放置在补丁的中心,并且没有用于放置在特定补丁上随机位置的原语。

【讨论】:

  • 感谢您的示例代码和解释。我选择不使用 sprout 命令,而只是使用 move-to 并让 random-float 稍微改变它们的位置。
猜你喜欢
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多