在Netlogo BehaviorSpace中使用to-report过程:“使用这些记者运行测量:”

时间:2017-06-26 22:35:11

标签: netlogo

是否可以使用报告多个变量的报告功能以及Netlogo行为空间中的刻度更新(使用这些记者运行测量),以便当更新时,报告的值会相应地更新为电子表格?< / p>

    `to setup
      clear-all
      create-turtles 100 [ setxy random-xcor random-ycor ]
      reset-ticks
    end`

      to go
       move-turtles
       tick
        if ticks = 100 [
          stop
        ]
    end

    to move-turtles
      ask turtles [
        right random (90 + c)
        forward g + h
      ]
    end

    to-report pack
      ifelse (z? = true) [
        let a random-float 1.0
        let b random-float 2.0
        let c random-float 3.0
          if c > 1.5 [
           let g = a - b
           report g
          ]
           report a 
           report b
          ]
        [
        let d random-float 1.0
        let e random-float 2.0
        let f random-float 3.0
          if f > 1.5 [
           let h = d - e
           report h
           ]
           report d 
          report e
      ]
   ]
end

z?是界面上的开关。当z?打开时,报告g或a和b,但当开关关闭时,报告h或d和e(给定c和f分别大于1.5的条件)。

如果我在行为空间中调用报告函数pack,在measure runs using these reporters字段内,生成的电子表格不会显示应该是的值的逐个滴答结果更新报告(g或a和b,h或d和e,取决于开关z?是打开还是关闭)。电子表格仅包含与设置过程关联的初始化。

另外,我收到一个运行时错误:reached end of reporter procedure without report being called netlogo

如何让pack报告者输出值的结果,因为它们会在行为空间中的批处理模拟运行中通过结果电子表格中的刻度更新? (我希望它的行为与行为空间中count turtles字段的Measure runs using these reporters条目的行为相同,除了代替乌龟计数,它应该在每个刻度处显示g或a和b,否则h,d和e在电子表格中的每个刻度处。)

1 个答案:

答案 0 :(得分:1)

跟进评论:

我不确定您要对双重报告(ab以及de做什么,所以我使用了两种不同的选项。由于cgh在多个程序中被引用,我认为它们是globals。我使用的代码:

globals [ c g h ]

to setup
  clear-all
  create-turtles 100 [ setxy random-xcor random-ycor ]
  reset-ticks
  set c 10
  set g 2
  set h 3
end


to go
  move-turtles
  tick
end


to move-turtles
  ask turtles [
    right random (90 + c)
    forward g + h
  ]
end


to-report pack
  ifelse (z? = true) [
    let a random-float 1.0
    let b random-float 2.0
    set c random-float 3.0
    if c > 1.5 [
      set g a - b
      report g
    ]
    report ( word a " " b )
  ]
  [
    let d random-float 1.0
    let ee random-float 2.0
    let f random-float 3.0
    if f > 1.5 [
      set h d - ee
      report h
    ]
    report d + ee    
  ]
end

然后,我设置了Behaviorspace实验,如下所示: Example Behaviorspace setup

我得到像这样的Table输出:

   run   z1. step                                   pack
1    2 FALSE    0                             0.18138234
2    2 FALSE    1                            1.676066247
3    2 FALSE    2                            0.403470969
4    1  TRUE    0                            -0.10139442
5    2 FALSE    3                            1.399234345
6    2 FALSE    4                           -0.887992861
7    1  TRUE    1  0.0671613060827172 1.5362438146989783
8    2 FALSE    5                           -0.864156125
9    2 FALSE    6                            1.626410602
10   1  TRUE    2  0.5789346091777932 1.1071709255628879
11   2 FALSE    7                            0.446313014
12   1  TRUE    3 0.7216825225835118 0.22072137498998523

编辑:示例2

试试这位pack-2记者:

to-report pack-2
  let x random 5
  let y random 7
  set g g + 1
  if z? [
    set c c * 1.2
  ]
  set h x + y
  report ( word x " " y )
end

然后,尝试设置BehaviorSpace实验,如下所示:

Set up for the second experiment

当我运行该实验时,我会基于每个刻度更新pack-2cgh的值,如下所示在电子表格中输出:

   pack.2         c  g  h pack.2.1 c.1 g.1 h.1
1     0 0  12.00000  3  0      2 2  10   3   4
2     0 3  14.40000  4  3      2 1  10   4   3
3     3 5  17.28000  5  8      4 4  10   5   8
4     1 2  20.73600  6  3      4 0  10   6   4
5     4 6  24.88320  7 10      3 6  10   7   9

就像在Table输出中那样(使用R或其他方法更容易处理):

   X.run.number.    z. X.step. pack.2       c g h
1              1  true       0    3 0 12.0000 3 3
2              2 false       0    2 0 10.0000 3 2
3              1  true       1    4 4 14.4000 4 8
4              2 false       1    1 0 10.0000 4 1
5              1  true       2    4 1 17.2800 5 5

如果我仍然想念您尝试输出的内容,请告诉我们!