2014-11-14 3 views
3

Netlogo를 사용하여 에이전트 기반 모델을 만드는 것부터 시작합니다. 도시의 네트워크 맵 (line-shapefile)과 도시의 스쿠터 포인트 파일 (shapefile)을 사용하고 싶습니다. 아이디어는 도시를 통해 네트워크 shapefile의 줄을 따라 운전하도록하는 것입니다. Netlogo를 처음 접한 이래로 나는이 모델 파일을이 모델에로드하기 만했습니다. 누군가 내가 스쿠터 등록 (포인트)에서 거북을 만들고 그들을 네트워크 라인을 통해 움직일 수있게 도와줌으로써 선두 주자가 될 수 있습니까? 지금까지 인터넷에서 거의 도움이되지 않았으므로 시행 착오와 함께 작동하지 않습니다.Netlogo의 shapefile에서 움직이는 거북을 만드는 방법

extensions [ gis ] 

to load 
    ca 
    let network gis:load-dataset "Roads_Asmterdam.shp" 

    foreach gis:feature-list-of network 
    [ gis:set-drawing-color white 
    gis:draw ? 0.3 

    ] 

    let people gis:load-dataset "scooters_Amsterdam.shp" 
    foreach gis:feature-list-of people 
    [ gis:set-drawing-color blue 
    gis:draw people 3 

    ] 

end 

그래서, 지금까지 내가 아는 한, 내가 거북이를 이동하려는 기능을 가기 위해 필요 : 지금까지, 내 ​​코드는 바로 이것이다. 그리고 포인트 쉐이프 파일에서 움직이는 거북이를 만들 수있는 함수가 필요하지만, 전체 영역 대신 줄만 사용하도록 알려줄 필요가 있습니다.

미리 감사드립니다.

답변

2

라인 모양 파일을로드 한 후이 파일을 에이전트/거북이 네트워크로 변환하고 링크해야합니다. NetLogo는 그렇게하지 않습니다. 모든 기능과 선분을 반복하고 좌표를 조정해야합니다. 그런 다음 라인 네트워크의 좌표계에 스쿠터를 놓아야합니다. 그러면 스쿠터를 이동하도록 "요청"할 수 있습니다.

extensions [ gis ] 
globals [ roads-dataset scooter-dataset ] 
breed [ nodes node ] 
breed [ scooters scooter ] 
breed [ walkers walker ] 
walkers-own [ wlocation ] 
scooters-own [slocation] 

to setup 
    ; reset 
    clear-all 
    reset-ticks 

    ; load data set 
    gis:load-coordinate-system (word "C:/Program Files/NetLogo 5.3.1/app/models/Code Examples/GIS/data/WGS_84_Geographic.prj") 
    set roads-dataset gis:load-dataset "C:/shape/roads.shp" 
    set scooter-dataset gis:load-dataset "C:/shape/scooter.shp" 
    gis:set-world-envelope (gis:envelope-of roads-dataset) 

    ; draw data set 
    gis:set-drawing-color blue 
    gis:draw roads-dataset 1 

    make-road-network 
end 

to make-road-network 
    clear-links 
    let first-node nobody 
    let previous-node nobody 
    foreach gis:feature-list-of roads-dataset [ ; each polyline 
    foreach gis:vertex-lists-of ? [ ; each polyline segment/coordinate pair 
     foreach ? [ ; each coordinate 
     let location gis:location-of ? 
     if not empty? location [ ; some coordinates are empty [] 
      create-nodes 1 [ 
      set color green 
      set size 1 
      set xcor item 0 location 
      set ycor item 1 location 
      set hidden? true 
      if first-node = nobody [ 
       set first-node self 
      ] 
      if previous-node != nobody [ 
       create-link-with previous-node 
      ] 
      set previous-node self 
      ] 
     ] 
     ] 
     set previous-node nobody 
    ] 
    ] 
    ; connect adjacent polylines/roads 
    ask nodes [ create-links-with other nodes in-radius 0.001 ] 
end 

to add-agents 
    create-walkers 5 [ 
    set color red 
    set wlocation one-of nodes 
    move-to wlocation 
    ] 
end 

to add-scooters 
    foreach gis:feature-list-of scooter-dataset [ 
    foreach gis:vertex-lists-of ? [ 
     let location gis:location-of (first ?) 

     create-scooters 1 [ 
     set color yellow 
     set size 1 
     set xcor item 0 location 
     set ycor item 1 location 

     let nearest-node min-one-of (nodes in-radius 10)[distance myself] 
     set slocation nearest-node 
     move-to slocation 
     ] 
    ] 
    ] 
end 

to go 
    ask walkers [ 
    let new-location one-of [link-neighbors] of wlocation 
    move-to new-location 
    set wlocation new-location 
    ] 
    ask scooters [ 
    let new-location one-of [link-neighbors] of slocation 
    move-to new-location 
    set slocation new-location 
    ] 
end 

일부 자원과 예제 코드 나는 특히 도움이 발견 :

관련 문제