【问题标题】:Nested Foreach List NetLogo嵌套 Foreach 列表 NetLogo
【发布时间】:2018-05-21 13:13:38
【问题描述】:

你好,

在 Netlogo v.6 中,我试图计算对等点合作行为的时间加权度量。关键是,我不知道如何在 NetLogo 中进行嵌套 foreach。

我目前的做法:

  1. 设置列表:reputation_peer
  2. 设置一个列表:reputation_peer_list,变量 1(行为)和变量 2(时间刻度)
  3. 每次遭遇,将reputation_list 添加到reportation_peer,使reputation_peer 成为列表列表
  4. 计算加权信誉:
    • 在reputation_peer 中获取每个列表的第2 项,这是该遭遇的时间滴答
    • 除以当前时间刻度。
    • 这给出了一个分数:那次遭遇的滴答声/总时间滴答声
    • 设置一个名单reputation_weighted
    • 为了衡量信誉,将时间分数乘以信誉_peer的第一项,即行为变量
  5. 然后,我想知道当前的信誉,方法是从信誉加权中获取所有值并将它们相加。

我正在搞乱 foreach 函数,但我似乎无法弄清楚。 在 Netlogo 中如何编码这种方法?

我当前的代码是(自己设置reputation_peer来测试它):

to calculate_reputation
    set reputation_peer [[8 4][9 2][10 3][11 2][14 1]]
    if ticks > 0 [
      foreach reputation_peer [x -> set reputation_peer_list list (item 0 x) ((item 1 x) / ticks )
      set reputation_peer_list_2 lput reputation_peer_list reputation_peer_list_2]
      foreach reputation_peer_list_2 [x -> set reputation_peer_list_list (list (item 0 x * item 1 x))]
      foreach reputation_peer_list_list [x -> set reputation_peer_current reputation_peer_current + x] 
    ]
end

我真的不知道我是否做得对,但主要是,这段代码看起来非常庞大,所有 list_list 的事情都在进行。我猜它可能会简单得多。

如果你们有一些建议,将极大地帮助我。

【问题讨论】:

    标签: list foreach nested netlogo


    【解决方案1】:

    我不能 100% 确定您期望的最终输出是什么,但也许这可以满足您的需求?

    to calc-rep-2
      set reputation_peer [[8 4][9 2][10 3][11 2][14 1]]
      let weighted_rep_list []
    
      if ticks > 0 [
        foreach reputation_peer [ x ->
          ; Pull out the values from reputation_peer for ease of use
          let encounter_behavior item 0 x
          let encounter_time item 1 x
    
          ; Calculate the time fraction for the current item
          let time_fraction encounter_time / ticks
    
          ; Calculate the weighted reputations
          let weighted_rep encounter_behavior * time_fraction
    
          ; Add the weighted rep to the list of weighted reps
          set weighted_rep_list lput weighted_rep weighted_rep_list
        ]
    
        ; Now, weighted_rep_list is a list of weighted reputations
        print weighted_rep_list
    
        ; Get the sum of the list
        print sum weighted_rep_list
      ]  
    
      tick
    end
    

    【讨论】:

    • 嗨卢克,非常感谢您的帮助!你的代码让我更进一步。现在只是有一个不同的问题,我似乎无法解决。如果你有时间,也许你可以看看它。它位于编辑部分顶部的主要问题中。
    • @maria118code 嗨,玛丽亚,很高兴它有帮助!可能值得为您的编辑开始一个新问题,因为它是一个单独的问题。实际上,为了帮助可能与您有类似问题的其他人,最好不要在得到有效答案后完全删除原始代码。我个人建议您“回滚”您的编辑,以便显示您的原始问题(您的编辑在您帖子下的“x 小时前编辑”链接下跟踪)并开始一个新问题。
    • 是的,听起来很合理!对于任何有兴趣的人,另一个问题现在发布在stackoverflow.com/questions/47720730/…
    猜你喜欢
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    相关资源
    最近更新 更多