我有两个处理海龟的过程,但我需要随机数量的海龟来执行其中一个过程,而另一个随机数量的海龟来执行相同部分的另一个过程。
假设我有一个40只海龟的种群,我有以下程序:
to move
ask turtles [
rt random-float 90 - random-float 90
fd 1
]
end
to bounce
ask turtles
[
if [pcolor] of patch-at dx 400 = white [
set heading (- heading)
]
if [pcolor] of patch-at 400 dy = white [
set heading (180 - heading)
]
]
end
我想做的是让20只随机的海龟执行"弹跳"的过程,而另外20只随机的海龟执行"移动"的过程。或者这40只乌龟将随机执行这两个过程中的任何一个,但没有一只乌龟同时执行这两个过程。
我知道这有点困难,但我认为这是可以做到的。有什么建议吗?这是我能想到的最简单的方法:
let bouncers n-of 20 turtles
ask turtles [
ifelse member? self bouncers
[ bounce ]
[ move ]
]
对于random number of turtles
这个短语有很多不同的解释。Seth的方法允许您精确控制执行这两个过程的海龟数量。也就是说,固定数量的随机海龟。
如果你希望它总是近似的,但不一定等于海龟的某个比例(在下面的例子中为0.4),所以每只海龟随机决定给定的概率,那么你可以这样做:
ask turtles [
ifelse-value random-float 1 < 0.4
[ bounce ]
[ move ]
]
如果您希望海龟的数量是随机的,那么您可以将Seth的代码的第一行更改为:
let bouncers n-of (1 + random count turtles) turtles
注意:这些代码都没有经过测试,所以如果它抛出错误,请注释(或编辑)。