嵌套的Foreach列表NetLogo

时间:2017-12-07 12:13:05

标签: list foreach nested netlogo

您好,

在Netlogo v.6中,我正在尝试计算对等方合作行为的时间加权度量。关键是,我无法弄清楚如何在NetLogo中做一个嵌套的foreach。

我目前的做法:

  1. 设置列表:reputation_peer
  2. 设置一个列表:Reputation_peer_list,变量1(行为)和变量2(时间刻度)
  3. 每次遭遇,将Reputation_list添加到reputation_peer,使reputation_peer成为列表列表
  4. 计算加权声誉:
    • 获取Reputation_peer中每个列表的第2项,即该遭遇的时间刻度
    • 并将其除以当前时间刻度。
    • 这给出了一个分数:该遭遇的刻度/总时间刻度
    • 设置列表Reputation_weighted
    • 要权衡声誉,将时间分数乘以Reputation_peer的第一项,即行为变量
  5. 然后,我想通过从Reputation_weighted获取所有值并将其添加来了解Reputation_current。
  6. 我正在搞乱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事情都在继续。我猜它可能会简单得多。

    如果你们有一些提示,那将会对我有很大的帮助。

1 个答案:

答案 0 :(得分:2)

我不是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