【问题标题】:divide NetLogo world into several random parts将 NetLogo 世界分成几个随机部分
【发布时间】:2014-07-05 01:37:29
【问题描述】:

我正在尝试在 NetLogo 世界上创建多个代理组。我希望每个组都位于特定区域而没有重叠。正如我能想到的,实现这一目标的简单方法可能是首先将世界分成几个部分。每个部分由许多补丁组成(比如 100 + 随机 10,我可以设置),并用独特的颜色着色。然后让新创建的海龟移动到不同颜色的补丁。 有人可以告诉我如何实现这一目标或提出任何建议吗?提前致谢。

【问题讨论】:

  • 零件应该是什么尺寸和形状?它们应该紧挨着每个(边界接触)出现还是完全分开?
  • 尺寸由设计师设定。但它不必是一个确切的数字——可以是一个范围或一个随机数(例如 100 + 随机 10)。您在世界上随机拾取补丁(当然它们应该彼此相邻)。因此,形状由尺寸定义。部分应该是有边界的,所有部分都应该完全占据世界。

标签: patch netlogo


【解决方案1】:

一种策略是发展不同的地区。例如:

to grow-regions [ num-regions ]
  let region-num 0
  ask n-of num-regions patches [
    set pcolor item region-num base-colors
    set region-num region-num + 1
  ]
  while [ any? patches with [ pcolor = black ] ] [
    ask patches with [ pcolor != black ] [
      ask neighbors with [ pcolor = black ] [ set pcolor [ pcolor ] of myself ]
    ]
  ]
end

请注意,这最多可以绘制 14 个不同的区域(因为这是基色的数量)。

这会导致这样的区域:

编辑:误读您的评论。显然,这并不能让您控制区域的大小,但平均大小将是count patches / num-regions

【讨论】:

  • 非常感谢。这几乎就是我想要的。我可以在此基础上进行改进。我不太确定您如何设置区域的大小。我的问题到底是每个区域运行 while 循环的顺序是什么。似乎他们每个人都运行一次循环(每次运行随机顺序),当他们都完成时,他们每个人都再次运行循环......
  • 尝试以低速和连续视图更新运行代码。您将能够看到每个补丁是如何着色的。在while 行之后加入print 语句,这样您就可以看到每次迭代的开始时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多