2014-02-11 3 views
1

동물의 영토를 둘러싼 인접한 패치가 몇 가지 기준 (예 : 음식의 품질 및 다른 동물의 영토가있는 경우)에 따라 평가되고 총 크기에 추가되도록 동물 영토를 확장하려고합니다. 각 시간 단계마다. 다음 게시판을 템플릿 (http://netlogo-users.18673.x6.nabble.com/What-is-more-efficient-to-acquire-patches-by-expanding-search-radius-or-moving-td5003711.html)으로 사용하여 동물들이 각각의 위치 주변에서 이웃을 평가하고 이웃이 다른 사람에 의해 촬영되었는지 (즉, 동물이 영토와 동일하지 않은 것이 진실/거짓인지를 결정할 수 있음) 가장 높은 "품질"을 가진 그리드 셀에 저장됩니다. 대신 동물이 전체 영토를 평가하고 기준에 맞는 모든 그리드 셀로 확장하고 싶습니다. 또한 동물의 정체성을 그 영토 내에있는 패치에 할당하여 동물이 지배적 인 동물의 영토에 들어갈 수 없도록하되 종속 동물이 될 수 있도록하고 싶습니다. 홍수 채우기 아이디어를 활용하려했지만 제대로 할 수 없었습니다. 어떤 제안이나 도움이 좋을 것입니다. 아래는 제가 지금까지 가지고있는 것입니다.NetLogo - 자라는 영토

breed [animals] 

animals-own [ orig territory food status] ; turtle's original patch, patch-set of territory, status (higher number more dominant) of the animal to other competitors (is not incorporated currently) 
patches-own [ taken? hsi] ; true if patch is in territory of a turtle 


to setup 
    clear-all 
    ask patches [ set taken? false 
       set hsi random 5 
       set pcolor scale-color (black) hsi 1 4] 
    let $colors [red pink yellow blue orange brown gray violet sky lime] 
    ask n-of 10 patches 
    [ sprout-animals 1 
    [ set orig patch-here 
     set territory patch-set orig 
     set status random 4 
     set color item who $colors 
     set pcolor color 
    ] 
    set taken? true 
    ] 
    reset-ticks 
end 

to go 
    if all? animals [food >= 150] [ stop ] 
    if ticks = 50 [ stop ] 
    ask animals [ expand ] 
    tick 
end 

to expand 
    if food < 150 
    [ 
    let $p neighbors of [territory] with ([not taken?] and [hsi > 2]) ; expects agentset but territory is a patch-set 
    set territory (patch-set territory $p) 
    set pcolor [pcolor] of myself 
    set food sum [hsi] of territory 
    ] 
end 

답변

1

그것은 당신이 제안으로, 각 패치는 누구의 영토가의 일부 알아야 나에게 합리적인 것 같다. 따라서 patches-own [taken?] 대신 taken?이 true 또는 false 인 경우 patches-own [owner]을 제안합니다.

설정 절차에서 ask patches [ set owner nobody ]을 수행하면 거북이가 패치 소유권을 가져 오면 해당 패치 소유자를 자신에게 설정합니다. 따라서 설치 절차에서 set owner self (패치 소유자를 바꾸기 위해)을 추가하고 expand 절차에 ask $p [ set owner myself ]을 입력하십시오.

당신은 패치에 저장된 owner 정보와 동기화 거북이에 저장된 territory 정보를 유지 조심해야합니다,하지만 당신은 그 권리, 예 : "동물이 들어갈 수없는 등의 문제를 얻을 가정 것이다

let target patch-ahead 1 
let defender [owner] of target 
if not is-turtle? owner or [status] of owner < status [ 
    ... 
] 
+0

감사 세스 : 동물이 패치로 스테핑 고려할 때, 그것은 하찮게 해당 패치의 소유자가 누구인지 알 수 있기 때문에 지배적 인 동물 "의 영역은 다음과 같은 코드로 쉽게 될! 이것은 의미가 있으며 나는 그것을 통합하는 데 아무런 문제가 없었습니다. 나는 동물을 '소유하고 있지 않은'패치로 옮길 수있다. [소유자! = 나 혼자만의] 이웃 중 한 명과'$ p로 이동 '하는 방법을 가지고 고민하지만 '영역 '은 시간 단계마다 모든 빈 이웃으로 확장됩니다. 이제 나는'set owner self set pcolor color set territory (patch-set territory $ p)'라는 동물을 움직이는 대신'let $ p ([owner! = 나 자신] . 오류는 없지만 지역은 확장되지 않습니다. – user2359494

+0

별도의 질문으로 보입니다 –

+0

죄송합니다. 나는 "거북이 패치 세트를 확장/축소하는 방법"이라는 새로운 질문을 게시했습니다. 당신의 도움을 주셔서 감사합니다. – user2359494