2017-04-05 50 views
0

一般問題:我有一個記者,它是一個品種擁有的變量列表。每一個勾選這個列表都會改變,我想要做的就是製作一個列表,這個列表將存儲這個品種擁有的變量列表。將未指定數量的列表插入列表[Netlogo]

具體來說:我記錄了龜的品種(螞蟻在這裏)的「年齡」。我讓他們通過以下

to-report nest_age_dist 

    let nest-ages-list [nest-age] of ants 
    report (list [nest-age] of ants) 

end 

如果我把這個記者,我得到的東西等報道成「螞蟻窩時代」名單在每一個刻度以下(其中數字是年齡):

[[1 2 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 6 6 6 6 6]] 

這很好,但希望每個列表中的勾號都添加到保存它們的列表中。例如,我想

[[1 1 1 1 2 2 2 3 3 3 ][2 2 2 2 3 3 3 4 4 4][3 3 3 3 4 4 4 5 5 5]] 

[[tick 1 nest_age_dist ] [tick 2 nest_age_dist ] [tick 3 nest_age_dist ] [tick n nest_age_dist]] 

我希望這是顯而易見的。

看起來像這樣的解決方案應該很簡單,但我不知道如何做到這一點,我一直沒能找到一個解決方案在stackoverflow。 NetLogo中的列表是不可改變的這一事實打擊了我的想法。

作爲一個方面說明,我必須這樣做,因爲當我使用BehaviorSpace時,我不能使用nest_age_dist記者,因爲當報告大列表時,每次打勾創建的.csv都太大而無法在任何我試過的文本編輯器(TextWrangler,Texteditor,Excel)。一旦我有我的列表清單(因爲這已解決)我只想報告列表清單的最後100個列表(嵌套年齡列表)。我知道我可以多次運行更小的模擬,但是如果我不能在一夜之間離開它去做所有該死的事情,那又有什麼意義呢!

希望我的問題和提問的動機很明確。提前致謝!

回答

1

如果你想只保留最近的100窩年齡 - 距離列表中說biglist,你可以用

let biglist ifelse-value (length biglist >= 100) [lput nest-age-dist but-first biglist] [lput next-age-dist biglist] 

構建呢?所以,盧克C'S答案,也不會把戲跟進,它看起來像:

globals [all_nest_age_list last_10] 
turtles-own [age] 

to setup 
    ca 
    crt 5 [ 
    set age random 6 
    ] 
    set all_nest_age_list [] 
    set last_10 [] 
    reset-ticks 
end 

to go 

    repeat 150 [ 
    ask turtles [ 
     set age age + 1 
    ] 
    set last_10 ifelse-value (length last_10 >= 10) 
     [lput sort [age] of turtles but-first last_10] 
     [lput sort [age] of turtles last_10] 
    set all_nest_age_list lput (sort [age] of turtles) all_nest_age_list 
    ] 

    let x 10 ;; however far back you want 
    let last_x_list sublist all_nest_age_list (length all_nest_age_list - x) (length all_nest_age_list) 
    print last_x_list 
    print last_10 

end 

在那裏,我只保留最近10次,而不是100

+0

我不能得到那段代碼工作,但我已經在一定程度上解決了我的問題的一部分。下面我描述了我現在正在努力解決的問題,您的回答似乎試圖解決,但我在實施時遇到了問題。謝謝您的幫助! – HAJZ

2

迴應你最後的答案有Hajz,您可以使用sublist。像這樣的:

globals [ 
    all_nest_age_list 
    last_x_list 
] 

turtles-own [ 
    age 
] 

to setup 
    ca 
    crt 5 [ 
    set age random 6 
    ] 
    set all_nest_age_list [] 

end 

to go 

    repeat 10 [ 
    ask turtles [ 
     set age age + 1 
    ] 
    set all_nest_age_list lput (sort [age] of turtles) all_nest_age_list 
    ] 

    let x 3 ;; however far back you want 
    set last_x_list sublist all_nest_age_list (length all_nest_age_list - x) (length all_nest_age_list) 
    print last_x_list 

end