Netlogo仿真初步学习总结

一 Netlogo理解及获得渠道

1.是什么:Net logo是一个系统仿真软件,利用该软件,可以对自然中或者社会中的现象进行仿真,仿真通过控件配合代码进行实现。
2.软件下载渠道: Netlogo软件是免费开源的,可以自行到下载网址下载,具体网址为:http://ccl.northwestern.edu/netlogo/
软件的下载可以通过个人电脑系统针对性选择Widows和Mac os的不同版本,不过网站是英文的,如下图1为官网首页及下载链接。
3.软件的其他辅助材料 :有对应的中文手册,链接为:
https://wenku.baidu.com/view/7e2e3b48e97101f69e3143323968011ca300f7ea.html
在这里插入图片描述
图1 Netlogo 官网

二 软件的初步了解

1.初始界面

Mac os 版本和widows版本界面差不多,这里使用的Windows 64位 Netlogo 6.1.1版本,版本的初始界面为如下图2:
在这里插入图片描述
图2 初始界面

2.界面频繁使用的区域

1. 文件->模型库
点击最上面的菜单栏里文件,然后从下拉菜单栏里面选择模型库,会弹出一个模型库窗口,如图3所示,左边的树形菜单里面会有很多经典的仿真案例,包括艺术类和生物类、化学类等等。有兴趣可以选择一个然后点击打开即可。如下图4所示,为fair circle仿真的案例主界面,点击setup,然后点击go即可运行。
在这里插入图片描述
图3 模型库界面
在这里插入图片描述
图4 Fairy circles仿真界面
2. 文件->新建
这个不必说,是新建自己的仿真项目,不过在运行其他的项目时,一定要保存,这里不支持两个项目同时运行。但是可以同时打开两个Netlogo程序,再进行运行
3. 两个常用的切换面板的按钮:界面 + 代码
界面:显示仿真界面的主要展示窗口以及控件放置的窗口
代码:进行编写程序的窗口(如图5所示)
在这里插入图片描述
图5 界面有代码面板
4. 常用的控件
Netlogo中有很多控件,可以选择后在下方界面点击显示出来,如图6所示
(1)函数相关:
按钮:一般用来和编程中函数结合,常用的按钮有两个:setup和go按钮,setup用来重置为初始状态,go按钮一般用来进行控制运行和停止
(2)参数控制相关:
滑块与输入框: 两个一般都是用来输入参数的数值的,滑块就是一个滚动条,来回拉滚动条可以控制数值,输入框可以输入具体的数字或者其他文本来传递参数,如果需要具体的数值可以使用输入框。
开关与选择器: 开关一般选择开或者时关,通过不同状态进行变量控制或者状态显示的选择。选择器里面是个下拉列表,在研究中可以用来做控制变量,选择不同的参数这样

(3)输出相关:
监视器: 一般和具体的参数变量绑定,随着参数的实际数值变化进行动态变化
图: 进行图的绘制,一般有点状图、折线图
注释: 可以理解为纯文本,就是注释功能
在这里插入图片描述
图6 控件栏

三 一个仿真如何进行(前情概要)

1. 仿真世界的构成

仿真的世界由主体构成,主体能够接受命令,进行活动,所有主体的行为并行发生。
NetLogo中共有三类主体,turtles(海龟)patches(瓦片)observer(观察者),具体关系可以借用一张图了解,如图7所示

在这里插入图片描述
图 7 主体之间的理解
Turtles: 是能够在世界中移动的主体,可以理解为观察的对象,可以在仿真中有动作和个人的属性
Patches: 是组成的网格,每个patch占据一个矩形小块,它不能移动,但是有自己的属性和行为
Observer: 是一个全局主体,它观察着由turtles和patches构成的世界,能够执行指令获取世界全部或部分的状态,或实现对世界的控制,可以认为操作这个仿真的人

2. 仿真如何推进

NetLogo模型包括可 视化部件编程 两部分,二者具有紧密联系。
一般通过控件绑定函数进行实现仿真的推进。必有的函数有两个:setup和go。
setup用来设定初始状态,go用来控制实际的运行,go函数类似于JAVA语言中的main函数,它是运行的入口。

四 实战学习—牛吃草的仿真

1.项目描述

简介: 许多牛在草地上吃草,草地的初始能量以及牛的数量是初始设定的,牛在草地上移动会消耗一定的能量,牛吃草会增加自身的能量生长,当移动消耗能量很大,牛会死亡,当牛的能量很高时就是生出来小牛,草也会跟着生长
输出: 牛在不同时刻的数量,不同牛的能量,草和牛不同时刻的能量,随着时间牛的数量和草的数量之间的变化趋势
控制的参数: 初始牛的数量,初始草的能量,草长的速度,出生的小牛能量

