第五章 从羊-草生态系统深入turtles与plot画图
代码实现:
turtles-own [energy]
to setup;;初始化一只turtles,定义属性energy,创建一只能量为100的turtles
clear-all
reset-ticks
set-default-shape turtles "sheep"
ask patches[
if random-float 1 < 0.2[
set pcolor green
]
]
create-turtles 1[
set energy 100
]
end
to go;;执行程序时,运行一堆自定义的子函数
add_food
ask turtles[
turtles_move
turtles_breed
turtles_die
]
tick
end
to add_food ;;定义一个addfood函数
ask n-of 10 patches[
set pcolor green
]
end
to turtles_move;;定义turtles的移动模块
if pcolor = green[
set energy energy + 10
set pcolor black
]
if random-float 1 < 0.2[
set heading random 360
]
set energy energy - 1
fd 1
end
to turtles_breed;;定义turtles繁殖模块
if energy > 500[
set energy energy - 500
hatch 1[
fd 1
set energy 100
]
]
end
to turtles_die
if energy <= 0[
die
]
end
代码效果:
代码解析:
1.羊-草生态系统的规则:
(1)由羊(turtles)和草(patches)所构成的世界
(2)羊的内部有一个属性——“energy”,吃草增加,行动消耗,为0死亡
(3)羊可以繁殖,能量积累到一定水平,就会繁殖,且需要消耗能量,新出生的羊具备能量。
(4)草会自发的生长出来
2.to setup部分
使用一次简单的if语句模拟出百分之20的草,且设置羊的形状为sheep,初始化设置。
3.to go部分
这部分我们新学到了模块化程序的方法,即直接在to setup中加入自定义的子模块,并在接下来的程序中声明。该代码段中,一共有四个子模块,按照字面意思即添加食物子模块,移动子模块,繁殖子模块,死亡子模块。(在书中to go部分addfood和后面的to add_food不一致时检测不出来的)
4.n-of函数 相当于一个随机数函数
语法:n-of size(数量) agent(主体)即从“agent”集合中,随机抽取“size”个“agent”,使成为一个新的集合。
5.set energy energy + 10语句
FAO:这里又有点迷了,实际上可以理解为set ( energy (energy + 10)),这样就比较容易理解了。
6.hatch 顾名思义为孵化,为Netlogo的保留字
在《NetLogo 4.0.2 用户手册》提到语法为形如hatch number [ commands ],海龟创建number 个新海龟,每个都与母体相同,并且请求这些新海龟执行commands,你可以使用commands 让这些新海龟有不同的颜色、方向等。
7.曲线图 略。。。