【问题标题】:Netlogo model is extremely slow and has a delay between each tickNetlogo 模型非常慢,每个滴答之间都有延迟
【发布时间】:2016-02-22 16:02:16
【问题描述】:

我创建的模型非常慢。我是 Netlogo 的初学者,不确定是我的代码效率低下还是我的系统配置有问题。

我有一个 35 x 35 的网格,我的大部分操作都是基于补丁的,即每个补丁必须找到最近和最远的海龟以及它们的距离,并在此基础上执行额外的操作。此外,在基于 if-else 逻辑的每个滴答声中,不满足条件的补丁使用 scale-color 函数以渐变方式变为白色,而满足条件的补丁必须采用最近的海龟的颜色。

我可以发布代码但不想发送垃圾邮件,请告知。谢谢。

以下代码似乎有问题。

to update-support

  ask patches [
    set closest-party min-one-of parties [distance myself]
    set closest-party-dist [distance myself] of closest-party
    set farthest-party max-one-of parties [distance myself]
    set farthest-party-dist [distance myself] of farthest-party

    set f 0
    set h 0

    set f ( -1 / ( [my-old-size] of closest-party / sum[my-old-size] of parties )) * (closest-party-dist ^ 2)
    set h ( [my-old-size] of farthest-party / sum[my-old-size] of parties ) * (farthest-party-dist ^ 2)

    set b-c (f + h)

    ifelse (b-c <= threshold)
    [ set votes-with-benefit 0 set pcolor scale-color white citizen-share 0 max-citizen-share ]
    [ set votes-with-benefit citizens set pcolor scale-color ([color] of closest-party) citizen-share 0 max-citizen-share]
  ]


   ask parties [ set my-size sum [votes-with-benefit] of patches with [closest-party = myself]
    ;set my-benefit mean[b] of patches with [closest-party = myself]
    set my-benefit-chen mean[b-c] of patches with [closest-party = myself]
  ]


  set largest-party max-one-of parties [my-size]

end

参与方的数量是动态的 - 可以在 2 到 10 之间。更新支持模块在 set & go 中都被调用。以下是该代码:

to setup
  clear-all
  setup-citizens
  setup-parties
  update-support
  setup-plot
  reset-ticks
end

to go
  ask parties [ adapt set my-old-size my-size ]
  update-support
  plot-voter-support
  plot-voter-turnout
tick
end

问候 尤瓦拉杰

【问题讨论】:

  • 最可能的问题是您在另一个 ask 中有一个 ask ...,但继续发布代码
  • 我已经包含了我认为导致问题的代码部分,当我在没有与“b-c”计算相关的脚本的情况下运行模型时,模型运行良好,没有任何延迟并且是快。
  • 有多少个聚会?
  • 我们能否也请查看调用此过程的代码(例如go 代码)
  • @JenB - 您好 JenB,感谢您在下面的评论。我将把该更改包含在模型中。但是您是否认为这会导致模型运行缓慢,因为我在模型的先前版本中有相同的部分,它不那么复杂并且运行良好。只有在我包含“f”、“h”和“b-c”组件之后,模型才变得非常沉重和缓慢。感谢你的帮助。谢谢

标签: netlogo patch


【解决方案1】:

第一个简单的修复,如果你多次使用一个补丁集,创建一次然后调用它。所以:

ask parties [ set my-size sum [votes-with-benefit] of patches with [closest-party = myself]
set my-benefit-chen mean[b-c] of patches with [closest-party = myself]
]

变得(并且更易于阅读,并且如果您稍后更改条件,可以确保一致性)

ask parties
[ let my-patches patches with [closest-party = myself]
  set my-size sum [votes-with-benefit] of my-patches
  set my-benefit-chen mean[b-c] of my-patches
]

以类似的方式,您在代码中有两次sum[my-old-size] of parties(计算 f 和 h),实际上您一遍又一遍地计算它,因为您要求每个补丁运行此代码。你应该计算一次然后使用它:

to update-support
  let old-total sum [my-old-size] of parties
  ask patches
  [ ...
    set f ( -1 / ( [my-old-size] of closest-party / old-total )) * (closest-party-dist ^ 2)
    set h ( [my-old-size] of farthest-party / old-total ) * (farthest-party-dist ^ 2)
    set b-c (f + h)
    ...
  ]
  ...
end

这些更改能带来多大的改进主要取决于参与方的数量。请尝试一下,看看是否解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 2020-07-02
    • 2020-09-18
    • 2012-09-22
    • 1970-01-01
    • 2016-05-17
    • 2011-09-04
    • 2018-09-07
    相关资源
    最近更新 更多