我正在扩展一个模型,研究不同类型的水果和碎裂对猴子种群的影响。这个模型读取一个由1和0组成的陆地卫星文件(代表森林和森林被砍伐的地区),我需要把它重新分类为三种树。现在,在代码中,我随机设置了三种类型的树,现在我希望它们被分成百分比,30 %的森林斑块是蓝色的,50 %是黄色的,20种是绿色的。我有这个自动取款机:我想我得换一下:
[如果值=1组值-树型之一
我试过了,但我似乎做不到。
有什么建议吗?
to load-forest
file-open "patch46.txt"
let tree-types [ 1 2 3 ]
let tree-colors [ 0 15 65 45]
let tree-fruits [ 0 25 50 100 ]
foreach n-values world-height [ min-pycor + ? ]
[let num-lines ?
foreach n-values world-width [ min-pxcor + ? ]
[let num-cols ?
ask patch num-lines num-cols
[set value file-read
]
]
]
file-close
ask patches
[ if value = 1 [ set value one-of tree-types ]
set pcolor item value tree-colors
set fruit item value tree-fruits
]
end 发布于 2014-06-03 14:32:01
对于您来说,一种可能的方法是使用来自rnd:weighted-one-of的NetLogo Rnd扩展原语。
它的工作方式有点像one-of,但是选择每一项的概率可能是不同的(即加权)。
假设您有一张不同类型的树的概率列表:
let probabilities [ 30 50 20 ]您可以将其用作:
set value rnd:weighted-one-of tree-types [ item (? - 1) probabilities ]请注意,这将给您平均30%的蓝色树,50%的黄色树和20%的绿色树木,但它可能会有所不同的运行。由于您已经在使用one-of,这具有相同的效果(即,平均每种类型的33% ),所以我认为您对此没有意见。如果你想要准确的百分比,每次运行,答案将是非常不同的。
旁注:
您的tree-colors和tree-fruits列表有一个“虚拟”0项,这样您就可以直接使用树型value作为这些列表的索引。这是令人困惑的,也是由于各种原因而导致的不良实践。例如,show length tree-fruits将打印4。这也意味着您不能在同一个foreach或map构造中使用foreach和其他列表,例如:(foreach tree-types tree-fruits [...])。这些事情现在看起来并不是什么大事,但它们最终会使你的程序更难理解。
您应该要么咬紧牙关,使用value - 1作为索引,要么将树类型重新编号为[ 0 1 2 ]。
https://stackoverflow.com/questions/24014264
复制相似问题