2017-03-02 3 views
2

Ich habe zwei Listen für jeden Agenten. Sie zeigen 1), zu wem sie hingezogen werden und 2) wen sie anzogen. Ich möchte eine neue Set-Variable erstellen, die nur die Agenten anzeigt, die sich gleichermaßen ansprechen. Gleiche Anziehung ist: Die Nummer des Agenten (Selbst) ist in der "Anziehungs" -Liste des anderen Agenten und die Nummer des anderen Agenten ist in der "Anzieh" -Liste für den ersten Agenten (Selbst). Mein Code so weit:Zwei Listen Kombination

if attracted != nobody [set attractinglists fput ([self] of attracted) attractinglists] 

    if attracted != nobody [set attrlists fput ([self] of attracting) attrlists] 

    set attractinglist [self] of other turtles with [member? myself attrlists] 

Antwort

1

Edited um besser auf die Frage zu beantworten, wie unten in den Kommentaren geklärt.

In Ordnung, jetzt haben Schildkröten eine laufende Liste aller Schildkröten, zu denen sie jemals angezogen wurden. Jedes Mal werden Schildkröten von drei anderen Schildkröten angezogen. Sie fügen diese Schildkröten zu ihrer "Angezogen" -Liste hinzu (wenn sie nicht bereits auf dieser Liste stehen). Als nächstes überprüfen die Schildkröten, ob sie von ihren Schildkröten angezogen wurden - wenn ja, werden sie diese Schildkröte der Liste der "Gegenseitigen Anziehung" hinzufügen (wenn sie nicht schon da ist). Wolltest du das mehr?

turtles-own [ 
    attracted-to 
    reciprocal-attraction  ;;; the turtles to which this turtle is attracted 
] 


to setup 
    ca 
    create-turtles 10 [ 
    set attracted-to [] 
    set reciprocal-attraction [] 
    ] 
end 


to go 

    ask turtles [ 
    let temp-attraction sort n-of 3 other turtles 
    show temp-attraction 
    foreach temp-attraction [ 
     [x]-> 
     if (member? x attracted-to = false) [ 
     set attracted-to lput x attracted-to 
     ] 
    ] 
    ] 

    ask turtles [ 
    foreach attracted-to [ 
     [x]-> 
     if member? self [attracted-to] of x [ 
     if (member? x reciprocal-attraction = false) [ 
      set reciprocal-attraction lput x reciprocal-attraction 
     ] 
     ] 
    ] 
    ] 

end 
+0

Es funktioniert nicht. Beachten Sie, dass Attraktivität und Attraktivität Listen sind, die während der Ticks aktualisiert werden. Sie können in Tick 10 zu Agent 2 gezogen werden, ziehen aber diesen Agent 2 in Tick 2 an. Der Code berücksichtigt das nicht. Bitte helfen Sie. – Newguy

+0

MIT erwarteter Eingabe als Agentensatz, aber stattdessen die Liste []. – Newguy

+1

Es funktioniert; Ich habe den Code oben mit Schildkröten ausgeführt, die ihre Attraktionen zu Beginn jedes Ticks aktualisieren. Ich habe meine Antwort so bearbeitet, dass sie das einzige Setup-Verfahren enthält, das benötigt wird, sodass meine Antwort jetzt alle Zeilen enthält, die benötigt werden, damit dies ordnungsgemäß ausgeführt wird. Ihr 'with'-Fehler rührt von der Verwendung von' with' mit einer Liste, z. B. "equal-attraction-list", die oben erstellt wurde, statt von einem Agentensatz. Beachten Sie, dass in dem obigen Code beide 'mit' Grundelemente den Agentensatz" angezogen an "abfragen. –