2017-03-02 76 views
2

我有兩個列表,每個代理。他們顯示1)他們被吸引到誰,2)他們吸引了誰。 我想創建一個新的集合變量,只顯示那些相互吸引的代理。相同的吸引力是:代理(自我)的號碼在其他代理的'吸引'列表中,並且其他代理的號碼在第一代理(自己)'吸引'列表中。我的代碼到目前爲止:兩個列表組合

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] 

回答

1

編輯以更好地回答下面評論中澄清的問題。

好吧,現在,海龜將有一個他們曾經吸引過的所有海龜的運行清單。每個蜱,龜都會被其他三隻海龜吸引。他們將這些海龜添加到他們的「吸引到」列表中(如果他們不在該列表中)。接下來,海龜會檢查是否有任何「被吸引的」海龜被它們吸引 - 如果是,他們會將這隻海龜添加到「相互吸引」列表中(如果它已經不存在)。那是你以後的更多嗎?

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

它不起作用。請記住吸引力和吸引力是在滴答期間更新的列表。他們可以在代理2中被選中,但在代碼2中吸引代理人2。代碼沒有考慮到這一點。請幫忙。 – Newguy

+0

WITH預期的輸入是一個代理集,但得到了列表[]。 – Newguy

+1

它確實有效;我用上面的代碼來運行海龜,在每次打勾時更新它們的吸引力。我編輯了我的答案,包括所需的唯一安裝程序,所以我的答案現在包含使所有程序正確執行所需的所有行。 你的'with'錯誤源於使用'with'和列表,比如上面創建的「equal-attraction-list」,而不是代理集。請注意,在上面的代碼中,'with'原語都在查詢代理集「被吸引到」。 –