首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络标志。Landsat文件中的修补程序类别

网络标志。Landsat文件中的修补程序类别
EN

Stack Overflow用户
提问于 2014-06-03 11:41:11
回答 1查看 105关注 0票数 0

我正在扩展一个模型,研究不同类型的水果和碎裂对猴子种群的影响。这个模型读取一个由1和0组成的陆地卫星文件(代表森林和森林被砍伐的地区),我需要把它重新分类为三种树。现在,在代码中,我随机设置了三种类型的树,现在我希望它们被分成百分比,30 %的森林斑块是蓝色的,50 %是黄色的,20种是绿色的。我有这个自动取款机:我想我得换一下:

[如果值=1组值-树型之一

我试过了,但我似乎做不到。

有什么建议吗?

代码语言:javascript
复制
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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 14:32:01

对于您来说,一种可能的方法是使用来自rnd:weighted-one-ofNetLogo Rnd扩展原语。

它的工作方式有点像one-of,但是选择每一项的概率可能是不同的(即加权)。

假设您有一张不同类型的树的概率列表:

代码语言:javascript
复制
let probabilities [ 30 50 20 ]

您可以将其用作:

代码语言:javascript
复制
set value rnd:weighted-one-of tree-types [ item (? - 1) probabilities ]

请注意,这将给您平均30%的蓝色树,50%的黄色树和20%的绿色树木,但它可能会有所不同的运行。由于您已经在使用one-of,这具有相同的效果(即,平均每种类型的33% ),所以我认为您对此没有意见。如果你想要准确的百分比,每次运行,答案将是非常不同的。

旁注:

您的tree-colorstree-fruits列表有一个“虚拟”0项,这样您就可以直接使用树型value作为这些列表的索引。这是令人困惑的,也是由于各种原因而导致的不良实践。例如,show length tree-fruits将打印4。这也意味着您不能在同一个foreachmap构造中使用foreach和其他列表,例如:(foreach tree-types tree-fruits [...])。这些事情现在看起来并不是什么大事,但它们最终会使你的程序更难理解。

您应该要么咬紧牙关,使用value - 1作为索引,要么将树类型重新编号为[ 0 1 2 ]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24014264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档