将代理最终目的地设置为 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?
变量设置为 true
或 false
之后,也许只是行前
;; set fence gis:load-dataset ("highfence_project.shp")
注意ZINAN10的回答确实消除了错误信息,但是放在现在的位置,相当于说
set dest-patch one-of patches with [0 = true]
这当然不是真的。 dest-patch
将是 nobody
。通常,如果变量确实具有 true/false 值,则不应使用 =
运算符,因为它会恰好隐藏您在此处遇到的那种错误。
我正在尝试让代理在名为 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?
变量设置为 true
或 false
之后,也许只是行前
;; set fence gis:load-dataset ("highfence_project.shp")
注意ZINAN10的回答确实消除了错误信息,但是放在现在的位置,相当于说
set dest-patch one-of patches with [0 = true]
这当然不是真的。 dest-patch
将是 nobody
。通常,如果变量确实具有 true/false 值,则不应使用 =
运算符,因为它会恰好隐藏您在此处遇到的那种错误。