NetLogo:为什么事件只发生在离散的时刻?

时间:2015-02-03 04:06:02

标签: netlogo a-star

只是问题,这里我有一个离散的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,并定义运动条件部分。但是,我没有任何线索!有人可以帮帮我吗?非常感谢!!

1 个答案:

答案 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

running interface

但它仍然只在t列表中的刻度上移动,与速度设置无关。所以我在想解决它的方法可能是,

由于计划路径返回到路径列表(pxcor,pycor),我将打印每个人的路径列表并生成新的填充。然后填写t列表中的错过的刻度,读取此文件,重新找到它们并从列表中删除历史位置。如果我将刻度间隔定义得足够小,它可能看起来更平滑。

这不是一个聪明的方法,如果有人有更好的解决方案,请与我们分享!非常感谢!