2.主要代码

(1)setup函数,设定初始状态

to setup ;;定义setup函数
  clear-all ;;清除运行结果
  setup-patches ;;自定义函数:设置草地的初始状态
  setup-turtles;;;自定义函数,设置牛的初始状态
  reset-ticks;;时间重置
end

(2)go函数:控制程序的运行

to go
  if ticks >= 500 [ stop ] ;; stop after 500 ticks ;;程序终止条件
  move-turtles ;;自定义:牛移动的函数
  eat-grass   ;;自定义:牛吃草的函数
  check-death ;;自定义:牛是否死亡的函数
  reproduce  ;;自定义:牛生小牛的函数
  regrow-grass ;;自定义:草生长的函数
  tick                      ;;自动计时,类似i = i+1
end

(3)其他代码

turtles-own [energy] ;;设置牛的属性energy,牛吃草能量的变化

;;setup中的初始函数
to setup-patches
  ask patches [ set pcolor green ] ;;对草进行颜色设置
end

to setup-turtles
  create-turtles number    ;; 设置初始的牛的数目为number个,number因为可调,会和控件关联 
  ask turtles [ setxy random-xcor random-ycor ] ;;设置牛的初始位置随机
end


;;go中的运行函数
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 + energy-from-grass)  ;;牛吃完草后的能量增长为energy-from-grass
    ]
  ifelse show-energy?
    [ set label energy ] ;; 与控件结合,当show-energy控件参数为ture,显示牛的energy数值
    [ set label "" ]     ;; 当show-energy控件参数为false,不显示每个牛的能量值
  ]
end

to reproduce
  ask turtles [
    if energy > birth-energy [ 
    set energy energy - birth-energy  ;; 牛生下小牛,自身能量减少
    hatch 1 [ set energy birth-energy ] ;; 新牛出生并且有初始能量
    ]
  ]
end

to check-death
  ask turtles [
    if energy <= 0 [ die ] ;; 当牛的能量低于0,牛死亡
  ]
end

to regrow-grass
  ask patches [  ;;当0-100内产生的随机值小于3,草变绿,也就是3%的概率
    if random 100 < 3 [ set pcolor green ] 
  ]
end

3.界面

如下图8所示,主要有的控件如下图所示

其中设置的初始参数为:
初始牛的数量number:38
出生牛的能量birth-energy:51
牛吃草获得的能量energy-from-grass:11

在这里插入图片描述
图8 仿真界面
右击Totals图然后点击Edit可以进行画笔的设置:
图的名称为Totals
在图中进行了两个画笔的设置,一个为turtles,设置为黑色,另外一个叫做grass,设置为绿色,绘制的结果分别为:

plot count turtles;;turtles画笔绘制牛的数目
plot count patches with [pcolor = green];;grass画笔:绘制绿色的草的数目

具体的设置如图9所示
在这里插入图片描述

图9 图中画笔的设置以及命令

详情源代码可以在Netlogo模型库中找到,源代码搜索Tutorial 3即可

五 我遇到的问题

1 符号的问题

在书写的时候,字母与符号要区分开,否则计算机无法识别,例如如下两个语句,运算符号“>“以及”-“和前后要有空格隔开,负责会把”>birth-energy"与"energy-1"看成一个整体

if energy > birth-energy
set energy energy - 1 

2.go按钮的执行与tick

(1)tick起到时钟的作用,在go函数中不仅要写tick,也要在setup函数写上一句reset-ticks语句,否则在运行的时候会有错误提示框弹出

to setup ;;定义setup函数
  clear-all ;;清除运行结果
  setup-patches ;;自定义函数:设置草地的初始状态
  setup-turtles;;;自定义函数,设置牛的初始状态
  reset-ticks;;时间重置
end

(2)在go函数中以及setup函数中对应都写了正确的有关tick的函数,但是这时候点击go按钮,程序不一定会按条件执行,而是按了一下执行一下,这是因为go按钮没有设置,可以右击go按钮,点击Edit,在弹出的对话框中勾选”持续执行“即可,如图10-1所示。如果不确定可以看一下go按钮右下角有没有一个类似刷新的图标,如果有,则说明设置正确了。
在这里插入图片描述
图10-1 go按钮的设置
在这里插入图片描述
图10-2 go按钮
如下图11为运行一段时间后的牛吃草状态图:

在这里插入图片描述
图11 牛吃草的仿真结果

发布了28 篇原创文章 · 获赞 12 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章