简体   繁体   中英

How do you make the turtles follow only the green patches that I created from a shapefile Ioaded into netlogo?

This is my code so far. I only want the turtles to follow the green lines, however they just continue forever in the random direction they are facing when I setup the model.

Code:

extensions [gis]
breed [observer]

turtles-own [ vision-distance vision-width steps green-steps gray-steps attr-prob]
patches-own [land nearest-patch]

to setup
  clear-all
  create-turtles 10
  set-default-shape turtles "butterfly"
  ask turtles [set size 25
  if pxcor = min-pxcor [die]]
  reset-ticks
  let view gis:load-dataset "City_Plan_Boundary.shp"
  gis:set-world-envelope gis:envelope-of view
  foreach gis:feature-list-of view
  [
    gis:set-drawing-color green
    gis:draw ? 1.0
  ]

end

to go
  ask turtles [
    count-steps

pen-down
    let green_target turtles
    let perceived_patches patches in-cone vision-distance vision-width
    let patch-under-me patch-here    set green_target perceived_patches with [ (pcolor = green and self != patch-under-me) or (pcolor = black and self != patch-under-me)]
    ifelse  count green_target != 0 [
          let target min-one-of green_target[ distance myself ]
          let target_heading towards target
          move-to patch-at-heading-and-distance target_heading 1 ]
          [ fd 1]

     ]


end

to count-steps
  set steps steps + 1
  ifelse land = green [set green-steps green-steps + 1][set gray-steps gray-steps + 1] ;;Does not currently account for CYAN Park squares
end

First, your foreach loop that applies your GIS layer is only creating lines in the drawing layer of NetLogo, not actually changing the patches themselves. You'll have to assign some component of the shapefile to the patches themselves for turtles to be able to assess them- look at the "GIS General Examples" model in the Models Library.

Second, pathfinding can be accomplished in a variety of ways, and it really depends on what behaviour you're trying to model. For a few examples, check out the "Look Ahead" example in the Models library, or look at the below toy model for a very simplistic approach:

to setup
  ca
  ask patch min-pxcor 0 [
    set pcolor green    
    sprout 1 [ 
      set color red 
      pd
    ]
    spread-right
  ] 
  reset-ticks
end

to spread-right 
  if pxcor < max-pxcor [
    ask one-of neighbors with [ pxcor = [pxcor] of myself + 1] [
      set pcolor green
      spread-right
    ]
  ]
end

to go 
  ask turtles [
    let target one-of neighbors in-cone 1.5 90 with [ pcolor = green ]
    ifelse target != nobody [
      face target
      move-to target
    ] [
      rt one-of [ 45 -45 ]
    ]
  ]
  tick
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM