2017-07-26 4 views
0

Ich möchte die Agenten dazu bringen, ihre Kultur mit anderen zu teilen. Sie haben eine Zeichenfolge der Länge 11, die ihre Kultur darstellt und aus binären Tags besteht (z. B. 10100111101). Also, um ihre Kultur mit jedem Freund teilen, wählen sie ein zufälliges Tag. Wenn der Freund mit dem Agenten an dieser Position übereinstimmt, wird keine Änderung vorgenommen. Wenn sie nicht übereinstimmen, wird das Tag des Freundes umgedreht, um dem Tag des Agenten zu entsprechen (Epstein und Axtell, GAS).Tag-spiegeln, Kultur teilen. Wie man Agenten dazu bringt, andere String-Werte zu flippen, die Kultur repräsentieren

Für weitere Einzelheiten wird die Kultur-Setup ist wie folgt:

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

Und später, für einen bestimmten Zweck subsetting, ich so filtern, um die 0er zu zählen und ihnen eine Gruppe geben:

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

Antwort

3

Verwendung 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 

Dieses Setup erstellt 10 Schildkröten mit t-culture-tags wie in Ihrem Beispiel oben. Jetzt, da Sie sagen, dass eine Änderung nur auftritt, wenn sich die Tags zwischen der handelnden Schildkröte und ihrem Freund unterscheiden, ist es wahrscheinlich am einfachsten, die Kultur der fragenden Schildkröte immer zu verbreiten (da dies im Endeffekt keine Änderung an der t-culture-tags der Freund).

Sie können also eine Zufallszahl von 0 bis 10 wählen und diese als Index verwenden, dann lassen Sie die fragende Turtle ihr Tag an dieser Indexposition an alle von Ihnen gewünschten "Freunde" verteilen. Im Beispiel unten, von denen jede Zecke eine zufällige Schildkröten breitet seine Kultur zu allen anderen Schildkröten in einem Umkreis von 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 

Wenn Sie ausführen, dass für eine Weile, werden Sie feststellen, dass alle Schildkröten, die innerhalb eines Radius sind ein anderer wird schließlich identische t-Kultur-Tags haben, die in diesem Beispiel durch ihre Farbe dargestellt sind.