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

Netlogo 如何将世界划分为特定大小的区域?,netlogo,patch,Netlogo,Patch,我在建立我的模型时遇到了困难:我试图建立一个农业区,在那里,特定数量的农民拥有不同大小的土地(也是特定的,而不是随机的)。在农民的习俗中,有田地(黄色斑块)和森林(绿色斑块) 下面是一些代码: breed [Smallfarmers Smallfarmer] Smallfarmers-own [property] breed [Mediumfarmers Mediumfarmer] Mediumfarmers-own [property] to setup ca loop [ repeat

我在建立我的模型时遇到了困难:我试图建立一个农业区,在那里,特定数量的农民拥有不同大小的土地(也是特定的,而不是随机的)。在农民的习俗中,有田地(黄色斑块)和森林(绿色斑块)

下面是一些代码:

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位:

  • 在radius nowrap中使用
    向我建议,您已将世界包裹起来,但并不真正希望它包裹起来,因为它是陆地,包裹起来没有意义。可以使用界面上的“设置”按钮(右上角)关闭换行,在该按钮中还可以设置世界上的面片数
  • 如果你想创建(比如)10个农民,你不需要重复10次[create farmers 1…,你只需要一次创建10个。[]中设置属性的所有代码都将针对每个农民,因为它是创建块的一部分
  • neights
    已经是一个补丁集,但我怀疑您也想包括中央补丁
  • 您的具体问题是财产太少,相距太远-事实上,所有农民及其财产都在创建中,但他们的财产没有上色。您的代码创建农民并给他们财产,但只有在财产不重叠时才上色

    所以要解决这个问题,你只需要在有空间的地方创建农场。首先创建较大的农场可能更容易,然后较小的农场可以填补空白。但是看看你的代码,所有农场都是相同大小(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