将代理最终目的地设置为 Netlogo 中的多边形

Set agents final destination to a polygon in Netlogo

我正在尝试让代理在名为 winter 的多边形内开始并在名为 summer 的多边形内结束。我让代理在冬季多边形内成功启动,但我正在努力将最终目的地设置为夏季多边形内的一个补丁。对于 destination-patch 语句,我不断收到此错误:

"WITH expected a true/false value from (patch 1 63), but got 0 instead.
error while observer running ONE-OF
  called by procedure SETUP
  called by Button 'setup'"

这是我的代码:

    extensions [ gis ]
    globals [
      elevation
      vegetation
      roads
      fence
      q
      max-energy
      dest-patch
      winter
      summer

    ]
    patches-own [
      used?
      pelev
      veg
      is-road?
      is-fence?
      veg-suitability
      resource
      elev-suitability
      is-winter?
      is-summer?
    ]

    turtles-own [
      start-patch
      target-patch
      energy

    ]

    to setup
      clear-all

      set max-energy 10
      set dest-patch one-of patches with [is-summer?] ; **this is where I get my error when I try to setup my model.

      set winter gis:load-dataset ("Lowuse_winter.shp")
      ;gis:set-world-envelope gis:envelope-of winter
      ask patches [ set is-winter? false]
      ask patches gis:intersecting winter
      [ set is-winter? true]

      gis:set-drawing-color blue
      gis:draw winter 1

      set summer gis:load-dataset ("Lowuse_summer.shp")
      ;gis:set-world-envelope gis:envelope-of summer

      ask patches [ set is-summer? false]
      ask patches gis:intersecting summer
      [ set is-summer? true]

      gis:set-drawing-color green
      gis:draw summer 1

      ;; set fence gis:load-dataset ("highfence_project.shp")
      ;gis:set-world-envelope gis:envelope-of fence

     ;'ask patches [ set is-fence? false ]
      ;ask patches gis:intersecting fence
      ;[ set is-fence? true ]

      ;gis:set-drawing-color [255   0   0]
      ;gis:draw roads 1
      ;ask patches[
      ;  if is-fence? = true [set pcolor red]
      ;]


      crt 15
      [
        set size 4
        set energy random (deer-gain-from-food)
        set start-patch patch-here
        set color yellow
    ;    set xcor -17
    ;    set ycor -17
        move-to one-of patches with [is-winter?]
        pen-down
      ]
      reset-ticks
    end


to go
  ask turtles [
    if patch-here = dest-patch [stop]
    ifelse energy < deer-gain-from-food / 10 ;; If only 10% of energy
    [
      ifelse [resource] of patch-here > 0 ;; Is there anything to eat
      [; If there is - eat it and restore energy
        forage
      ]
      [ ; If not - mvoe to a neighboring patch with resources
        forage-move
      ]
    ]
    [
      migrate-move
    ]
    set energy energy - 1
  ]

    paint-resource

    tick
end

to forage
  set energy energy + deer-gain-from-food
  ask patch-here [
;    set resource resource - 0.1
    set resource 0
  ]
end

to forage-move
  set target-patch max-one-of neighbors with [ veg-suitability > 0] [ resource ]
  move-to target-patch ; error for "move-to expected input but got nobody instead"
  set used? TRUE
end

我不确定你所说的最终目的地是什么意思,但据我所知,我想你应该在这里判断是真是假。

set dest-patch one-of patches with [is-summer? true/false]

尝试一下,或者弄清楚你的错误所在。

编辑,是的,尝试在那里添加 true 或 false ,现在它是空的。

您收到的消息,"WITH expected a true/false value from (patch 1 63), but got 0 instead." 是由于 is-summer?clear-all 初始化为 0,所以

set dest-patch one-of patches with [is-summer?]

with 运算符提供数字零而不是 true/false 值。这行代码应该放在设置过程的后面, 补丁将它们的 is-summer? 变量设置为 truefalse 之后,也许只是行前

;; set fence gis:load-dataset ("highfence_project.shp")

注意ZINAN10的回答确实消除了错误信息,但是放在现在的位置,相当于说

set dest-patch one-of patches with [0 = true]

这当然不是真的。 dest-patch 将是 nobody。通常,如果变量确实具有 true/false 值,则不应使用 = 运算符,因为它会恰好隐藏您在此处遇到的那种错误。