首页 > 解决方案 > Netlogo:在评估给定变量的相似性后让乌龟与另一个人互动

问题描述

我有几只海龟,每只都有三个变量意见 1、意见 2 和意见 3。我需要他们:

  1. 确定这三个变量中哪个具有最高值
  2. 在他们的网络中找到另一只乌龟,其值至少与在 1 中找到的乌龟一样高。
  3. 相对于在 2 中找到的海龟的值,更新在 1 中找到的自己的值。

我所做的并没有真正起作用,因为它只更新查看 o1 而没有真正查看哪棵树(意见 1、意见 2 或意见 3)是最高的,然后寻找邻居。

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

标签: netlogoagent-based-modeling

解决方案


我不知道一种简单的方法来使用诸如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,然后查询该海龟的邻居以查看它们中的任何一个在同一索引位置是否具有更高的值。如果是这样,请修改您的询问海龟opinions列表replace-item,使其成为两个值的平均值:

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

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


推荐阅读