【问题标题】:NetLogo - Delaying the execution of certain commands based on ticksNetLogo - 根据滴答声延迟某些命令的执行
【发布时间】:2020-05-20 04:23:36
【问题描述】:

您好 NetLogo 社区,

我试图让名为“users”的代理为最后两个滴答声(执行“Go”命令的最后两个实例)保存变量的某个值(字符串)。但是,用户必须在前两个刻度后存储这些值。谁能给我一个出路?我已经尝试实现以下逻辑,但它似乎不起作用。

ask users
  [
    set history-length-TM 2
    if ticks > 2
    [
      set TM-history n-values history-length-TM [mode-taken]
      foreach TM-history [x = "car"]
      [
        commands that are to be executed
        .....
        ......
      ]
    ]
  ]

“history-length-TM”是要存储值的刻度范围。 “TM-History”是存储变量“mode-taken”值的列表。请建议一种更好的方法,可以帮助我实现意图。提前致谢。

【问题讨论】:

    标签: list foreach simulation netlogo nested-loops


    【解决方案1】:

    我不确定我是否完全理解刻度与这个问题的关系。我的建议是这样的:

    globals [history-length-TM]
    users-own [TM-history]
    
    to setup
      set history-length-TM 2
      ...
    end
    
    ask users
      ....
      set TM-history fput mode-taken TM-history
      if length [TM-history] > history-length-TM [set TM-history but-last TM-history]
    end
    

    这个想法是通过将新模式放置在列表的前面来填满内存(使用fput)。一旦内存太长,最后一个(最旧的)就会从列表中删除。

    【讨论】:

    • 您好 Jen B 先生/女士,感谢您的反馈。我意识到您的代码有助于将模式采用的值存储在 TM 历史列表中指定长度的值,最新的是列表中的“项目 0”,前一个值是列表中的“项目 1”,随后更新.但是,我想让代理不是从第一个滴答声而是在几个滴答声之后执行此类命令,因为第三个滴答声已经有 2 个模式值,这是根据程序的需要来完成的.如果可能的话,你能推荐一个替代品吗?提前致谢。
    • 先生/女士您好。 JenB,“已经有 2 个值”是在我的代码中存储“采用模式”的值的结果:“设置 TM-history n-values history-length-TM [mode-taken]”。我希望从第三个滴答声开始发生这种情况,这就是我需要了解的全部内容。感谢您抽出时间回答我的问题。
    • if ticks > 2 [ ...... ] 中的任何代码都将从第 3 次及以后的刻度出现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2020-09-18
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多