NetLogo学习笔记2 —— 第一个程序

NetLogo学习笔记2 —— 第一个程序

上一篇文章.我们了解了什么是NetLogo,以及它的下载安装
这回我们将了解一个NetLogo模型的基本要素还有如何编写NetLogo模型
打开软件,按下图方式操作,创建一个setup按钮在这里插入图片描述
setup按钮用于初始化模型状态,因为一开始模型什么都没有,我们必须去初始化它
如果你的setup按钮创建成功了,那么它应该是红色的,因为我们没有为按钮写代码!他是未定义的!

NetLogo的Hello World

进入“代码”标签页,输入以下代码

to setup ;;函数定义,setup按钮被按下就会执行这个函数
	clear-all ;;清除世界,以免下一次初始化异常
	create-turtles 100 ;;创造100只海龟
end ;;函数定义结束

你创建按钮时输入的setup,就是说这个按钮会执行setup函数,名称其实是无所谓的……
这是第一个语法点:(有参函数定义后面会讲)

to <函数名>
<函数体>
end

还有上面用到的两个函数clear-allcreate-turtles
无参函数调用直接写函数名即可,有参函数调用在名字右边写参数并用空格分开,像上面的create-turtles 100


点击setup按钮,你会看到如下景象:
在这里插入图片描述
看过上一篇文章.,并尝试打开模型库的读者应该知道,海龟是种有位置能移动的东西,比如狼和羊
那说好的“创建100只海龟”呢?为什么只有一个七彩斑斓小圆点?
因为海龟默认会被创建在原点上,100个海龟叠加在一起,看起来就像一个小圆点了
如何让它们不互相叠加呢?给它们都设定一个随机位置即可

发送请求 —— ask

在setup函数末尾添加如下代码

  ask turtles [
    setxy random-xcor random-ycor
  ]

加上之后,再点击setup,会发现100只海龟布满整个视图。
在这里插入图片描述
那么这段代码是如何工作的呢?为什么它可以设定海龟的随机位置呢?我们首先要明白坐标集合调用主体的概念


在Netlogo中,用坐标来表示对象的位置。对于二维空间,两个数就能表示出空间位置
坐标由两个数组成,第一个代表X坐标,第二个代表Y坐标
默认情况下,X向右为正方向;Y向上为正方向,原点在中心(如下图)
坐标系
是不是很熟悉?有过初中数学基础的人都会知道,这就是我们初中学的平面直角坐标系


  ask turtles [ ;;要求所有属于集合turtles的对象执行代码
    setxy random-xcor random-ycor ;;设置海龟位置的函数setxy
  ]

集合是NetLogo中非常重要的概念,它是一些对象的总体,与数学上的集合一样,NetLogo的集合也是无序的
turtles表示全体海龟的集合,那属于turtles的对象自然是全体海龟了
要求所有属于集合turtles的对象执行代码。就是要求所有海龟执行代码,方括号是代码块
setxy是设置海龟对象位置的一个函数,它有两个参数
random-xcorrandom-ycor都是无参函数,返回随机的X坐标、Y坐标
你可能会疑惑:

  • 这段代码并没有指定哪个海龟执行命令,我们就写了个setxy,NetLogo怎么知道要谁去执行?

要明白这点,就要知道什么叫调用主体
当使用ask来请求集合中每个对象执行代码时,会进行以下操作

判断
Yes
No
随机抽取集合中的一个对象
以它为标准执行代码块的代码
集合内的对象都被抽过了?
ask执行完毕!
ask开始执行

也就是说上面的代码调用的是被抽中海龟的setxy方法,虽然我们没写调用哪个对象的方法,但ask自动帮我们绑定了!·
那个被抽中的海龟,就叫调用主体
如果你直接在setup函数里写setxy,就会报错!因为Netlogo不知道调用谁的setxy


第二个语法点:

ask <被请求集合> [
<代码写在代块(方括号)内>
]

让模型动起来!—— 持续性按钮

现在我们的模型依旧十分无趣,因为它并不会运动……我们可以通过添加一个持续性按钮让模型能够动起来
在这里插入图片描述
在“代码”里创建一个名为go的函数(创建函数的语法见上面)
再在go函数里面添加如下代码:

to go
  ask turtles [
    fd 1 ;;海龟对象的移动方法
  ]
end

上面代码的意思不难看出:让所有海龟前进1步
如果你的代码没有任何问题,那么你会看到海龟漫天飞舞:
漫天飞舞
我们只写了一句 fd 1 为什么海龟会一直移动?因为go按钮是持续性的,它会不断地执行go函数,直到被按停


以上就是NetLogo模型的基本要素

  • 一个调用setup函数的按钮用于初始化模型
  • 一个调用go函数的按钮用于使模型持续运行

这篇文章就这里了,喜欢记得关注哦!会更新的!

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值