学习记录:用netlogo6.1.1创建完整的模型

1.创建新模型

2.创建按钮

先做一个setup按钮,用来重置模型:

to setup ;;;定义一个名为setup的代码
  clear-all ;;;将世界设为初始状态,为新模型运行做好准备
  create-turtles 100 [ setxy random-xcor random-ycor ];;;有100个个体,它们接受观察者写在[]里的命令:返回任意一个x坐标,和任意一个y坐标,个体移动到这个位置
  reset-ticks ;;;重置时间步
end

回到界面,发现setup已经变黑,说明已经写了代码,点击运行

出现了很多彩色的小箭头,它们就代表我们创建的100个个体,而且多点几次setup会发现每次彩色箭头的分布都不一样。

有了setup,还需有go按钮,go表示让模型动起来,前几步步骤同上,主要代码不一样,而且需要在编辑对话框里勾选持续运行:

因为setup只是用来重置,它一次就可完成,不需要持续运行;而go是一个当你点击后就不会主动停下来的键,也就是控制世界的运行的开关键。

 现在开始写go的代码:

to go
  move-turtles
  tick
end

这里的move-turtles是我们接下来要定义的语句,它可以看做是一个函数,我们要定义一个move-turtles函数,让它来决定个体如何移动

to move-turtles
  ask turtles [
    right random 360
    forward 1
  ]
end

这个代码让个体,从0-360任选一个实数,然后向右偏转该角度,并且前进一格。现在这个模型已经可以运转了,回到界面,先点击setup,再点击go,观察一下发生了什么事

然后我们考虑羊吃草那个模型,把背景看做是草地,羊会吃掉草,草也会生长,现在需要修改一下模型的代码:

to go
  move-turtles
  eat-grass
  tick
end

to move-turtles
  ask turtles [
    right random 360
    forward 1
    set energy energy - 1
  ]
end

to eat-grass
  ask turtles [
    if pcolor = green [
      set pcolor black
      set energy energy + 10
    ]
  ]
end

可以看见,go中多了一个新函数eat-grasseat-grass做的事情是,如果个体背景pcolor的颜色是绿色,也就是羊来到了它脚下的一小块草地,那么这块草地会被吃光,吃光了的草地用黑色表示;然后羊自身的能量也会增加,因为吃饱了,增加多少呢,增加10。

同时羊在走的时候也会消耗能量,所以原先的move-turtles函数也需要修改,每走一步,就降低1个能量。

因为energy这个特征是新定义的,原来的个体没有这个energy,所以需要在所有代码的最前端先设定一下:

turtles-own[energy]

羊吃草全代码如下,现在已经可以运行这个羊吃草的模型了:

turtles-own[energy]


to setup
  clear-all
  setup-patches
  setup-turtles
  reset-ticks
end

to setup-patches
  ask patches [set pcolor green ]
end

to setup-turtles
  create-turtles 100 [ setxy random-xcor random-ycor ]
end


to go
  move-turtles
  eat-grass
  tick
end

to move-turtles
  ask turtles [
    right random 360
    forward 1
    set energy energy - 1
  ]
end

to eat-grass
  ask turtles [
    if pcolor = green [
      set pcolor black
      set energy energy + 10
    ]
  ]
end

 3.监视器

接下来可以创建一个监视器,来监视turtles/羊,patches/草的数目变化:

监视器可以监视系统中个体的数目变化,以及背景/草的变化。但是在我们的设定中,还有一个变量,就是羊的能量,羊通过吃草来获得能量,通过移动来消耗能量,能量是动态的,是我们额外增加给这个系统个体的一个特征,我们需要来看看怎么把能量也像前面的个体数目,草的数量一样可视化出来。

4.开关

energy是之前在代码部分定义过的变量

还需要在代码部分添加:

代码的意思是,如果打开开关,就把energy作为一个标签打在个体的身上,使我们可以在图中看见变化,否则就标签为空

打开开关,就可以看到每个个体身上都有一个数字,下图表示的是草吃光了,羊的能量逐渐变负:

5.其他设定

reproduce函数表示,如果个体的能量大于50,那么它就hatch产生一个新个体,这个个体和母体一样,但是要执行[]中的命令,在这里就是妈妈自身减少50的能量,产生了一个能量为50的其余部分都相同的新个体;hatch是软件本身的语言,表示产生

check-death表示的是如果个体能量小于0,就死去;die是本身的语言,表示消失

regrow-grass表示个体随机检查0-99内的数是否小于3,也就是有3%的概率,去把它所在位置的草地变绿;

现在有一些草会重生,有新个体产生,死去的个体不再参与交互

6.画图

7.时钟计数器

有时候我们需要比较,更改某个变量(比如个体数量)前后曲线的变化,我们希望在相同时间步来比较,就是都运行500次来比较,手动也可以达到,这里有个更快的方法就是设置计数器,需要在go部分修改

可以看见它很完美的在500步停止了

8.更改参数

我们可以在代码里更改一些参数,还有一种做法就是在界面里新增滑块来完成:

然后把我们代码部分的要调整的值,从原先的某个具体的数,改成number即可:

以此类推,可以把之前我们在代码里写的所有,数字的部分,如果愿意,都可以调整为滑动条形式:

原文地址:https://www.cnblogs.com/liuxiangyan/p/12895478.html