Netlogo 创建面片簇而不更改引用

Netlogo 创建面片簇而不更改引用,netlogo,Netlogo,我正在写一个只涉及补丁的Netlogo模型。我已经成功地创建了一个由6种不同颜色的斑块组成的景观(每种颜色代表我项目中的不同植被)。因此,每个斑块上出现红色斑块的概率为10%,黄色斑块为5%,棕色斑块为20%,依此类推 设置此概率的代码示例: let i random-float 1 ifelse i + random-float 0.1 <= 0.8 ;random 0.1 threshold for environmental noise [ set pco

我正在写一个只涉及补丁的Netlogo模型。我已经成功地创建了一个由6种不同颜色的斑块组成的景观(每种颜色代表我项目中的不同植被)。因此,每个斑块上出现红色斑块的概率为10%,黄色斑块为5%,棕色斑块为20%,依此类推

设置此概率的代码示例:

    let i random-float 1
    ifelse i + random-float 0.1 <= 0.8 ;random 0.1 threshold for environmental noise
      [ set pcolor green ]
      [ ifelse i + random-float 0.1 <= 0.9
        [ set pcolor yellow ]
        [ set pcolor blue ] ]
让我随机浮动1

如果else i+随机浮动0.1你可以根据你的体重播种,然后围绕种子生长。这里有一种不同的方法:根据权重为所有面片上色,然后对颜色进行聚类

extensions [rnd]    ;use the rnd extension
globals [threshold]

to setup
  ca
  set threshold 2
  let _cw [[red 10] [yellow 20] [blue 70]]   ;colors with weights
  ask patches [set pcolor first rnd:weighted-one-of-list _cw [last ?]]
  repeat 20 [cluster]  ;adjust to taste
end

to cluster
  ask patches [
    if unhappy? [
      swap-pcolor
    ]
  ]
end


to swap-pcolor
  let _c pcolor
  let _p one-of neighbors with [pcolor != [pcolor] of myself]
  set pcolor [pcolor] of _p
  ask _p [set pcolor _c]
end

to-report unhappy?
  let _ct count neighbors with [pcolor = [pcolor] of myself]
  report (_ct < threshold)
end
extensions[rnd];使用rnd扩展
全局[阈值]
设置
ca
设置阈值2
让[红色10][黄色20][蓝色70];带权重的颜色
询问修补程序[设置pcolor first rnd:加权列表之一_cw[最后?]]
重复20次[群集];适应口味
结束
群集
询问补丁[
如果不开心[
交换彩色
]
]
结束
调换颜色
让我们来看看颜色
让我们用[pcolor!=[pcolor]我自己的[pcolor]对一个邻居进行测试]
将pcolor[pcolor]设置为
ask_p[设置颜色]
结束
报喜?
让我们用[pcolor=[pcolor]自己的[pcolor]来计算邻居
报告(ct<阈值)
结束

你好,艾伦!非常感谢!除了嵌套列表部分,这对我来说基本上是有效的,在嵌套列表部分,我试图用另一个过程中计算的变量替换权重数。我读到我必须使用“列表”来创建一个带有变量的列表?但是我得到了一个错误“期望一个常数”…你可能知道如何解决这个问题吗?到目前为止我所尝试的让_cwlist(list brown x)[blue 0.2];x是上一步骤中设置的变量。Netlogo允许它,但我不能在观察者上下文中使用go。您的列表是正确的,但如果有两个以上的子列表,则需要括号。
go
错误是另外一回事。这意味着您已经编写了go,以便它直接引用补丁(或turtle)变量,而不是要求补丁(或turtle)访问其属性,