标签翻转,共享文化.如何使代理翻转表示区域性的其他字符串值



我想让代理商与他人分享他们的文化。它们有一个长度为 11 的字符串,表示其区域性,由二进制标记(例如,10100111101(组成。 因此,为了与每个朋友分享他们的文化,他们选择一个随机标签。如果朋友同意该标签位置的代理,则不会进行任何更改;如果他们不同意,朋友的标签将被翻转以同意代理的标签(爱泼斯坦和阿克斯特尔,GAS(。

有关更多详细信息,区域性设置如下所示:

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

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

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

使用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
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 中选择一个随机数并将其用作索引,然后让提问的在该索引位置将其标签传播给您想要的所有"朋友"。在下面的示例中,每只蜱虫一只随机海龟将其培养物传播给半径为 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 文化标记,在本例中由它们的颜色表示。

最新更新