2014-09-10 3 views
0

Netlogo 환경이 생소하고 무선 통신을위한 모델을 개발하려고합니다. 두 노드 (거북) 사이의 통신을 차단해야하는 한 가지 문제가 생겼습니다. 두 노드 사이에 장애물을 둡니다 (일부 색상 또는 이와 비슷한 패치로), 송신 노드는 장애물을 스캔하고 절차를 끝내기 위해 무언가를보고하십시오. Netlogo 커뮤니티에서 Line of View 모델과 장애물 회피 모델을 살펴 보았지만 나에게 도움이되지 않습니다. 노드는 하나의 패치의 범위가 아니라 다른 노드와의 전체 거리에 대한 장애물을 스캔해야합니다. 이 문제에 적합한 아이디어 나 프리미티브는 나에게 큰 도움이 될 것입니다. 나는거북 사이에 장애물 추가

안부

아마도 가장 효율적인 솔루션이 아니다

답변

0

내 영어 : 그것에 대해 명확하고 죄송 만든 희망하지만, 다음과 같은 품종이 가정 :

breed [ obstacles obstacle ] 
breed [ nodes node ] 

당신은 사용할 수 있습니다 다음 기자 :

to-report can-see? [ target ] 
    let result false 
    hatch 1 [ 
    face target 
    fd 0.1 
    set result ifelse-value (any? turtles-here with [ self = target ]) 
     [ true ] 
     [ ifelse-value (any? obstacles-here) 
     [ false ] 
     [ can-see? target ] 
     ] 
    die 
    ] 
    report result 
end 

hatch 대상의 방향으로 임시 노드의 전체 시리즈를 보내고 방식으로 작동합니다. 도중에 어떤 노드가 장애물을 만나면 false을 반환합니다. 목표에 도달하면 true을 반환합니다. 이러한 임시 노드는 결과가 얻어 질 때까지 재귀 적으로 생성됩니다.

"단계 크기"(이 예에서는 fd 0.1)를 조정할 수 있습니다.이 단계 크기가 클수록 장애물 모서리가 빠져 나올 확률이 높지만 속도는 약간 빠릅니다.

또한 tick based updates instead of continuous updates을 사용하고 있는지 확인해야합니다. 그렇지 않으면 매우 느립니다.

to setup 
    ca 
    ask n-of 100 patches [ 
    sprout-obstacles 1 [ 
     set color red 
     set shape "square" 
    ] 
    ] 
    ask n-of 50 patches with [ not any? obstacles-here ] [ 
    sprout-nodes 1 [ 
     set color yellow 
     set shape "circle" 
     let targets other nodes 
     create-links-with targets with [ can-see? myself ] 
    ] 
    ] 
end 

당신이 장애물로 패치 대신 거북이를 사용하려면

, 당신은 아마 상당히 쉽게 수정할 수 있습니다 여기에

는 서로를 볼 수있는 노드 사이의 링크를 생성하는 예이다.

0

이 질문에 대한 답변을 NetLogo Users 목록에 게시했습니다. 완전을 위해 여기에 다시 게시 :

작동하는 여러 가지 방법이 있습니다.

내 첫 번째 생각은 모델 라이브러리에서 "교차선"예제였습니다. 하나의 장애물을 패치의 선의 X로 간주 할 수 있습니다. 그렇다면 동일한 기술을 사용하여 노드 사이의 선이 장애물의 선들과 교차하는지 여부를 알아낼 수 있습니다.

이것은 장애물에 의해 차단 된 모든 네트워크 회선을 찾는 좋은 방법입니다. 이 방법은 소스 노드와 대상 노드에 의해 정의 된 반경 내에서 장애물을 찾아내는 것으로 꽤 빠르며 개선 될 수 있습니다 (테스트!).

다른 아이디어가 있습니다.

또 다른 방법은 다른 노드를 향해 직선 경로를 "걷기"위해 거북이를 내 보내어 장애물을 발견하는 것입니다. 선을 교차하는 패치의 모서리를 뛰어 넘지 않도록 조심스럽게해야합니다.

다른 방법은 거북이없이 동일한 방법을 사용하고 수학을 사용하여 "다음"패치를 찾아 라인을 따라 이동하는 것입니다.

다른 하나는 매우 작은 각도로 IN-CONE을 사용하여 노드 사이에 좁은 패치 세트를 얻는 것입니다. IN-CONE이 A에서 B로 교차하고 IN-CONE이 B에서 A로 교차하여 집합을 좁힐 수 있습니다. 그런 다음 세트에 장애물이 있는지 검색하거나 세트에 DISTANCE가있는 MIN-ONE OF를 사용하여 "가장 가까운"장애물을 찾으십시오.

또 다른 하나는 기하학/수학을 사용하여 두 노드 사이의 라인에있는 패치 세트를 찾은 다음 장애물을 찾는 것입니다.