2014-01-28 2 views
2

제 이동 기능에는 사실 일 수있는 몇 가지 조건이 있습니다. 하나 이상의 조건이 참이라면 에이전트는 하나 이상의 작업을 수행 할 수 있습니까? 또는 다른 경우에 나는 대리인이 표적으로 이동해야하는 기능을 가지고 있고 표적 대리인이 목표물에 도달 할 때까지 거리와 fd 1을 찾아야 만한다. 완료하려면 n 틱이 필요하다는 의미인가?NetLogo에서 에이전트 작업이 어떻게 수행됩니까?

to move [t] 
face t 
let n distance self t 
repeat n 
    [fd 1] 
end 


to go 
action 1 = > [move] 
action 2 
action 3 

tick 
end 

은 내가 한 번에 하나의 작업을 수행 할 에이전트를해야하고, 내가 예를 들어 모든 에이전트가 같은 목표를 가지고 있는지 확인하는 방법을 잘 모르겠습니다! 죄송합니다. 이러한 질문이 문맥에서 벗어나지 만 다중 에이전트 모델링을 처음 접한다면.

답변

2

위대한 질문입니다.

첫째, 구체적인 답변 : 하나 개의 조건보다는 이상에 해당하면

이 한 행동보다 더 많은 일을 할 수있는 하나 명의 틱 에이전트에 의미 하는가?

이 상황에 대해 이야기하고 있습니까? 그렇다면 xcor > 5, ycor > 7color = red 모두에 해당하는 경우

to go 
    ask turtles [ move ] 
    tick 
end 

to move 
    if xcor > 5 [ fd 1 ] 
    if ycor > 7 [ rt 15 ] 
    if color = red [ bk 2 ] 
end 

, 다음 네, 거북이는 바로 15 차례, 앞으로 1을 이동하고, 2 뒤로이를 방지 할 수있는 주요 방법을 이동하는 것은을 사용하는 것입니다 ifelse S 시퀀스는 :

to move 
    ifelse xcor > 5 [ 
    fd 1 
    ] [ 
    ifelse ycor > 7 [ 
     rt 15 
    ] [ 
     if color = red [ bk 2 ] 
    ] 
    ] 
end 

이렇게, 두 번째 조건 (ycor > 7)의 첫 번째 조건 (xcor > 5)이 거짓 인 경우에보고한다. 마찬가지로 세 번째 조건은 첫 번째 두 조건이 실패한 경우에만 보입니다.

나는 에이전트가 거리를 찾을 수 있어야 목표로하고 대상 에이전트에 직면 한 후 이동해야하고 목표에 도달 할 때까지 1 전략 중, 그것이 걸릴 N 완료 틱한다는 의미 않는 기능이?

완료하려면 n 진드기를 사용하는 것이 좋습니다. 그렇지 않으면 한 번에 하나의 거북이 만 대상으로 이동합니다! 그러나 repeat n [ fd 1 ]은 거북이를 앞으로 모두 n으로 만들 것입니다. 사실 fd n과 같습니다. repeat 블록은 거북이 완료되기 전에 move 절차를 수행하면서 완료됩니다. 그런 다음

to move [t] 
face t 
fd 1 
end 

단지 (예를 들어, distance t < 1)와 거북이가 목표에 도달 할 때 찾을 수있는 조건을 가지고 n 틱을 그것을 얻기 위해 다음과 같이

당신은 당신의 move 기능을 편집 할 수 있습니다 그에 따라 뭔가를하십시오.

여러 가지 거북이를 사용하여 이러한 다양한 기법을 사용하여 차이점을 느낄 수 있도록 권장합니다.

예를 들어 모든 에이전트가 동일한 대상이 아닌지 확인하는 방법을 잘 모르겠습니다!

이것은 상황에 따라 약간 다릅니다. 각 거북이의 목표를 저장 target라는 turtles-own 변수가 가정하면, 당신이 뭔가를 할 수 있습니다 :

to-report get-available-target [ possible-targets ] 
    report one-of possible-targets with [ not any? turtles with [ target = myself ] ] 
end 

get-available-target 누구의 대상 아니다 possible-targets에서 임의의 에이전트를보고합니다. one-of은 에이전트 세트에서 임의의 에이전트를 가져옵니다.

netlogo에서 작업을 예약하려면 어떻게해야합니까? 조건과 동작이 있지만 어떻게 에이전트를 한 번에 하나의 작업으로 만들 수 있습니까?

종종 이것은 단지 처리됩니다. 예를 들어, 상담원이 배가 고프다면 식량 공급소로 걸어 가서 먹어야한다. 걷는 동안, 당신은 그것이 벗어나서 무엇이든하는 것을 원하지 않습니다. 그러나 여전히 배가 고파우므로 ifelse을 사용했다면 식량 공급을 계속할 것입니다. 따라서 상담원은 무료로 집중됩니다! 일반적으로 상담원이 해결할 때까지 유효한 상태로 설계하는 것이 가장 좋습니다. ifelse 연쇄물이나 비슷한 행동으로 일반적인 주문 우선 순위를 정할 수 있습니다 (예 : 식량 공급원에게 걸어 다니는 요원이 육식 동물에게 위협을 받으면 도망 가야 함).

실제로 에이전트가 여러 틱에 대해 작업을 수행하려는 경우 기본적으로이 아이디어를 확장 할뿐 아니라보다 인공적인 방식으로 확장합니다. 예를 들어 상담원이 앞으로 3 번 앞으로 이동해야하는 경우 turtles-own 변수를 3으로 설정합니다. 해당 변수가 0보다 큰 경우 에이전트는 앞으로 이동하여 해당 변수를 줄이고 다른 작업은 수행하지 않습니다.

+0

덕분에 ALOT, 정말 감사합니다 조건이 충족되고 작업이 선택된 경우, 내 이동 기능에 N을 포함하는 이유가 있는지 확인하는 것입니다 데 도움이, 나는 에이전트에 작업을 완료 있는지 확인하려면 다른 하나를 시작하기 전에 손을 잡아야하지만 한꺼번에 몇 가지 틱을 받아야합니다. netlogo에서 작업을 예약하려면 어떻게해야합니까? 조건과 동작이 있지만 어떻게 에이전트를 한 번에 할 수 있습니까? –

+1

괜찮습니다! 도와 줄 수있어서 기뻐. 나는 내 게시물을 편집하여 후속 질문에 답변했습니다. –

2

@Bryan Head가 이미 귀하의 질문에 답변했으며, Netlogo 및 에이전트 기반 모델링을 시작했을 때 동일한 문제가 발생했습니다. 따라서 현재 작업 변수를 추가했으며 Go 프로 시저에서 모든 조건을 검사하는 기능을 추가했습니다 에이전트의 작업을 설정하고 작업이 완료되면 변수가 다시 ""로 설정됩니다. 이것은 귀하의 경우에도 유용 할 수 있습니다.

if current-task = "move" [move] 
if current-task = "A1" [A1] 
if current-task = "..." [...] 
if current-task = "" [select-current-task] 
+1

이 코딩 스타일의 전체 예제는 State Machine Example, NetLogo 모델 라이브러리의 코드 예제 섹션에 있습니다. –

+0

감사합니다. 저는 그 모델을 보았습니다. 구조는 깔끔하고 효율적입니다. – Marzy

관련 문제