2017-09-04 87 views
1

我對Netlogo非常陌生,這是我在論壇中的第一篇文章。 我需要創建在棲息地或領土上移動的動物代理組。領土可以重疊。更確切地說,我需要在不同地區活動的男性特務和在其他地區活動的幾組女性特務。如何在netlogo中爲幾組代理創建區域?

這是我到目前爲止所做的。我爲一組女性和一組男性創造了一個領土。那不完全是我需要的。

globals [fragments] 
breed [preys prey] 
breed [femaletigers femaletiger] 
breed [kids kid] 
breed [maletigers maletiger] 

turtles-own 
[ 
    energy 
    age 
    gender 
    territory 
] 

to setup 
    clear-all 
    setup-fragments 
    ;setup-habitats 
    setup-turtles 
    reset-ticks 
end 

to setup-fragments 

    ask patches[set pcolor 67] 
    repeat 50 
    [ 
    ask one-of patches 
    [ 
     set pcolor brown 
     repeat 30 
     [ 
     let a random 360 
     let b random 5 
     ask patch-at-heading-and-distance a b 
     [ 
      ask neighbors [ set pcolor brown] 
      set pcolor brown 
     ] 
     ] 
    ] 
    ] 
end 

to setup-turtles 

    set-default-shape femaletigers "default" ; default shape (dreieck) 
    create-femaletigers 10 
    [ 

    set color red 
    set size 1.5 
    set energy 100 
    set age random 20 
    set gender "female" 
    set territory patches-in-territory patch 10 6 15 
    move-to one-of territory with [pcolor = 67 ] ; tigers start in territory but not on fragmented areas 
    ] 

    set-default-shape maletigers "default" ; default shape (dreieck) 
    create-maletigers 10 
    [ 
    set color blue 
    set size 1.5 
    set energy random 100 
    set age random 20 
    set gender "male" 
    set territory patches-in-territory patch 40 15 10 
    move-to one-of territory with [pcolor = 67 ] ; tigers start in territory but not on fragmented areas 

    ] 


    set-default-shape preys "circle" 
    create-preys 100 
    [ 
    move-to one-of patches with [pcolor = 67] ;preys don't start in fragmented areas 
    set color 114 
    set size 0.75 
    ] 
end 

to-report patches-in-territory [Center rd] 
    let ptr [] 
    ask Center [set ptr patches in-radius 20] 
    report ptr 
end 

我很感激任何幫助。 Maria

回答

2

歡迎來到Stack Overflow。在此處發佈時,通常將您的代碼限制在證明您的問題所需的最低限度內(參見MCVE指南here);例如,你可以刪除你的to-reportprey品種,只是爲了使你很明顯想要解決什麼。

我沒有完全遵循你的代碼,因爲我不確定你的總體目標 - 相反,我給出了另一個例子,希望能夠說明一種方法來實現你的目標。在本例中,我將舉例說明在這個例子中女性可以重疊的區域,以及在這個例子中男性不能重疊的區域。使用這些變量和設置:

breed [ femaletigers femaletiger ] 
breed [ maletigers maletiger ] 

turtles-own [ territory ] 
patches-own [ maleclaimed? ] 

to setup 
    ca 
    ask patches [ 
    set maleclaimed? false 
    ] 

    create-maletigers 3 [ 
    set shape "triangle" 
    set size 1.5 
    move-to one-of patches with [ maleclaimed? = false ] 
    pd 
    set territory patches in-radius 5 with [ maleclaimed? = false ] 
    ask territory [ 
     set maleclaimed? true 
    ] 
    ] 

    create-femaletigers 3 [ 
    set shape "square" 
    setxy random-xcor random-ycor 
    pd 
    set territory patches in-radius 3 
    hatch 1 + random 3 [ 
     rt random 360 
     fd 1 
    ] 
    ] 

    reset-ticks 
end 

在設置中,patches-own布爾表示,如果補丁已經成爲一個以男性設置爲false聲稱開始讓男性可以檢查的,因爲它建立在其領土,補丁是否已被聲明。然後,老虎們將自己的領土與您的做法相似,只有男性不會選擇其他男性的領土。女性建立他們的領土,然後hatch更多的女性將分享「母親」的領土。

在其領土內動,只是限制龜,使得他們只能搬到這裏其領土patches-的一個是做的一個方法:

to go 
    ask turtles [ 
    let target one-of territory in-radius 1.5 
    if target != nobody [ 
     face target 
     fd 1 
    ] 
    ] 
    tick 
end 

如果你想確認海龜留在一個領土內運行類似於:

to territory-check 

    ask turtles [ 
    let col color + 2 + random 3 
    ask territory [ 
     set pcolor col 
    ] 
    ]  

end 
+0

非常感謝。迄今爲止,這幫助很大。 但是現在女性用戶在他們的領土上移動爲「一個單位」。我需要他們在他們的領土上隨意移動。 –

+0

你的意思是你的模型還是我的例子?在我的例子中,'femaletigers'爲我獨立移動。 –

+0

好的,這是我的模型中的一個錯誤,我可以修復它。謝謝。 –

0

再次感謝。什麼時候老虎複製,我希望他們的孩子創造一個新territoy和領土不應該重疊?

to move-male 

    ask maletigers [ 
    let target1 one-of territory in-radius 2 
    if target1 != nobody [ 
    face target1 
    fd 1]] 

end 

to reproduce-tiger 

    if age >= 48 and any? maletigers-on patch-here and pcolor = 67 [ 
    hatch random 1 + random (5 - 1) [ 
    set gender one-of [ "male" "female" ] 
    set breed kids 
    fd random-float 2 ]] 

end 

to search-territory-male 

ask maletigers with [ territory = nobody ] [ 
    if maleclaimed? = false [ 
    set territory patches in-radius 18 with [ maleclaimed? = false ] 
    ask territory [ set maleclaimed? true ]]] 

end