资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,Netlogo建模基础知识讲解,14302010008,秦奕深,Netlogo建模基础知识讲解14302010008,1,NetLogo简介,1.基本情况,NetLogo是一个用来对自然和社会现象进行仿真的可编程建模环境建模仿真集成环境,由美国西北大学连接学习与计算机建模中心(,Center for Connected Learning and Computer-Based Modeling,CCL,)开发。,2002年发布了1.0版本,用户手册为4.0.2版本,最新为4.1.1版本,NetLogo简介1.基本情况,2,2.主要功能,多主体建模(重点),多个移动Agent分布在二维空间中,每个Agent自主行动,所有主体并行异步更新,整个系统随着时间推进而动态变化。,运行控制,仿真输出,提供了多种手段实现仿真运行监视和结果输出,实验管理,BahaviorSpace,自动管理仿真运行,并记录结果。,系统动力学仿真,参与式仿真,HubNet,模型库,2.主要功能多主体建模(重点),3,3.软件特色,完全可编程,简单语言结构,是LOGO语言的扩展,支持智能体和网络结构,可以定义无限个智能体和变量,多种内置命令帮助使用,支持整型和双精度型浮点数计算,跨平台、可复用的应用。,3.软件特色完全可编程,4,二、NetLogo仿真框架,1.NetLogo软件,二、NetLogo仿真框架1.NetLogo软件,5,基于Netlogo建模基础知识讲解课件,6,2.模型的抽象,总体:,大量的可移动主体在二维空间中交互作用,随着时间推进,微观个体的属性不断发生变化,系统的宏观特征也因此而变化。,从三个方面理解:,主体,空间表达,仿真推进,2.模型的抽象总体:,7,(1)主体(Agents),虚拟世界由主体构成,主体能够接受命令,进行活动,所有主体的行为,并行,发生。,NetLogo中共有三类主体,,turtles(海龟),patches(瓦片),observer(观察者),(1)主体(Agents)虚拟世界由主体构成,主体能够接受命,8,主体类型,turtles指能够在世界中移动的主体。,世界是二维的,划分为由patches组成的网格,每个patch占据一个矩形小块。,patch不能移动,patch也是主体,patch和turtle一样可以有自己的属性和行为,observer是一个全局主体,它观察着由turtles和patches构成的世界,能够执行指令获取世界全部或部分的状态,或实现对世界的控制。,主体类型turtles指能够在世界中移动的主体。,9,虚拟世界,虚拟世界,10,(2)空间表达,每个patch有二维坐标(pxcor,pycor)坐标值为,整数,。,默认情况下,二维世界的水平、垂直坐标范围为(-17,17),每个turtle也有坐标(xcor,ycor),turtle坐标,不必是整数,,因此turtle不一定正好位于某个patch的中心。,一个patch上也可以同时有多个turtles。,实际上对turtle而言,NetLogo的空间是连续的。,(2)空间表达每个patch有二维坐标(pxcor,pyco,11,(3)仿真推进,没有明确的仿真时钟变量,也没有提供特定的事件处理机制,仿真推进是通过不断重复执行某个例程实现的,模型中至少要有,初始化,例程和仿真,执行,例程,初始化例程,实现对模型初始状态的设置,生成所需的turtles,设置其状态,以及其它工作。,仿真的执行,通过例程go实现,在go例程中编写所需执行的各种指令,完成一个仿真步的工作。,需要在Interface页中建立一个按钮与go例程相联系,该按钮是一个永久(forever)按钮,点击后将不断重复执行go例程,直到遇到stop指令或用户再次点击该按钮则仿真终止。,(3)仿真推进没有明确的仿真时钟变量,也没有提供特定的事件处,12,2.建模基本过程,NetLogo模型包括可视化部件和例程两部分,二者具有紧密联系。,先在Interface中创建可视化控件,然后在Procedures中实现相应的代码,通过设置控件的属性将二者联系起来。,2.建模基本过程NetLogo模型包括可视化部件和例程两部分,13,Interface中主要有三类部件,运行控制,参数控制,仿真显示,Procedure中的例程分为两类:,命令(command)例程,报告(reporter)例程,Interface中主要有三类部件,14,仿真的基本框架,初始化to setup,每一个仿真周期,to go,是否结束?,结束,对所有Turtle循环,ask turtles,每个Turtle做出决策forward 1,是,否,仿真的基本框架初始化to setup每一个仿真周期to go,15,三、编程指南,三、编程指南,16,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,breed ,17,四、生态系统建模示例,假设要模拟一个简单的生态系统,,该系统中有一种生物以青草为食,通过吃草获取能量、,该类生物经历成长、繁殖、死亡过程。,四、生态系统建模示例假设要模拟一个简单的生态系统,,18,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,1.初始化创建生物群体,并将它们随机分布在空间中。to,19,2.仿真执行例程,实现turtle随机移动,实现go例程,与forever按钮联系,go 调用move-turtles例程,2.仿真执行例程实现turtle随机移动,20,增加代码:(demo2),to go ;定义仿真执行例程go,move-turtles ;调用例程move-turtles,end,to move-turtles ;定义例程move-turtles,;所有turtle执行 中的命令序列,ask turtles,right random 360 ;右转一个角度,度数随机产生,forward 1 ;前进距离1,end,增加代码:(demo2)to go,21,3.青草的模拟,为模拟青草的存在设置patches为绿色,改写setup 例程,其中调用了两个新的例程setup-turtles和setup-patches,分别设置turtle和patch的初始状态,3.青草的模拟为模拟青草的存在设置patches为绿色,22,demo3,to setup,clear-all,setup-patches ;调用例程setup-patches,setup-turtles ;调用例程setup-turtles,end,to setup-patches,;命令所有patches执行指令set pcolor green,;该指令将patch颜色设置为绿色,ask patchesset pcolor green,end,to setup-turtles,create-turtles 100,ask turtlessetxy random-xcor random-ycor,end,demo3to setup,23,4.主体行为,现在增加一些行为,假设turtle以青草为食,通过吃草获得能量,移动时要消耗能量。,patch代表青草,绿色表示有,黑色表示无。,为实现这样的模型,需要重新定义turtles的属性和行为,然后重写go例程。,首先给turtle增加变量energy以存储当前能量值,,另外添加吃草获取能量的例程,,还要修改移动例程以反映能量消耗。,4.主体行为现在增加一些行为,假设turtle以青草为食,通,24,自定义turtle变量,修改go,turtles-ownenergy,;声明turtle变量energy,to go,move-turtles ;turtle随机移动,消耗能量,eat-grass ;吃草获取能量,end,自定义turtle变量,修改goturtles-ownen,25,定义eat-grass,turtle吃草获取能量,修改patch颜色表示草的有无,to eat-grass,;如果turtle所在patch颜色为绿色,表示有草,则吃草,,;令该patch颜色变为黑色,表示已无草,然后自身能量增加10,ask turtles,if pcolor=green,set pcolor black,set energy(energy+10),end,定义eat-grassturtle吃草获取能量to eat-,26,修改原来的move-turtles例程,添加能量消耗指令。,to move-turtles,ask turtles,right random 360,forward 1,set energy energy-1 ;移动后能量减少1,end,修改原来的move-turtles例程,添加能量消耗指令。t,27,假设turtle能量小于等于0就死亡,当能量大于50就繁殖;青草以一定的恢复率再生。由于主体行为发生了改变,需重新定义go例程,,to go,move-turtles ;移动,eat-grass ;吃草,reproduce ;繁殖,check-death ;死亡,regrow-grass ;青草再生,end,假设turtle能量小于等于0就死亡,当能量大于50就繁殖;,28,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 ;如果能量小于等于0则死亡,end,to regrow-grass,ask patches,;青草以0.03的概率再生,if random 100=terminate-time stop ;判断是否应停止,move-turtles,eat-grass,reproduce,check-death,regrow-grass,do-plots,set ticks ticks+1 ;时钟推进,end,代码globals ticks ;声明全局,36,五、建模技术,1.访问邻域原语,Neighbors ,Moore邻域,neighbors4,von Neumann邻域,in-radius,at-points,五、建模技术1.访问邻域原语,37,2.主体交互,T-P交互,turtle能够直接访问所在之处的patch,对该patch的属性进行读写,ask turtl
展开阅读全文