如何询问一只或两只乌龟(如果有的话)采取行动?

时间:2014-04-21 19:25:00

标签: netlogo

以下代码查找存在至少一个男性和一个女性的所有补丁,然后在每个补丁上,有一个雌性孵化,一个随机性别的后代乌龟。

turtles-own [ gender] 
to setup 
ask patches [ 
sprout  1 
[set size 0.2 
set color pink 
set gender "female" 

]] 
ask patches [ 
sprout  1 
[set size 0.2 
 set color blue 
 set gender "male" 



]] 

reset-ticks 

end

to-report parents-here?  ;; patch procedure
report any? turtles-here with [gender = "male"]
     and
     any? turtles-here with [gender = "female"]
 end

to go
ask patches with [parents-here?] [
ask one-of turtles-here with [gender = "female"] [
  hatch 1 [
    set gender one-of ["male" "female"]
  ]
 ]
 ]
 tick
 end

我不想要求一位女性孵化,而是想问一位女性在场是否要求孵化“或”如果有两位女性在场,要求他们孵化(最小一个,最多两个)。 我试着写它

ask n-of 2 turtles-here ............

但我有一个错误说这个补丁只有1只来自海龟

我试图使用(但也有错误) 我也试着写

ask n-of (1 + random 2 )

作为最小值和最大值,也是错误的。

提前谢谢

1 个答案:

答案 0 :(得分:3)

这是我能想到的最简单的解决方案:

let females turtles-here with [gender = "female"]
ask n-of (min list 2 count females) females [
  hatch 1 [
    ...
  ]
]

为什么min list 2 count females?当你想要最多2个时,你需要使用一个名为min的原语,这有点违反直觉。但min list 2 ...的结果总是2或更小。或者,如果你按案例分解:

  • 如果count females为0,则min list 2 count females也为0.
  • 如果count females为1,min list 2 count females也为1。
  • 如果count females为2或更高,min list 2 count females为2。

如果我理解正确的话,那就是你想要的。