Netlogo:在评估给定变量的相似性后使乌龟与另一个乌龟互动

标签 netlogo agent-based-modeling

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

  1. 确定这三个变量中哪一个具有最高值
  2. 在他们的网络中找到另一只值(value)至少相同的海龟 如 1 中所示。
  3. 更新其在 1. 中找到的自身值 与 2 中发现的海龟的情况相同。

我所做的并没有真正起作用,因为它只更新查看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

你会得到这样的东西:

enter image description here

每只乌龟都有一个 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

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

关于Netlogo:在评估给定变量的相似性后使乌龟与另一个乌龟互动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55537006/

相关文章:

netlogo - 如何在netlogo中输出图形

simulation - 如何在netlogo中制作累计总和列表

aggregate-functions - 当代理群体在 Netlogo 中具有相同变量时停止该过程

performance - Netlogo - 有效更新大型 GIS 景观中空间聚集变量的颜色

simulation - 如何为基于代理的模型实现基于规则的决策者?

simulation - Modelica 中基于代理的建模

java - 服务使用资源对象时如何访问资源对象?

netlogo - 在NetLogo中实现碰撞的最简单方法

netlogo - `or` 和 `and` 在 NetLogo 中具有相同的优先级

NetLogo:继续奔跑