2014-05-16 2 views
1

NetLogo에서 여러 그룹의 에이전트를 만들려고합니다. 각 그룹이 중복되지 않고 특정 영역에 위치하기를 바랍니다. 제가 생각할 수있는 것처럼,이를 달성하는 가장 쉬운 방법은 세상을 여러 부분으로 나누는 것입니다. 각 부분은 여러 개의 패치로 구성되어 있으며 (100 + 무작위 10), 고유 한 색상으로 채색되어 있습니다. 그런 다음 새로 만든 거북이에게 다른 색상의 패치로 이동하도록 요청하십시오. 아무에게도이 방법을 알려주거나 제안을 해주실 수 있습니까? 미리 감사드립니다.NetLogo를 여러 개의 임의의 부분으로 나눕니다.

+0

부품의 크기와 모양은 어떻게됩니까? 그들은 각각 (경계를 만지기) 바로 옆에 오거나 완전히 분리되어야합니까? –

+0

크기는 디자이너가 설정해야합니다. 하지만 정확한 숫자 일 필요는 없습니다. 범위 또는 임의의 숫자 (예 : 100 + 임의의 숫자 10) 일 수 있습니다. 당신은 세계에서 임의로 패치를 선택합니다 (물론 그들은 서로 인접해야합니다). 따라서 모양은 크기로 정의됩니다. 부품은 국경을 접촉해야하며 모든 부품이 세계를 완전히 차지해야합니다. –

답변

1

하나의 전략은 다른 영역을 성장시키는 것입니다. 예를 들면 다음과 같습니다.

to grow-regions [ num-regions ] 
    let region-num 0 
    ask n-of num-regions patches [ 
    set pcolor item region-num base-colors 
    set region-num region-num + 1 
    ] 
    while [ any? patches with [ pcolor = black ] ] [ 
    ask patches with [ pcolor != black ] [ 
     ask neighbors with [ pcolor = black ] [ set pcolor [ pcolor ] of myself ] 
    ] 
    ] 
end 

최대 14 개의 다른 영역을 그릴 수 있습니다 (기본 색의 수이기 때문에). 그래서 같은 지역에서

이 결과 :

Regions

편집 : 귀하의 코멘트를 오독. 분명히이 방법으로 영역의 크기를 제어 할 수는 없지만 평균 크기는 입니다.

+0

고마워요. 이것은 내가 원하는 거의 것입니다. 나는 이것을 바탕으로 개선 할 수 있습니다. 나는 지역의 크기를 어떻게 설정했는지 잘 모르겠습니다. 정확히 내 질문은 각 지역에서 while 루프를 실행하는 순서입니다. 각각의 루프는 한 번씩 (각 실행마다 무작위 순서로) 루프를 실행하는 것처럼 보이며, 모두 완료되면 각 루프가 다시 루프를 실행합니다. –

+0

속도가 낮고 연속적으로 설정된 업데이트로 코드를 실행 해 봅니다. . 각 패치의 색상이 어떻게 달라지는 지 확인할 수 있습니다. 'while' 라인 바로 뒤에'print' 문을 써서 각 반복이 언제 시작되는지 볼 수 있습니다. –

관련 문제