2016-07-07 2 views
0

거북이에게 내가 순서대로 움직일 수있는 번호를 할당하려고합니다. 이전 게시물을 사용하고 주위에 몇 가지 일반적인 연주를 사용하여 나는 거북이의 순위가 정해진 목록을 만들 수 있었지만 지금은 거북이에 목록의 상대적인 위치에 따라 숫자를 할당하려고합니다.거북이에게 netlogo의 순위 번호 지정하기

예 : 현재 목록 : (거북이 8) (거북이 1) (거북이 9) (거북이 0)] 원하는 거북 명칭 : 거북 8 = 1, 거북 1 = 2, 거북 9 = 3 등

은 지금까지 내가 도달 한 : 목록에서 위 순서에 따라 값을 할당

globals [rank_list] 
turtles-own [var. 
      rank] 
set rank_list sort-on [var.] turtles 

create-turtles (50) 
[setxy (random-float max-pxcor) (random-float max-pycor) 
set var. random-normal 0.5 0.175 
    if var. > 1 [set sociability 0.99999999] 
    if var. < 0 [set sociability 0.00000001] 
foreach rank_list ask ? [set rank ...  ;this is where I get stumped 

to go 
ask turtles [foreach rank [ask ? [move]]] 
end 

어떤 조언은 매우 감사하겠습니다!

답변

0

위의 Nicolas의 답변을 사용하면 목표 또는 순위가 매겨진 운동을 달성했습니다. 그것은 내가 처리하고있는 2000 마리의 거북이에게 여전히 처리 능력이 약간 있지만, 적어도 실행됩니다!

turtles-own [var] 

to ranking 
let rank-list sort-on [var] turtles 
let ranks n-values length rank-list [ ? ] 
    (foreach rank-list ranks [ask ?1 [set var ?2] ]) 
end 

to make_turtles 
    create-turtles (5) 
    [set var random-normal 0.5 0.2 
     set color scale-color blue var 0 1 
     set size 3] 
    ranking 
    ask turtles [set label var] 

    end 

to move 
let rank-list sort-on [var] turtles 
ask turtles [foreach rank-list [ask ? [ forward random 9]]] 
end 

to setup 
    clear-all 
    make_turtles 

end 
to go 
    move 
end 
+0

현재 모든 틱마다 거북이를 재 분류하고 있습니다. 처리 능력을 저장하려면 순위 목록을 전역 변수에 저장하십시오. –

+0

나는이 대답을보기 전에 문자 그대로 약 5 분을했다. 네 말이 맞아, 이제 완벽하게 작동 해 .-) – Jesse001

2

동시에 계급과 모두 rank-list을 통해 루프 foreach의 가변 버전과 계급 생성 n-values를 사용할 수 있습니다

turtles-own [ var rank ] 

to setup 
    clear-all 
    create-turtles 50 [ 
    setxy random-pxcor random-pycor 
    set var random-normal 0.5 0.175 
    ] 
    let rank-list sort-on [ var ] turtles 
    let ranks n-values length rank-list [ ? ] 
    (foreach rank-list ranks [ ask ?1 [ set rank ?2 ] ]) 
end 

을하지만 문제가있다 : 당신이 정말 rank 필요합니까 변하기 쉬운? 왜 rank-list 직접 사용하지 :

foreach rank-lisk [ ask ? [ move ] ] 

또는 var 심지어 그저 당신의 거북이마다 :

foreach (sort-on [ var ] turtles) [ ask ? [ move ] ] 

후자는 가장 효율적인 아니지만, 당신은 50 거북을 가지고이 작업을 수행하는 경우 한 번만 틱마다 한 번씩 차이를 느낄 수 있습니다.

+0

감사합니다. Nicolas. 지금 제안을 반영하고 있습니다. 그러나 마지막 요점은 2000 마리의 거북이가 있어야하며 각 거북이마다 각기 다른 다양한 의사 결정 과정을 거치므로 효율성이 중요합니다. 나는 원래이 일을 할 수있는 방법을 찾을 수 있었지만, 나는 전체 인구와 함께 할 수있는 처리 능력이 없었다. 나는 랭크리스트 제안이 효과가 있다고 생각하고 있지만 일단 코드가 작동하면 업데이트 할 것이다. – Jesse001

+0

저는 아래 코드에서 니콜라스 (Nicolas)의 대답에 기반을 둔 결함을 발견했습니다. 어떤 이유로 든 거북이는 계급에 따라 움직일뿐만 아니라 실제 숫자를 입력하는 대신 입력 상자를 사용할 때 세계에서 거북이와 같은 횟수만큼 움직입니다. 나는이 아이디어로 완전히 곤두박질 쳤다. 어떤 생각? – Jesse001

+0

답변보기 http://stackoverflow.com/q/38337266/487946 –

관련 문제