是否可以使用报告多个变量的报告功能以及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在电子表格中的每个刻度处。)
答案 0 :(得分:1)
跟进评论:
我不确定您要对双重报告(a
和b
以及d
和e
做什么,所以我使用了两种不同的选项。由于c
,g
和h
在多个程序中被引用,我认为它们是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
我得到像这样的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实验,如下所示:
当我运行该实验时,我会基于每个刻度更新pack-2
,c
,g
和h
的值,如下所示在电子表格中输出:
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
如果我仍然想念您尝试输出的内容,请告诉我们!