支架放置问题以及Netlogo

时间:2016-09-04 04:02:49

标签: if-statement netlogo parentheses

我在支架放置和netlogo中的ifelse和let命令时遇到问题。

我有各种不同的条件,这些条件与确定局部变量(多个)的补丁 - 拥有(envi)和乌龟 - 自己(生态位选择,生态位范围)变量相关,然后将用于确定再生概率。

Turtles有一个变量niche-opt,如果这匹配patch变量envi那么局部变量multi = 1

如果niche-opt!= envi但envi在niche-opt + - niche-range范围内(turtle变量,整数范围从1到3)则multi = 0.8

最后,如果envi在niche-opt + - niche-range之外,那么multi = 0.2

所以局部变量" multi"可以是三个值中的一个(1,0.8或0.2),然后乘以海龟自己的变量(trait-2)并用于确定孵化发生的概率。

我的问题是在代码行中:

if random-float 100 < (multi * trait-2 * 100)

出现错误&#34;没有任何名为multi defined&#34;。我确定问题与我的支架放置有关,因为我创建了一个局部变量,但我无法弄清楚我是否需​​要添加更多括号或只是移动我拥有的那些。

to go
   ask turtles [
   reproduce  
   ]
end

to reproduce  
  ifelse niche-opt = envi  
  [let multi 1] 
  [ifelse envi >= (niche-opt - niche-range) and envi <= (niche-opt + niche-range)
  [let multi 0.8]
  [let multi 0.2]
  ]
if random-float 100 < (multi * trait-2 * 100)
hatch 1 
end

1 个答案:

答案 0 :(得分:2)

使用ifelse-value

可能最简单
to reproduce  
  let multi ifelse-value (niche-opt = envi)[1] [
    ifelse-value (envi >= (niche-opt - niche-range) and envi <= (niche-opt + niche-range)) [0.8][0.2]
  ]
  if random-float 100 < (multi * trait-2 * 100) [hatch 1]
end

<强>未测试