2017-11-18 16 views
0

나는 초보자입니다. 이미 프로그래밍 가이드 사전을 확인했습니다. 2 차선 도로 (예 : 도로 1, 도로 2) 모델을 고려 중입니다. 또한 지정된 패치 ((10 0) 및 (20 2))에 의해 지정된 거북이가 10 tick 동안 멈추는 모델을 고려하고 있습니다. 그러나 각 도로의 xcor 및 ycor에 대한 특정 매개 변수를 작성하고 지정하는 방법을 알지 못합니다 (예 : 도로 1의 xcor 및 ycor, 도로 2의 xcor 및 ycor). 또한 설정 속도 구문 내에서 매개 변수 "속도"를 작성하고 제어하는 ​​방법을 모르겠습니다. 다음은 샘플 소형 모델입니다. 복잡성을 피하기 위해이 샘플 모델에는 단 하나의 길만 있습니다. 이 샘플 모델은 실패하고 거북은 패치 (10 0)에서 멈추지 않습니다. 아마도 귀하의 조언이 필요합니다. 고맙습니다.Netlogo : 세계의 중간에 특정 패치가있는 특정 틱에 대한 거북이를 멈추는 방법은 무엇입니까?

globals [ count-tick ] 
turtles-own [ speed flag-A ] 

to setup 
    clear-all 
    resize-world 0 50 min-pycor max-pycor 
    ask patches [ setup-road ] 
    reset-ticks 
end 

to setup-road 
    if (pycor < 1) and (pycor > -1) [ set pcolor white ] 
end 

to create-car 
    crt 1 [ 
    set color blue 
    setxy min-pxcor 0 
    set heading 90 
    set speed 1 
    ] 
end 

이것은 모델 본체입니다.

to go 

    if (count turtles-on patch 0 0 = 0) [ 
    create-car 
    ask (turtles-on patch 0 0) [ 
     set flag-A FALSE 
    ] 
    ] 

    ask (turtles-on patch 10 0) [ 
    set flag-A TRUE 
    set count-tick 10 
    ] 

    if count-tick > 0 [ 
    set count-tick count-tick - 1 
    ask (turtles-on patch 10 0) with [flag-A = TRUE] 
    [ 
     set color red 
     set speed 0 
    ] 
    ] 

    if count-tick = 0 [ 
    ask (turtles-on patch 10 0) with [flag-A = TRUE] 
     [ 
     set speed 1 
     set flag-A FALSE 
    ] 
    ] 

    if (count turtles-on patch max-pxcor 0 > 0) [ 
    ask min-one-of turtles [who][ 
     die 
    ] 
    ] 

    set-speed 
    tick 
end 

속도를 제어하는 ​​병렬 업데이트입니다.

to set-speed 
    ask turtles with [ xcor < 10 ] [ 
    let turtle-ahead one-of turtles-on patch-ahead 1 
    ifelse turtle-ahead = nobody 
     [ set speed 1 
     fd speed 
    ] 
    [ set speed 0 
    ] 
    ] 
    ask turtles with [ 10 < max-pxcor ] [ 
    let turtle-ahead one-of turtles-on patch-ahead 1 
    ifelse turtle-ahead = nobody 
     [ set speed 1 
     fd speed 
    ] 
    [ set speed 0 
    ] 
    ] 
end 

답변

3

좋아요, 일반적으로 모델에 한 번에 하나의 요소를 추가하십시오. 그 요소를 테스트하고 모든 요소가 작동하면 다음 요소 만 추가하십시오. 당신의 경우에는 어떤 것도하지 않고도 여러 가지 일을하려고합니다. 자동차를 옮기고, 10 틱 동안 멈추게하고, 길 끝에서 그 중 하나를 죽이고, 속도에 대해 불특정 한 일을합니다. 즉시 통보하지 마라.

여기에도 몇 가지 개념적 문제점이 있습니다. 가장 큰 점은 거북 변수인데, if count-tick...ask turtles 블록 내에 있어야하기 때문에이 변수를 전역 변수로 취급한다는 것입니다. 이런 식으로 생각하면, 10 대를 만든 경우 변수 카운트 틱의 사본이 10 개 있으므로 if 문을 사용하여 확인합니다.

거북이에게 이동을 지시하지 않았지만 표시되지 않은 코드에있을 수도 있습니다. 가능한 한 많은 코드를 유지하면서 이것이 당신이하려는 것입니다. 이렇게하면 왼쪽에 자동차가 생기고 오른쪽으로 이동 한 후 올바른 위치에서 10 틱 동안 멈추고 빨간색으로 변한 다음 다시 이동하여 끝까지 도달하면 다시 살살 킵니다.

globals [ count-tick ] 
turtles-own [ speed flag-A ] 

to setup 
    clear-all 
    resize-world 0 50 min-pycor max-pycor 
    ask patches [ setup-road ] 
    reset-ticks 
end 

to setup-road 
    if (pycor < 1) and (pycor > -1) [ set pcolor white ] 
end 

to create-car 
    crt 1 [ 
    set color blue 
    setxy min-pxcor 0 
    set heading 90 
    set speed 1 
    set flag-A FALSE 
    ] 
end 

to go 

    if (count turtles-on patch 0 0 = 0) [ 
    create-car 
    ] 

    ask (turtles-on patch 10 0) [ 
    set flag-A TRUE 
    set count-tick 10 
    ] 

    ask (turtles-on patch 10 0) with [flag-A = TRUE] [ 
    set color red 
    set speed 0 
    set count-tick count-tick - 1 

    if count-tick = 0 [ 
     set speed 1 
     set flag-A FALSE 
    ] 
    ] 

    if (count turtles-on patch max-pxcor 0 > 0) [ 
    ask min-one-of turtles-on patch max-pxcor 0 [who][ 
     die 
    ] 
    ] 

    ask turtles [ forward speed ] 

    tick 
end 
+0

내 질문에 대한 조언과 샘플 구문에 감사드립니다. 큰 도움이되었습니다. 다시 한번 감사드립니다. – goodgest

+1

한 번에 한 가지만 코딩하는 Jen의 조언에 확실히 동의하십시오. 매우 작은 작업 프로그램으로 시작하여 한 번에 한 가지만 추가하고 계속 진행하기 전에 먼저 작동 시키십시오. –