Как сделать так, чтобы черепахи следовали только за зелеными пятнами, которые я создал из шейп-файла, загруженного в netlogo? - PullRequest
0 голосов
/ 29 января 2019

Пока это мой код.Я только хочу, чтобы черепахи следовали за зелеными линиями, однако они просто продолжаются вечно в случайном направлении, с которым они сталкиваются, когда я настраиваю модель.

Код:

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

1 Ответ

0 голосов
/ 29 января 2019

Во-первых, ваш цикл foreach, который применяет ваш ГИС-слой, создает линии только в слое рисования в NetLogo, но не изменяет сами патчи.Вам нужно будет назначить некоторый компонент шейп-файла самим патчам, чтобы черепахи могли их оценить - посмотрите на модель «Общие примеры ГИС» в Библиотеке моделей.

Во-вторых, поиск пути может быть выполненразличными способами, и это действительно зависит от того, какое поведение вы пытаетесь смоделировать.Для нескольких примеров, посмотрите пример «Look Ahead» в библиотеке Models, или посмотрите на игрушечную модель ниже для очень упрощенного подхода:

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
...