Netlogo基础知识讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四、生态系统建模示例
假设要模拟一个简单的生态系统,
该系统中有一种生物以青草为食,通过吃草
获取能量、 该类生物经历成长、繁殖、死亡过程。
1. 初始化
创建生物群体,并将它们随机分布在空间中。
例程(demo1)
to setup ;;定义例程setup clear-all ;;设置整个世界为初始状态 ;;创建100个turtles,创建后各turtle默认坐标是(0,0) create-turtles 100 ;;命令所有turtle执行语句setxy random-xcor random-ycor ;;各turtle 坐标随机产生,实现turtles在空间中的随机分布 ask turtles [setxy random-xcor random-ycor] end
to eat-grass ;;如果turtle所在patch颜色为绿色,表示有草,则吃草, ;;令该patch颜色变为黑色,表示已无草,然后自身能量增加10 ask turtles[ if pcolor = green[ set pcolor black set energy (energy+10) ] ] end
7.仿真参数控制
参数控件
开关(switch)、滑动条(slider)、选择器(chooser) 这些控件都对应一个全局变量,在Procedures中
将这些全局变量作为参数使用在程序中,就能实 现仿真参数的控制。
例如:选择仿真时长
breed [ ] turtles-own [ ] globals [ ] to setup [ ] end to go [ ] end ask turtles [ set pcolor white ] set-default-shape turtles "person" setxy random-xcor random-ycor set turtles-own random set age ( 22 + random 53 ) set age ( age + 1 ) set house 0 clear-all(ca) forward(fd) 1 create-turles 100 sprout-breeds number [ ] sprout number [ ] hatch number [ ] hatch-breeds number [ ] ask one-of men [set breed ] if ifelse
observer是一个全局主体,它观察着由turtles和 patches构成的世界,能够执行指令获取世界全部或 部分的状态,或实现对世界的控制。
虚拟世界
Observer
Turtle
Patch
(2)空间表达
每个patch有二维坐标(pxcor,pycor)坐标值为整数。 默认情况下,二维世界的水平、垂直坐标范围为(-17,17) 每个turtle也有坐标(xcor,ycor)
2.仿真执行例程
实现turtle随机移动
实现go例程,与forever按钮联系 go
调用move-turtles例程
增加代码: (demo2)
to go move-turtles end ;;定义仿真执行例程go ;;调用例程move-turtles
to move-turtles ;;定义例程move-turtles ;;所有turtle执行[ ]中的命令序列 ask turtles[ right random 360 ;;右转一个角度,度数随机产生 forward 1 ;;前进距离1 ] end
Netlogo建模基础知识讲解
北京邮电大学世纪学院 丁锐
NetLogo简介
1.基本情况 NetLogo是一个用来对自然和社会现象进行 仿真的可编程建模环境建模仿真集成环境 由美国西北大学连接学习与计算机建模中心 (Center for Connected Learning and Computer-Based Modeling,CCL)开发。 2002年发布了1.0版本,用户手册为4.0.2版 本,最新为4.1.1版本
命令(command)例程
报告(reporter)例程
仿真的基本框架
初始化to setup 对所有Turtle循环 ask turtles 每一个仿 真周期to go
每个Turtle做出决策 forward 1
否
是否结 束?
是
结束
三、编程指南
to go move-turtles eat-grass reproduce check-death regrow-grass end
;;移动 ;;吃草 ;;繁殖 ;;死亡 ;;青草再生
to reproduce ask turtles[ if energy > 50[ ;;如果能量大于50则繁殖 set energy energy-50 ;;母体能量减少50 hatch 1 [set energy 50] ;;产生一个后代,初始能量50 ] ] end to check-death ask turtles[ if energy<=0 [die] ] end
3.青草的模拟
为模拟青草的存在设置patches为绿色
改写setup
例程,其中调用了两个新的例程 setup-turtles和setup-patches,分别设置 turtle和patch的初始状态
demo3
to setup clear-all setup-patches setup-turtles end ;;调用例程setup-patches ;;调用例程setup-turtles
turtle坐标不必是整数,因此turtle不一定正好位于某个patch的中心。
一个patch上也可以同时有多个turtles。 实际上对turtle而言,NetLogo的空间是连续的。
(3)仿真推进
没有明确的仿真时钟变量,也没有提供特定的事件 处理机制 仿真推进是通过不断重复执行某个例程实现的 模型中至少要有初始化例程和仿真执行例程
绘制turtles数量和青草数量曲线
添加Plot控件
创建两个画笔,分别指定颜色 添加do-plots例程 修改
setup和go例程
to setup clear-all setup-patches setup-turtles do-plots end to go move-turtles eat-grass reproduce check-death regrow-grass do-plots end
turtles(海龟) patches(瓦片)
observeБайду номын сангаас(观察者)
主体类型
turtles指能够在世界中移动的主体。 世界是二维的,划分为由patches组成的网格,每个 patch占据一个矩形小块。
patch不能移动
patch也是主体 patch和turtle一样可以有自己的属性和行为
2. 主要功能
多主体建模(重点)
多个移动Agent分布在二维空间中,每个Agent自主行动,所有主体
并行异步更新,整个系统随着时间推进而动态变化。
运行控制 仿真输出
提供了多种手段实现仿真运行监视和结果输出
实验管理
BahaviorSpace,自动管理仿真运行,并记录结果。
系统动力学仿真 参与式仿真
HubNet
模型库
3.软件特色
完全可编程
简单语言结构 是LOGO语言的扩展,支持智能体和网络结
构 可以定义无限个智能体和变量 多种内置命令帮助使用 支持整型和双精度型浮点数计算 跨平台、可复用的应用。
二、NetLogo仿真框架
1. NetLogo软件
自定义turtle变量,修改go
turtles-own[energy]
to go move-turtles eat-grass end ;;声明turtle变量energy
;;turtle随机移动,消耗能量 ;;吃草获取能量
定义eat-grass
turtle吃草获取能量
修改patch颜色表示草的有无
to setup-patches ;;命令所有patches执行指令set pcolor green ;;该指令将patch颜色设置为绿色 ask patches[set pcolor green] end to setup-turtles create-turtles 100 ask turtles[setxy random-xcor random-ycor] end
修改原来的move-turtles例程,添加能量消耗指 令。
to move-turtles ask turtles [ right random 360 forward 1 set energy energy - 1 ;;移动后能量减少1 ] end
假设turtle能量小于等于0就死亡,当能量大于50就繁 殖;青草以一定的恢复率再生。由于主体行为发生了 改变,需重新定义go例程,
2.建模基本过程
NetLogo模型包括可视化部件和例程两部分,
二者具有紧密联系。 先在Interface中创建可视化控件,然后在 Procedures中实现相应的代码,通过设置控 件的属性将二者联系起来。
Interface中主要有三类部件
运行控制 参数控制 仿真显示
Procedure中的例程分为两类:
;;如果能量小于等于0则死亡
to regrow-grass ask patches[ ;;青草以0.03的概率再生 if random 100<3 [set pcolor green] ] end
5.监视仿真运行
监视器控件(monitor)
显示turtle数量,monitor表达式“count turtles”
初始化例程实现对模型初始状态的设置,生成所需的
turtles,设置其状态,以及其它工作。 仿真的执行通过例程go实现,在go例程中编写所需执行 的各种指令,完成一个仿真步的工作。 需要在Interface页中建立一个按钮与go例程相联系,该 按钮是一个永久(forever)按钮,点击后将不断重复执行 go例程,直到遇到stop指令或用户再次点击该按钮则仿 真终止。
2.模型的抽象
总体:
大量的可移动主体在二维空间中交互作用,随着
时间推进,微观个体的属性不断发生变化,系统 的宏观特征也因此而变化。
从三个方面理解:
主体 空间表达 仿真推进
(1)主体(Agents)
虚拟世界由主体构成,主体能够接受命令,
进行活动,所有主体的行为并行发生。 NetLogo中共有三类主体,
主体标签
每个主体有一个变量lable
6.图形输出
在Interface中创建Plot控件,在Procedures
中编制绘图例程。 绘图概念
每个Plot控件必须指定一个唯一名,在绘图时通
过Plot名指定在哪个Plot上绘图 绘图时必须使用某个画笔,画笔默认是黑色实 线,也可以创建自定义画笔
;;绘制初始点
;;随仿真运行绘制图形
to do-plots set-current-plot “totals” ;;选定plot控件 set-current-plot-pen “turtles” ;;选定画笔turtles plot count turtles ;;绘制turtles数量 set-current-plot-pen “grass” ;;选定画笔grass plot count patches with [pcolor=green] ;;绘制青草数量 end
4.主体行为
现在增加一些行为,假设turtle以青草为食,通过吃 草获得能量,移动时要消耗能量。 patch代表青草,绿色表示有,黑色表示无。 为实现这样的模型,需要重新定义turtles的属性和 行为,然后重写go例程。
首先给turtle增加变量energy以存储当前能量值, 另外添加吃草获取能量的例程, 还要修改移动例程以反映能量消耗。