2017-07-26 37 views
0

我想讓代理商與他人分享他們的文化。它們有一串長度爲11的字符串,代表他們的文化,由二進制標籤(例如,10100111101)組成。 因此,爲了與每個朋友分享他們的文化,他們選擇一個隨機標籤。如果朋友同意在該標籤位置的代理商,則不做任何更改;如果他們不同意,朋友的標籤被翻轉以與代理人的標籤(Epstein and Axtell,GAS)一致。標記翻轉,分享文化。如何讓代理商翻轉代表文化的其他字符串值

更多詳細信息,文化設置如下:

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

後來,對於子集化的目的,我篩選這樣來算的0和給他們一個組:

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

回答

3

使用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 
2
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文化標籤,在這個例子中由它們的顏色表示。