Netlogo 每滴答更新一次监视器,而不是连续更新。慢模式
我知道监视器每秒更新几次,这在检查模型输出时很有用;然而,我的模型不是这样的,它只是把它压了下来 我正试图从监视器中绘制数据。如果可能的话,我希望监视器每滴答只更新报告器一次 我的模型目前可以正常工作,但它陷入了每秒多次更新的困境。我希望有人能帮助我通过每滴答更新一次来最小化模型的计算工作量 当前代码示例:Netlogo 每滴答更新一次监视器,而不是连续更新。慢模式,netlogo,Netlogo,我知道监视器每秒更新几次,这在检查模型输出时很有用;然而,我的模型不是这样的,它只是把它压了下来 我正试图从监视器中绘制数据。如果可能的话,我希望监视器每滴答只更新报告器一次 我的模型目前可以正常工作,但它陷入了每秒多次更新的困境。我希望有人能帮助我通过每滴答更新一次来最小化模型的计算工作量 当前代码示例: globals [initial-patch0-health patch0-health intial-patch2-health patch2-health] patches-own [p
globals [initial-patch0-health patch0-health intial-patch2-health patch2-health]
patches-own [ptype penergy max-penergy alive?]
to setup
clear-all
set patch-health 0
ask-patches [
setup-patches
]
reset-ticks
end
to setup-patches
let temp random 100
if temp <= 50 [
set ptype 2
set max-penergy random-in-range 0 5
set alive? true
]
if temp > 50 and temp <= 75 [
set ptype 0
set max-penergy random 10
set alive? true
]
set penergy max-penergy
set patch2-health (ptype2-health)
set patch0-health (ptype0-health)
end
to go
ask-patches
update-patch-health
tick
end
to patch-health
if ptype = 2[
set patch2-health (ptype2-health)
]
if ptype = 0 [
set patch0-health (ptype0-health)
]
end
to-report ptype2-health
report [penergy] of patches with [ptype = 2]
end
to-report ptype0-health
report [penergy] of patches with [ptype = 0]
end
及
在这种情况下,我使用sum是因为报告者提供了一个列表
在上下文中,我正在做一个简单的“绵羊-狼捕食”样式的模型,但我想用多种草类型(ptype)监控初始草健康与草健康随时间的变化。我有海龟,但没有包括在这里的代码。如果您需要我提供更多代码,请告诉我
这段代码以牺牲速度为代价提供了我想要的输出。我认为每滴答声只报告一次就可以节省一些计算时间。有任何关于清理和加速的建议吗?您的代码示例对我不可用(未定义的变量,
patch0 health
不是从报告器输出的,其他错误)-请检查。考虑到这一点,我在复制您描述的问题时遇到了困难-我在监视器存在和不存在的情况下运行了一些profiler
测试,在运行时没有任何差异。使用此设置:
extensions [ profiler ]
globals [ patch-turtle-sum profiler-results]
to setup
ca
ask n-of ( ( count patches ) / 2 ) patches [
set pcolor red
]
crt 1000 [
setxy random-pxcor random-pycor
]
set profiler-results []
reset-ticks
end
to profile-check
repeat 20 [
profiler:start
repeat 20 [
go
]
set profiler-results lput profiler:inclusive-time "go" profiler-results
profiler:reset
]
print profiler-results
end
to go
ask turtles [
fd 1
]
tick
end
to-report patch-turtle-sum-report
report sum [count turtles-here] of patches with [ pcolor = red ]
end
我从界面运行了profile check
程序,一次是使用监控patch-turtle-sum报告的监视器(平均go
inclusive time:678.59 ms),一次是不使用(平均go
inclusive time:678.56 ms)-无可检测差异但是,我不确定探查器是否占监视器的比例,所以在这种情况下,该评估可能没有用处。也可能是您正在处理的补丁数量非常大(在我的测试示例中,我正在执行100 X 100补丁),因此计算陷入困境
我想知道你是否可以通过使用一个监视器来解决你的问题,该监视器只报告一个变量,你可以在每个刻度上手动计算一次(而不是使用来报告报告器)-例如,按照我上面的例子,监视一个变量,该变量会更新为:
set patch-turtle-sum sum [count turtles-here] of patches with [ pcolor = red ]
通过这种方式,您可以控制计算完成的时间,如果计算实际减慢了您的模型,则可能会加快模型的速度。您的代码示例对我不可用(未定义的变量,patch0 health
不是从报告器输出的,其他错误)-检查。考虑到这一点,我在复制您描述的问题时遇到了困难-我在监视器存在和不存在的情况下运行了一些profiler
测试,在运行时没有任何差异。使用此设置:
extensions [ profiler ]
globals [ patch-turtle-sum profiler-results]
to setup
ca
ask n-of ( ( count patches ) / 2 ) patches [
set pcolor red
]
crt 1000 [
setxy random-pxcor random-pycor
]
set profiler-results []
reset-ticks
end
to profile-check
repeat 20 [
profiler:start
repeat 20 [
go
]
set profiler-results lput profiler:inclusive-time "go" profiler-results
profiler:reset
]
print profiler-results
end
to go
ask turtles [
fd 1
]
tick
end
to-report patch-turtle-sum-report
report sum [count turtles-here] of patches with [ pcolor = red ]
end
我从界面运行了profile check
程序,一次是使用监控patch-turtle-sum报告的监视器(平均go
inclusive time:678.59 ms),一次是不使用(平均go
inclusive time:678.56 ms)-无可检测差异但是,我不确定探查器是否占监视器的比例,所以在这种情况下,该评估可能没有用处。也可能是您正在处理的补丁数量非常大(在我的测试示例中,我正在执行100 X 100补丁),因此计算陷入困境
我想知道你是否可以通过使用一个监视器来解决你的问题,该监视器只报告一个变量,你可以在每个刻度上手动计算一次(而不是使用来报告报告器)-例如,按照我上面的例子,监视一个变量,该变量会更新为:
set patch-turtle-sum sum [count turtles-here] of patches with [ pcolor = red ]
通过这种方式,您可以控制计算完成的时间,如果计算实际上使您的模型变慢,则可能会加快模型的速度。您是否尝试过移除/禁用监视器,以查看它是否确实是导致您变慢的原因?如果不是,您可以尝试使用探查器扩展来跟踪哪些零件需要很长时间来计算。如果显示器速度变慢了,您是否可以改为使用输出区域,并且每次只更新一次?您是否尝试过移除/禁用显示器,以确定这是否真的是导致您速度变慢的原因?如果不是,您可以尝试使用探查器扩展来跟踪哪些零件需要很长时间来计算。如果监视器的速度变慢了,你能改为使用输出区域,并且每刻度只更新一次吗?“使用一个只报告一个变量的监视器,你每刻度手动计算一次”-是的,这就是我建议的“使用一个只报告一个变量的监视器,你每刻度手动计算一次”-是的,这就是我的建议