2017-09-04 10 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

환영합니다 스택 오버플로. 여기에 게시 할 때 일반적으로 코드를 문제를 설명하는 데 필요한 최소 수준으로 제한하여 더 나은 서비스를 제공 할 수 있습니다 (MCVE 지침 here 참조). 예를 들어 to-report, prey 품종 등을 제거하면 해결하려는 부분을 매우 분명하게 알 수 있습니다.

전체 목표 중 일부가 확실하지 않아 코드가 정확히 따르지 않습니다. 대신 내가 한 일을 성취하기위한 한 가지 방법을 보여줄 수있는 대안을 제시합니다. 이 예에서는 여성의 경우 중첩 할 수있는 영역의 예와이 예에서는 남성의 경우 중첩 할 수없는 영역의 예를 보여 드리겠습니다. 이러한 변수 및 설정 사용 : 패치가 남성 확인할 수 있도록 시작하는 거짓에 수형 세트 그것에 의해 주장 된 경우가 자국의 영역을 설정으로 설정에서

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 부울 나타냅니다 , 패치가 이미 주장되었는지 여부. 호랑이는 남성이 다른 남성에게서 영토를 선택하지 않을 경우를 제외하고는, 당신이 한 것과 비슷한 영토를 설정합니다. 암컷은 "어머니"의 영토를 공유 할 더 많은 암컷을 hatch 자신의 영토를 설정합니다.

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

당신이 거북이가 남아 있는지 확인하려면 다음

은 그냥 그들은 단지 여기에 자신의 영토 patches- 중 하나에 이동할 수 있도록 그렇게하는 한 가지 방법을 거북을 제한, 그들의 영토 내에서 이동하려면 영토 내에서 다음과 같이 실행하십시오.

+0

고맙습니다. 그것은 지금까지 많은 도움이되었습니다. 하지만 이제는 femaletigers가 "하나의 단위"로 자신의 영역에서 이동합니다. 그들의 영토에서 무작위로 이동해야합니다. –

+0

귀하의 모델 또는 본보기에서 의미합니까? 나의 예에서 'femaletigers'는 나를 위해 독립적으로 움직인다. –

+0

그건 내가 고칠 수 있었던 내 모델의 실수 였어. 감사. –

0

다시 한번 감사드립니다. 호랑이가 번식하고 아이들이 새로운 영토를 만들고 영토가 중복되어서는 안되는 이유는 무엇입니까?

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