NetLogo ⼊门(⼆)——模型基本语法
上⼀节已向读者展⽰如何下载NetLogo、熟悉NetLogo⽤户界⾯,以及如何创建⼀个⾃定义模型,即100个“箭头”在⼀个世界中不断向前移动。但现实中的模型远⽐它要复杂,因⽽也要求我们更深⼊地了解NetLogo建模的语法。
tanfu⼀、最简单的模型
ontology
如上⼀节所述,即使是最简单的模型,也含有两个过程(procedure)过程(procedure)——tup和go(当然,tup命名成别的名称也可以,但⼀般不这么做,因为不习惯)⼀个过程的定义由to <;过程名>开头,end作结尾。tup过程⼀般都会含有clear-all和ret-ticks命令(command)。
clear-all :将整个世界重置,清除世界中所含的所有东西,从⽽允许⼀个新模型开始运⾏。ret-ticks :重置时钟,使时间步重新变为0。
⼀个go 过程的末尾往往有tick ,表⽰时间步加1。回到界⾯标签(Interface tab),会发现速度滑块(speed slider)旁边有⼀个下拉列表框,可以选择“按时间步更新”或“连续更新”。
按时间步更新:每运⾏完⼀次go 过程就更新⼀次视图(view)。连续更新:go 过程中每⼀步的进⾏都会导致视图(view)更新⼀次。
⼀般我们选取“按时间步更新”,⽐如上⼀节中建⽴简单模型时录制的gif动画。
⼆、基本概念
NetLogo是⼀款⽤于建⽴基于个体的模型(individual-basd model,IBM)基于个体的模型(individual-basd model,IBM)的软件。对于⼀个IBM,NetLogo有⼀套专门的术语体系:
主体(agent):NetLogo模型世界中所有类型的对象,能够接受⽤户施加的命令并做出响应。主体(agent)有以下类型:海龟(turtle)、嵌块(patch)、链接(link)和观察者(obrver)。
海龟(turtle):⽣存在嵌块上的个体,它们往往能够移动,例如⽺和狼。当然,植物不能移动。每个海龟有xcor、ycor坐标,运动⽅向heading,以及颜⾊属性color。
嵌块(patch):海龟的⽣存环境。每⼀个嵌块是⼀个正⽅形,并拥有独⽴的坐标属性pxcor、pycor以及颜⾊pcolor 链接(link):连接两个海龟,⽤于表述关系。
观察者(obrver):拥有上帝视⾓,能役使某个海龟、嵌块或链接变化其属性或产⽣特定的⾏为。
世界(world):模型所处的整个空间。是个⼆维空间,横坐标有最⼩值min-pxcor和最⼤值max-pxcor,纵坐标同理。默认的最⼤、最⼩横纵坐标为16。当⼀个海龟从跑出某⼀边界时,会从另⼀边
界的对应位置重新进⼊该空间。也就是说,“世界”是⽆限延伸的。当然,这是默认设置。也可以设置成有边界世界,这⾥先不作展开。
成都网页设计培训例如,在命令中⼼(command center)中输⼊以下语句。注意“>”符号前的内容不是输⼊部分,⽽是软件左下⾓已经显⽰的⽂字。点击“obrver>(观察者)”⽂字,会出现列表框(如下图所⽰),从⽽选择不同的视⾓。
wike
to tup clear-all
create-turtles 100 [ txy random-xcor random-ycor] ret-ticks end to go
ask turtles [ forward 1 ] tick end
1
2345678910
主体集(agentt)
主体集(agentt)即所有主体组成的结合,例如海龟集(turtles)就是所有海龟组成的集合体。接下来的关键是要让海龟(turtles)动起来,
命令(command):⽤于让⼀个主体(agent)执⾏动作的⽅法。当然,也可⽤于改变某⼀主体(agent)的属性变量。其中,NetLogo中内置的命令称为内置命令(primitive command),⽤户⾃定义的命令称为过程(procedure)。
报告⼦(reporter):⽤于计算出⼀个数值并返回它。同样,NetLogo内置的报告⼦称为内置报告⼦(primitive reporter),⽤户⾃定义的报告⼦称为报告⼦过程(reporter procedure)。⼀个过程的定义以to 开头,⼀个报告⼦过程的定义以to-report 开头。为更好地阐述这些概念,将上述程序稍微修改⼀下:最后⼀个重要的概念是变量(variable)。实际上,在上述程序中我们已经使⽤了⼤量的变量。变量有以下类型:
obrver> ask turtles [ t color red ] ;;所有海龟变成红⾊turtles> t color blue ;;所有海龟变成蓝⾊
obrver> ask patches [ t pcolor green ] ;;所有嵌块变成绿⾊obrver> ask turtles [ t xcor 0 ] ;;所有海龟的横坐标设为0
1234
to tup
朱泰祺
vemoclear-all ;;内置命令,重置世界 tup-turtles ;;调⽤⾃定义过程 ret-ticks ;;内置命令,重置时钟end to go
move-turtles ;;调⽤⾃定义过程 tick ;;内置命令,时间步加1end
to tup-turtles
create-turtles 100 [ txy random-xcor random-ycor]
;;create-turtles 内置命令,创建100个海龟,并对它施加txy 命令 ;;txy 内置命令,设置海龟坐标
;;random-xcor 内置报告⼦,随机⽣成⼀个世界范围内的横坐标end
to move-turtles ask turtles [ right random 45 forward 1 ]
;;ask 内置命令,以obrver ⾝份向其他agent 发出命令 ;;right 右转。random 为内置报告⼦,⽣成0–45°间的随机数 ;;forward 前进1个单位end
1
23456789101112131415161718192021222324252627
全局变量(global variable):在全局范围内均起作⽤的变量,有两种:(1)控件全局变量。在Interface tab中创建⼀个滑块,或开关,或输⼊框等等,创建每个控件时,你都会被要求在“全局变量”⽂本框中填写对应的全局变量名称。⽽这⼀变量名,在NetLogo程序的任意部分都可以使⽤。(2)显式声明的全局变量。即采⽤语句globals [ VarName ]定义⼀个全局变量。
主体变量(agent variable):它们是主体的属性,也有两种:(1)内置主体变量,包括海龟类的xcor、ycor、color和heading,嵌块类的pxcor、pycolor和pcolor;(2)显式声明的主体变量。采⽤语句turtles-own [VarName]、patches-own [VarName]、links-own [VarName]来定义。
局部变量(local variable):只在某⼀过程(procedure)中起作⽤。采⽤语句let [VarName] Value来定义。
三、常⽤内置命令
命令含义发起者
有道翻译下载
clear-all重置世界obrver
ret-ticks重置始终obrver
英语感谢信范文
tick时间步加1obrver create-turtles <NUM> [ command(optional) ]创建海龟obrver
die去除海龟turtle
ask <agents> [ command ]役使主体obrver
t <VarName> <Value>给变量赋值agent
right <NUM>右转NUM°turtle
党员代表发言left <NUM>左转NUM°turtle
forward <NUM>直⾛NUM个单位turtle
四、品种(breed)
很多时候,海龟并不只有⼀种。例如在狼和⽺的模型中,就有两种海龟。将上述程序修改为以下程序:
相⽐之下,主要是⼦过程tup-turtles 和move-turtles 稍微发⽣了⼀些变化,需要为⽼⿏和青蛙类单独定义⾏动规则。注意,定义breed 后,NetLogo会⾃动⽣成针对于相应breed的命令。例如原来的cr
eate-turtles ⾃动变成了create-mice 和create-frogs 。再⽐如turtles-own 也会变成mice-own 等。
上⼀篇:
上⼀篇: [NetLogo⼊门(⼀)——熟悉操作界⾯](blog.csdn/Robby_Wu/article/details/123440877?spm=1001.2014.3001.5501)下⼀篇:
下⼀篇: Under Construction…breed [mice mou] ;;定义mice 类海龟 复数+单数breed [frogs frog] ;;定义frog 类海龟 复数+单数to tup clear-all tup-turtles ret-ticks end to go move-turtles tick end
to tup-turtles create-mice 50 [ t color white
txy random-xcor random-ycor ]
create-frogs 50 [ t color green
txy random-xcor random-ycor ]end
to move-turtles ask mice [ right random 45 forward 1 ]
约数是什么
ask frogs [ left random 45 forward 1 ]end
1234567891011121314151617181920212223242526272829303132333435