代码之家  ›  专栏  ›  技术社区  ›  Til Hund

Netlogo-计算相邻代理变量的差异

  •  1
  • Til Hund  · 技术社区  · 5 年前

    我想让每个代理询问他们的邻居一个海龟拥有的变量的价值,并根据它们的不同设置它们。

    我知道如何在距离上做到这一点:

    if (any? other turtles-here)
      [
        ask neighbors [ ;; ask 8 neighbors / neighbors4 for 4
          ;if (max-one-of turtles [distance myself]) <= 3
          ;[set opinion opinion - .1] ; no change in opinion
          ;if (distancexy point1-pxcor point1-pycor) > 20 and (distancexy point1-pxcor point1-pycor) <= 50
          ;[set point1-location "middle"]
          ;if (distancexy point1-pxcor point1-pycor) > 50
          ;[set point1-location "far"]
        ]
    

    然而,我为实现价值交换而努力。我如何做到这一点?

    这是我的MWE。

    请注意,所讨论的代码部分是伪代码。

    breed [ turtles ]
    turtles-own [ variable ]
    
    to setup
      clear-all
      create-turtles 100
      [
        set variable random-float 10
      ]
      reset-ticks
    end
    
    to communicate
      if (any? other turtles-here)
      [
        ask neighbors [
          pseudo-code: if difference of your variable and my variable is bigger then 3, than do nothing
          if differences less then 3, calculate the higher variable minus 0.1 and the lower variable plus 0.1
          if difference less then 2, calculate the higher variable minus 0.3 and the lower plus 0.3
          if difference less then 1, calculate the arithmetical mean
        ]
      ]
    
    end
    
    to go
      ask turtles [
        rt random 360
        fd 1
        communicate
      ]
      tick
    end
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Nicolas Payette    5 年前

    你的伪代码有很大的解释空间,所以这可能不是你想要的,但我认为它可以让你开始:

    to communicate
      ask turtles-on neighbors [
        let both-turtles (turtle-set self myself)
        let difference abs (variable - [ variable ] of myself)
        if difference < 1 [ ask both-turtles [ set variable mean [ variable ] of both-turtles ] ]
        if difference < 2 [ bring-closer both-turtles 0.3 ]
        if difference < 3 [ bring-closer both-turtles 0.1 ]
      ]
    end
    
    to bring-closer [ both-turtles delta ]
      ask min-one-of both-turtles [ variable ] [ set variable variable + delta ]
      ask max-one-of both-turtles [ variable ] [ set variable variable - delta ]
    end
    

    这里发生了很多事情,但没有什么过于复杂的。我认为你需要理解的主要概念是: self myself 在局部变量中存储agentset的想法,以及编写接受参数的过程的想法。你可以在 programming guide 并查找 dictionnary .