只是问题,这里我有一个离散的t列表对应每个代理人的坐标x-list和y-list。
if ticks = first t-list
生成新人并找到他们,只有在人员ID不在现有人员ID列表中时才会创建新人。
if ticks > first t-list
移动到下一个位置,同时检查下一个位置是否与当前位置不同,代码类似于
to go
ask persons [
ifelse ( not empty? t-list )[
if ( ticks = first t-list )[
new-locate-persons
]
if ( ticks > first t-list ) [
move-to-nextlocations
]
]
[ stop ]
]
tick
end
对于移动到下一个位置,我要求人移动跟随由GitHub中的a-star-nlogo扩展生成的移动路径链接是 a-star-nlogo extension by holtri
用法是
a-star-nlogo:a-star-search<Turtle><TurtleSet> - return:PatchList
a-star-nlogo:a-star-search<Turtle><TurtleSet><TurtleSet> - return:PatchList
我使用上面的方法来生成移动路径并让代理移动到移动路径
to move-to-nextlocations
set dex item 1 x-list - item 0 x-list
set dey item 1 x-list - item 0 x-list
if ( length x-list > 2 and dex != 0 and dey != 0) [
ask patch-at ( item 1 x-list ) ( item 1 y-list) [
sprout-nextlocations 1
[set color black ]]]
ask persons [
let targets nextlocations
let blocks neighbors4 with [ ( obstacle != 0 )]
set move-path a-star-nlogo:a-star-search-with-multiple-turtle-avoidance self targets blocks
ifelse ( not any? other turtles-on first move-path ) [
move-to first move-path
set move-path but-first move-path
][
set move-path but-first move-path
move-to last move-path
]
]
end
问题是,我发现这个动作只发生在离散的刻度上,例如t-list就像[6 12 18 24],新的代理人在6号时生成,他们不会在刻度线上移动在7,8,9,10,11,无论路径规划问题如何,人们都会突然在12,18,24的位置突然移动。我认为一些问题发生在go,并定义运动条件部分。但是,我没有任何线索!有人可以帮帮我吗?非常感谢!!
答案 0 :(得分:0)
正如我在评论中所说,我修改了移动到下一个位置的部分,它现在看起来像:
to generate-nextlocation
ask patch-at ( item 1 x-list ) ( item 1 y-list) [ sprout-nextlocations 1 [set color black ]]
end
to move-to-nextlocation
let targets nextlocations
set move-path a-star-nlogo:a-star-search-with-multiple-turtle-avoidance self targets walls
if ( empty? move-path )[
show "no way out"]
while [ not empty? move-path ][
let next-step first move-path
set move-path but-first move-path
move-to next-step
pd
]
end
但它仍然只在t列表中的刻度上移动,与速度设置无关。所以我在想解决它的方法可能是,
由于计划路径返回到路径列表(pxcor,pycor),我将打印每个人的路径列表并生成新的填充。然后填写t列表中的错过的刻度,读取此文件,重新找到它们并从列表中删除历史位置。如果我将刻度间隔定义得足够小,它可能看起来更平滑。
这不是一个聪明的方法,如果有人有更好的解决方案,请与我们分享!非常感谢!