如何将世界划分为特定大小的区域?

How to divide world in regions of specific size?

我在构建模型时遇到问题:我正在尝试构建一个农业区,其中特定数量的农民拥有不同大小的土地(也是特定的,而不是随机的)。在农民的财产里,有田地(黄色斑块)和森林(绿色斑块)。

这里有一些代码:

breed [Smallfarmers Smallfarmer] Smallfarmers-own [property]
breed [Mediumfarmers Mediumfarmer]
Mediumfarmers-own [property]

to setup
ca

loop [
repeat 50[
  create-Smallfarmers 1 [
    set property [patches in-radius-nowrap 1.5] of one-of patches with [pcolor = black]
  if all? (patch-set [neighbors] of property) [pcolor = black] [
    ask n-of 2 property [set pcolor green]
    ask property with [pcolor != green] [set pcolor yellow]]]] 
  
 repeat 10[
  create-Mediumfarmers 1 [
  set property [patches in-radius-nowrap 2.9] of one-of patches with [pcolor = black]
  if all? (patch-set [neighbors] of property) [pcolor = black] [
    ask n-of 6 property [set pcolor green]
    ask property with [pcolor != green] [set pcolor yellow]]]]
stop]
end

使用这段代码我遇到了这些问题:

我如何改进(或完全革新)我的代码?

这有几个明显的问题。第一个是通用的 NetLogo 位:

  1. 使用 in-radius-nowrap 向我建议你有世界环绕并且真的不希望它环绕,因为它是陆地并且环绕没有意义。您可以使用界面上的设置按钮(右上角)关闭环绕,您还可以在其中设置世界上的补丁数量。
  2. 如果你想创建(比如说)10 个农民,你不需要做 repeat 10 [create-farmers 1 ...,你只需一次创建 10 个。 [] 中设置 属性 的所有代码都将发生在每个农民身上,因为它是创建块的一部分。
  3. neighbors 已经是补丁集,但我怀疑您还想包含中央补丁

你的具体问题是房产太少,距离太远 - 事实上,所有的农民和他们的房产都在创建,但他们的房产没有被着色。您的代码创建了一个农民并给了他们 属性,但只有在 属性 不重叠时才给它上色。

因此,要解决此问题,您只需要在有 space 的地方创建农场。首先创建较大的农场可能更容易,然后较小的农场可以填补空白。不过,查看您的代码,所有农场的大小都相同 (3x3),不同之处在于有多少田地是绿色或黄色的。这是一些创建农场的代码(另请注意,它将农民放在农场上)。

breed [farmers farmer]
farmers-own
[ property
]

to setup
  clear-all
  create-farmers 10
  [ let potential-farms patches with [all? (patch-set self neighbors) [pcolor = black]]
    ifelse any? potential-farms
    [ move-to one-of potential-farms
      set property (patch-set patch-here neighbors)
      ask n-of 2 property [set pcolor green]
      ask property with [pcolor != green] [set pcolor yellow]
    ]
    [ print "No space available" ]
  ]
end