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



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

这里有一个代码:

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已经是一个补丁集,但我怀疑您也想包括中心补丁

你的具体问题是财产太少,相距太远-事实上,所有的农民和他们的财产都在被创造,但他们的财产没有被着色。您的代码创建了一个农民并赋予他们财产,但只有在财产不重叠的情况下才会对其进行着色。

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

相关内容

  • 没有找到相关文章

最新更新