陕西小吃美食价格交流群

NetLogo怎么用? 阿大MAC课程

2021-06-17 19:27:06

前两天受托,看了一下NetLogo这个工具,顺带留一点记录。


NetLogo官方给出了两种使用方式,一个web版,一个下载版。初学建议试试web版,简单四步就可以使用了。

  1. 访问https://ccl.northwestern.edu/netlogo/

  2. 点击 Go to NetLogo web

  3. 左上角Search the Models Library,选择作业上要求的两个就可以了。一个flocking,另一个sheep

  4. 点一下setup,再点一下go,就能跑了。


以上四步就能运行了,很简单。困难点在于根据题意需要,自己写代码。我们不能直接给代码,就把他的官方demo稍微解释一下,这样看着就能依葫芦画瓢,自己写出来了。


就看sample models/biology/flocking吧,点开下面的NetLogo code,我们过一下代码。

turtles-own [

  flockmates         ;; agentset of nearby turtles

  nearest-neighbor   ;; closest one of our flockmates

]


;;是注释符,turtles-own里面的东西可以看作他的成员变量。这个turtles是什么?模型里的每一个可移动的对象都是turtle,捕食者(predator)是,普通鸟也是。官方的demo里没有“鸟”,是我们的作业里说的鸟,官方demo就是直接用的turtle。


第一个变量flockmates,先说一下flock,flock就是这些鸟聚集在一起,变成了一个flock,看youtube视频应该就能感受到这个flock。那么flockmates指的就是这个flock里面的其他鸟。


第二个变量nearest-neighbor就很好理解了,靠他最近的同类。

这个后面会有一些rules,比如每两只鸟之间的最短距离,不能小于多少,这时候就要用到这些变量了。


to setup

  clear-all

  create-turtles population

    [ set color yellow - 2 + random 7  ;; random shades look nice

      set size 1.5  ;; easier to see

      setxy random-xcor random-ycor

      set flockmates no-turtles ]

  reset-ticks

end

当点击setup按钮时候,会直接触发这个函数。

setup就像构造函数,先初始化一下。


create-turtles population,这个population是可以由我们在网页上填入的一个数字,就在setup和go这两个按钮上面。可以直接把它改成一个数字,比如50。那么代码就是:create-turtles 50


set color 和 set size, 就是定个颜色和尺寸。自己写的时候,要写一个predator的颜色,肯定要定不同颜色,区别开来。

setxy就是定初始位置了,demo定的是随机的x和y。


set flockmates no-turtles,其实就是个赋值语句,把变量flockmates的值赋为no-turtles,其实就是相当于java里面的

flockmates = null

因为是初始状态,所以设为null。


to go

  ask turtles [ flock ]

  repeat 5 [ ask turtles [ fd 0.2 ] display ]

  tick

end

在点击页面上的按钮go之后,go函数会被触发。


ask turtles [ flock ] 这里就是调用了flock函数,flock在下面接着说,他就是控制让这些turtles(我们说的鸟)动起来,然后form一个(或几个)flock。


repeat ... 这个函数是用来调节动画的,经过测试,发现把repeat后面的数字调小以后,动画会变慢,把fd后面的数字调大,动画会变快。 

总结,go函数就是调用一下flock函数,然后让这个动画动起来。


to flock  ;; turtle procedure

  find-flockmates

  if any? flockmates

    [ find-nearest-neighbor

      ifelse distance nearest-neighbor < minimum-separation

        [ separate ]

        [ align

          cohere ] ]

end


这个就是flock函数了。

find-flockmates是调用了另一个函数,这里带着把这些函数都交代了。find-flockmates会寻找这个鸟附近的其他鸟,这个“附近”的设定是有一个距离的,以这个距离为半径,把范围内的所有鸟,都设为这个鸟的flockmates,具体可以看下面find-flockmates的函数内容。

if any? flockmates 这个很好理解,看flockmates是否存在,是否为空,也就是看他周围有没有别的鸟。


if any? flockmates有的话,就从这些附近的鸟里面,找一只距离最近的。


ifelse distance nearest-neighbor < minimum-separation 如果最近的这只,靠的太近了,小于了我们设定好的一个最小值。这个最小值是可以在上面设定的,在setup和go按钮下面。

separate 如果靠的太近,就要分开了

align cohere 这两个函数就是控制移动方向,让turtles靠到一起去,从而form一个flock


先就写到这里吧,明天还要早起,先睡。

照例申明:本篇内容不含任何剧透,不含一个字答案,可放心观看。


欢迎交流,微信号 lmy931


友情链接

Copyright © 2023 All Rights Reserved 版权所有 陕西小吃美食价格交流群