Netlogo:让海龟在评估给定变量的相似性后与另一只海龟互动

Netlogo: Making a turtle interact with anotherone after evaluating similarity in a given variable

我有几只海龟,每只都有三个变量 opinion1、opinion2 和 opinion3。我需要他们:

  1. 确定这三个变量中哪一个具有最高值
  2. 在他们的网络中找到另一只价值至少一样高的海龟 正如在 1.
  3. 中找到的那样
  4. 更新在 1. 中找到的自己的值 关于 2.
  5. 中发现的乌龟

我所做的并没有真正起作用,因为它只更新查看 o1 而没有真正查看树中的哪一个(opinion1、opinion2 或 opinion3)最高,然后寻找邻居。

to update-opinion
  ask turtles [
    let my-nearby-turtles nw:turtles-in-radius 1
    let my-opinion1 opinion1
    set neighbour one-of my-nearby-turtles with [ opinion1 > my-opinion1 ]
    if neighbour != nobody [
      let opinion_n [opinion1] of neighbour
        set opinion1 ((opinion1 + opinion_n) / (2))
    ]
  ]
end

我不知道使用 opinion1 等独特变量来执行此操作的简单方法,但也许有一个意见列表而不是每个意见的单独变量会起作用。例如,使用此设置:

extensions [ nw ]

turtles-own [ 
  opinions
]

to setup
  ca
  resize-world -5 5 -5 5
  set-patch-size 30
  crt 30 [
    set shape "dot"
    set opinions n-values 3 [ precision random-float 10 2]
    set color scale-color blue sum opinions -5 35
    while [ any? other turtles-here ] [
      move-to one-of neighbors4
    ]
  ]
  ask turtles [
    create-links-with turtles-on neighbors4
  ]
  reset-ticks
end

你得到这样的东西:

其中每只乌龟都有一个 opinions 列表变量,它的长度为三项。现在,您可以让每只海龟使用 max 确定其最高意见值,使用 position 获取列表中的最大值索引位置,然后查询该海龟的邻居以查看它们中是否有更高的值在相同的索引位置。如果他们这样做,请使用 replace-item 修改您的询问海龟 opinions 列表,使其成为两个值的平均值:

to go
  ask turtles [
    ; Get adjacent turtles
    let my-nearby-turtles nw:turtles-in-radius 1

    ; Identify the highest highest value variable of 
    ; the current turtle, and get its list position
    let my-opinion max opinions
    let my-op-ind position my-opinion opinions

    ; Pick one of the turtles whose value in the same indexed
    ; position is higher than my-opinion
    let influence one-of my-nearby-turtles with [ 
      item my-op-ind opinions > my-opinion
    ]

    ; If that turtle exists, update my own opinions list as appropriate
    if influence != nobody [
      let new-opinion  precision ( 
        ( [ item my-op-ind opinions ] of influence + my-opinion ) / 2
      ) 2
      set opinions replace-item my-op-ind opinions new-opinion
    ]
    set color scale-color blue sum opinions -5 35
  ]
  tick
end

希望这是在正确的轨道上,不确定列表是否适合您的需要。如果您必须在每个滴答时将变量作为独立值,我想您可以将它们转换为列表,然后按照上面的过程进行操作。如果你只需要它们用于输出,你可以根据列表中的值根据需要更新你的唯一变量(只要你与顺序一致)。