Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netlogo 每滴答更新一次监视器,而不是连续更新。慢模式_Netlogo - Fatal编程技术网

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 ]

通过这种方式,您可以控制计算完成的时间,如果计算实际上使您的模型变慢,则可能会加快模型的速度。

您是否尝试过移除/禁用监视器,以查看它是否确实是导致您变慢的原因?如果不是,您可以尝试使用探查器扩展来跟踪哪些零件需要很长时间来计算。如果显示器速度变慢了,您是否可以改为使用输出区域,并且每次只更新一次?您是否尝试过移除/禁用显示器,以确定这是否真的是导致您速度变慢的原因?如果不是,您可以尝试使用探查器扩展来跟踪哪些零件需要很长时间来计算。如果监视器的速度变慢了,你能改为使用输出区域,并且每刻度只更新一次吗?“使用一个只报告一个变量的监视器,你每刻度手动计算一次”-是的,这就是我建议的“使用一个只报告一个变量的监视器,你每刻度手动计算一次”-是的,这就是我的建议