zoukankan      html  css  js  c++  java
  • 学习记录:用netlogo6.1.1创建完整的模型

    1.创建新模型

    2.创建按钮

    先做一个setup按钮,用来重置模型:

    to setup ;;;定义一个名为setup的代码
      clear-all ;;;将世界设为初始状态,为新模型运行做好准备
      create-turtles 100 [ setxy random-xcor random-ycor ];;;有100个个体,它们接受观察者写在[]里的命令:返回任意一个x坐标,和任意一个y坐标,个体移动到这个位置
      reset-ticks ;;;重置时间步
    end

    回到界面,发现setup已经变黑,说明已经写了代码,点击运行

    出现了很多彩色的小箭头,它们就代表我们创建的100个个体,而且多点几次setup会发现每次彩色箭头的分布都不一样。

    有了setup,还需有go按钮,go表示让模型动起来,前几步步骤同上,主要代码不一样,而且需要在编辑对话框里勾选持续运行:

    因为setup只是用来重置,它一次就可完成,不需要持续运行;而go是一个当你点击后就不会主动停下来的键,也就是控制世界的运行的开关键。

     现在开始写go的代码:

    to go
      move-turtles
      tick
    end

    这里的move-turtles是我们接下来要定义的语句,它可以看做是一个函数,我们要定义一个move-turtles函数,让它来决定个体如何移动

    to move-turtles
      ask turtles [
        right random 360
        forward 1
      ]
    end

    这个代码让个体,从0-360任选一个实数,然后向右偏转该角度,并且前进一格。现在这个模型已经可以运转了,回到界面,先点击setup,再点击go,观察一下发生了什么事

    然后我们考虑羊吃草那个模型,把背景看做是草地,羊会吃掉草,草也会生长,现在需要修改一下模型的代码:

    to go
      move-turtles
      eat-grass
      tick
    end
    
    to move-turtles
      ask turtles [
        right random 360
        forward 1
        set energy energy - 1
      ]
    end
    
    to eat-grass
      ask turtles [
        if pcolor = green [
          set pcolor black
          set energy energy + 10
        ]
      ]
    end

    可以看见,go中多了一个新函数eat-grasseat-grass做的事情是,如果个体背景pcolor的颜色是绿色,也就是羊来到了它脚下的一小块草地,那么这块草地会被吃光,吃光了的草地用黑色表示;然后羊自身的能量也会增加,因为吃饱了,增加多少呢,增加10。

    同时羊在走的时候也会消耗能量,所以原先的move-turtles函数也需要修改,每走一步,就降低1个能量。

    因为energy这个特征是新定义的,原来的个体没有这个energy,所以需要在所有代码的最前端先设定一下:

    turtles-own[energy]

    羊吃草全代码如下,现在已经可以运行这个羊吃草的模型了:

    turtles-own[energy]
    
    
    to setup
      clear-all
      setup-patches
      setup-turtles
      reset-ticks
    end
    
    to setup-patches
      ask patches [set pcolor green ]
    end
    
    to setup-turtles
      create-turtles 100 [ setxy random-xcor random-ycor ]
    end
    
    
    to go
      move-turtles
      eat-grass
      tick
    end
    
    to move-turtles
      ask turtles [
        right random 360
        forward 1
        set energy energy - 1
      ]
    end
    
    to eat-grass
      ask turtles [
        if pcolor = green [
          set pcolor black
          set energy energy + 10
        ]
      ]
    end

     3.监视器

    接下来可以创建一个监视器,来监视turtles/羊,patches/草的数目变化:

    监视器可以监视系统中个体的数目变化,以及背景/草的变化。但是在我们的设定中,还有一个变量,就是羊的能量,羊通过吃草来获得能量,通过移动来消耗能量,能量是动态的,是我们额外增加给这个系统个体的一个特征,我们需要来看看怎么把能量也像前面的个体数目,草的数量一样可视化出来。

    4.开关

    energy是之前在代码部分定义过的变量

    还需要在代码部分添加:

    代码的意思是,如果打开开关,就把energy作为一个标签打在个体的身上,使我们可以在图中看见变化,否则就标签为空

    打开开关,就可以看到每个个体身上都有一个数字,下图表示的是草吃光了,羊的能量逐渐变负:

    5.其他设定

    reproduce函数表示,如果个体的能量大于50,那么它就hatch产生一个新个体,这个个体和母体一样,但是要执行[]中的命令,在这里就是妈妈自身减少50的能量,产生了一个能量为50的其余部分都相同的新个体;hatch是软件本身的语言,表示产生

    check-death表示的是如果个体能量小于0,就死去;die是本身的语言,表示消失

    regrow-grass表示个体随机检查0-99内的数是否小于3,也就是有3%的概率,去把它所在位置的草地变绿;

    现在有一些草会重生,有新个体产生,死去的个体不再参与交互

    6.画图

    7.时钟计数器

    有时候我们需要比较,更改某个变量(比如个体数量)前后曲线的变化,我们希望在相同时间步来比较,就是都运行500次来比较,手动也可以达到,这里有个更快的方法就是设置计数器,需要在go部分修改

    可以看见它很完美的在500步停止了

    8.更改参数

    我们可以在代码里更改一些参数,还有一种做法就是在界面里新增滑块来完成:

    然后把我们代码部分的要调整的值,从原先的某个具体的数,改成number即可:

    以此类推,可以把之前我们在代码里写的所有,数字的部分,如果愿意,都可以调整为滑动条形式:

  • 相关阅读:
    CSS选择器
    CSS选择器详解(二)通用选择器和高级选择器
    CSS选择器详解(一)常用选择器
    30个最常用css选择器解析
    常用CSS缩写语法总结
    XHTML 代码规范
    命名空间(xmlns属性)
    HTML 5 <meta> 标签
    HTML <!DOCTYPE> 标签
    Mybatis-generator 逆向工程
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/12895478.html
Copyright © 2011-2022 走看看