我有几只海龟,每只都有三个变量意见1、意见2和意见3。我需要他们:
- 确定这三个变量中哪一个具有最高值
- 在他们的网络中找到另一只值(value)至少相同的海龟 如 1 中所示。
- 更新其在 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
你会得到这样的东西:
每只乌龟都有一个 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/