我在NetLogo中创建了1000只随机移动的海龟,但我希望只有30%的海龟向前迈进一步,而另外70%的海龟向前迈进五步。
to setup
ca
setup-turtles
setup-patches
reset-ticks
end
to go
move-turtles
tick
end
to setup-patches
ask patches [set pcolor brown]
end
to setup-turtles
create-turtles number
ask turtles [set shape "person" set size 1]
ask turtles [setxy random-xcor random-ycor] ;; posicionar las personas en un punto al azar
end
to move-turtles
ask turtles [
right random 360]
end
答案 0 :(得分:3)
解决这个问题的一个简单而快捷的方法是概率性地做到这一点:
ask turtles [ fd ifelse-value (random 100 <= 30) [ 1 ] [ 5 ] ]
...这样每只乌龟将以30%的概率移动一步,并以50%的概率移动五步。但它不能保证完全 30%的海龟移动一步。从长远来看,它平均只有30%。
如果你想要确切的数字,一种方法是:
let small-movers n-of (count turtles * 0.3) turtles
let big-movers turtles with [ not member? self small-movers ]
ask small-movers [ fd 1 ]
ask big-movers [ fd 5 ]
但由于member?
检查,这会很慢。
更快的方法是使用乌龟变量。假设你有:
turtles-own [ step-size ]
然后你可以这样做:
ask turtles [ set step-size 5 ]
ask n-of (count turtles * 0.3) turtles [ set step-size 1 ]
ask turtles [ fd step-size ]