标签翻转,分享文化。如何让代理翻转其他代表文化的字符串值

Tag-flipping, share culture. How to make agents flipp other string values representing culture

我想让代理商与他人分享他们的文化。他们有一个长度为 11 的字符串代表他们的文化,由二进制标签组成(例如,10100111101)。 因此,为了与每个朋友分享他们的文化,他们 select 一个随机标签。如果朋友同意该标签位置的代理,则不做任何更改;如果他们不同意,则将朋友的标签翻转为同意代理人的标签(Epstein 和 Axtell,GAS)。

更详细的文化设置如下:

set t-culture-tags n-values 11 [random 2]

后来,出于子集化的目的,我像这样过滤以计算 0 并给它们分组:

set shared-culture (filter [i -> i = 0] t-culture-tags)
turtles-own [ t-culture-tags ]

    to setup
      ca
      reset-ticks
      crt 10 [
        set t-culture-tags n-values 11 [ random 2 ]
        setxy random-xcor random-ycor
        set color sum t-culture-tags + 50
      ]

    end

该设置创建了 10 只 t-culture-tags 的海龟,如上例所示。现在,既然你说只有当代理乌龟和它的朋友之间的标签不同时才会发生变化,那么最简单的方法可能就是总是传播请求乌龟的文化(因为实际上,这不会导致 t-culture-tags 的朋友)。

因此,您可以从 0 到 10 中选择一个随机数并将其用作索引,然后让提问的乌龟将其标签在该索引位置传播到您想要的所有 "friends"。在下面的示例中,每刻一只随机海龟将其文化传播给半径 5 内的所有其他海龟:

to spread-culture

  ask one-of turtles [
    let tag-index random 11
    let my-tag-at-index item tag-index t-culture-tags

    if any? other turtles in-radius 10 [
      ask other turtles in-radius 10 [
        set t-culture-tags replace-item tag-index t-culture-tags my-tag-at-index
        set color sum t-culture-tags + 50
      ]
    ]
  ]
  tick

end

如果你 运行 一段时间后,你会发现所有在彼此半径范围内的海龟最终都会有相同的 t-culture 标签,在这个例子中用它们的颜色表示。

使用replace-item:

turtles-own [ t-culture-tags ]

to setup
  clear-all
  create-turtles 10 [ set t-culture-tags n-values 11 [random 2] ]
end

to go
  ask turtles [
    let friend one-of other turtles
    let i random length t-culture-tags
    let my-tag item i t-culture-tags
    let friend-tag [ item i t-culture-tags ] of friend
    if my-tag != friend-tag [
      set t-culture-tags replace-item i t-culture-tags friend-tag
    ]
  ]
end