저는 정말 간단하게하려고하지만, 어떤 이유로 그저 작동시키지 못합니다.NetLogo 거북이 벽을 치지 못하도록 막으십시오.
내 설정 기능은 (-20, 20)에서 (20, 20)까지의 사각형 벽을 만들고 벽 안쪽에 크기가 3 인 원형 거북이를 생성합니다. 사각형 벽은 단순히 푸른 색의 패치로 만들어집니다.
이제 나는 거북이에게 -90도에서 90도까지 어디서나 회전하도록 지시하고, 0.5 단계만큼 앞으로 이동시키는 go 함수가 있습니다. 벽 안으로 들어가는 것은 허용되지 않습니다. 벽에 부딪 칠 때 다른 방향으로 들어가기 만하면됩니다. 거북이 실제로 벽 안으로 들어갈 때까지는 벽을 감지 할 수 없습니다.
다음과 같이 내가 사용하고있는 코드는 다음과 같습니다 나는 위의 코드가 작동하지 않습니다 말할 슬프다
ask turtle 0 [
let invalid true
let turn-degree (random(180) - 90)
rt turn-degree
let next-patch patch-ahead 1 ;; Declare next-patch before moving
while [invalid] [ ;; While invalid condition
ask next-patch [
;; Neighbors of the next patch are counted, because turtle is size 3
if (count neighbors with [pcolor = blue] = 0) [
set invalid false
]
]
if (invalid) [
lt turn-degree ;; Turn the turtle back to the original direction
set turn-degree (random(180) - 90) ;; Randomize turn degree again
set next-patch patch-ahead 1 ;; Declare next-patch before moving again
]
]
;; Finally, jump 0.5 steps ahead in the chosen direction
jump 0.5
]
을, 거북이는 여전히 어떻게 든 파란색 벽 자체를 겹쳐 관리하기 때문에 , 그것은 일어나서는 안된다. 나는 그것이 두 가지 이유 때문이라고 생각합니다 :
1) 0.5 단계가 "패치 전진 (patch-ahead)"조건을 망치고 있습니다. 그러나 나는 patch-ahead 0.5로 아무런 효과를 시도하지 않았다. 2) 무작위 회전 각도로 파란색 벽이 거북이에서 0.5 이상 떨어져 있지만,이 문제에 대한 해결 방법이 없습니다 ...
어떤 제안이 있으십니까?
구현하려는 모델은 무엇입니까? 나는 이와 비슷한 것을 시도하고 있지만, 힘을 가진 연속 모델을 사용한다. –