2017-08-16 25 views
0

我正在從文件讀取的值中設置修補程序。該值在列表的列表:Netlogo在通過列表〜6K列表時丟失了不一致的結果

[[10001 53 1 2 160 4 4 4 1] [10004 69 1 2 143 4 4 4 2] [10005 70 2 2 135 3 3 4 2] [10006 51 2 2 132 4 4 3 3] ... ]

每個「內部」名單有補丁的屬性值。
位置2的值(我從第一個值的0開始計數)表示性別:
1 =男性,2 =女性。

我的方法:

to setup-patches-as-agents [ patches-data ] 
    set male-count 0 
    set female-count 0 
    set total-rows 0 
    foreach patches-data [ 
     [ one-row ] -> 
     ask patches with [ pxcor = random-pxcor and pycor = random-pycor] 
     [ set total-rows total-rows + 1 
     ;; add values to patch properties 
     ;; **** id **** 
     set p-midus_id item 0 one-row 
     ;; **** age ***** 
     set p-age item 1 one-row 
     ;; gender 1= MALE; 2= FEMALE; 7= DON'T KNOW; 8= REFUSE    
     set p-gender item 2 one-row 
     if item 2 one-row = 1 ;; male 
     [ set pcolor blue 
      set male-count male-count + 1 ] ;; male 
     if item 2 one-row = 2 ;; female 
     [ set pcolor orange 
      set female-count female-count + 1 ] ;; female 
     ;; **** lose10lb **** 
     set p-lose10lb item 3 one-row 
     ;; **** weightYrAgo **** 
     set p-weightYrAgo item 4 one-row 
    ;; **** limitLiftCarryGroceries **** 
     set p-limitLiftCarryGroceries item 5 one-row 
     ;; **** limitClimbingStairs **** 
     set p-limitClimbingStairs item 6 one-row 
     ;; **** limitWalkingSeveralBlocks **** 
     set p-limitWalkingSeveralBlocks item 7 one-row 
     ;; **** limitWalkingSeveralBlocks **** 
     set p-limitWalkingSeveralBlocks item 8 one-row 
    ] 
    ] 
    type "male-count: " 
    print male-count 
    type "female-count: " 
    print female-count 
    type "total-count: " 
    print total-rows 
end 

行的總讀取數量爲:6325(輸出讀取文件,該文件中的行
男性的總數應該是匹配的數目後:3004女性爲:3321計數我這些變量的變化,包括「行」的總數得到

任何想法,爲什麼?

回答

0

我切換到龜和設置的所有特性,包括初始座標現在我得到了正確的數字。我懷疑座標選擇補丁的條件可能是個問題,但我不確定。無論如何,這是我的解決方案:

to setup-turtles [ turtles-data ] 
    foreach turtles-data [ 
    [ one-row ] -> 
    crt 1 [ 
     set shape "square" 
     setxy random-xcor random-ycor 
     set size 2 
     ;;(item 0 one-row) and ycor = (item 1 one-row) ] [ 
     ;; **** id **** 
     set midus_id item 0 one-row 
     ;; **** age ***** 
     set age item 1 one-row 
     ;; gender 1= MALE; 2= FEMALE; 7= DON'T KNOW; 8= REFUSE    
     set gender item 2 one-row 
     if item 2 one-row = 1 ;; male 
     [ set color blue ] ;; male 
     if item 2 one-row = 2 ;; female 
     [ set color orange ] ;; female 
     ;; **** lose10lb **** 
     set lose10lb item 3 one-row 
     ;; **** weightYrAgo **** 
     set weightYrAgo item 4 one-row 
    ;; **** limitLiftCarryGroceries **** 
     set limitLiftCarryGroceries item 5 one-row 
     ;; **** limitClimbingStairs **** 
     set limitClimbingStairs item 6 one-row 
     ;; **** limitWalkingSeveralBlocks **** 
     set limitWalkingSeveralBlocks item 7 one-row 
     ;; **** physicalFitnessCompared5YrAgo **** 
     set physicalFitnessCompared5YrAgo item 8 one-row 
    ] 
    ] 
end 
2

很高興你想出了一個解決方法!只是給我的兩分錢,我認爲您的解決方案指向可能的問題與你的第一個代碼 - 您

ask patches with [ pxcor = random-pxcor and pycor = random-pycor]

沒有從patches-池也就是說你可以刪除與賦值補丁有一個補丁可以多次選擇,所以每次選擇它的初始值都會被覆蓋。由於在您的turtles解決方案中,您爲每行創建一個新的烏龜,因此不會發生重寫。

如果你需要它是補丁而不是龜,你可以將你的語句改爲只選擇尚未賦值的補丁。例如(假設你的設置沒有預先設置p性別),你可以利用這樣一個事實,即所有聲明的變量默認設置爲0,直到它們在代碼中被更改,並將你的原始代碼改爲類似

... 
foreach patches-data [ 
    [ one-row ] -> 
    ask one-of patches with [ p-gender = 0 ] [ 
... 

在同一通道中,您可以使用one-of而不是手動選擇隨機pxcorpycor - 我認爲這很簡單。

此外,這顯然取決於您,而不是手動遞增malefemale的計數器,您可能只需設置一個to-report過程來監視這些給你。舉例來說,如果你有這樣的代碼:

to-report male-turtle-count 
    report count turtles with [ gender = 1 ] 
end 

,然後你print male-count(或使用該接口上的顯示器),它會告訴你,目前擁有1這是一個性別動態海龜的數量更新,所以你不必跟蹤櫃檯。

相關問題