如何找到与满足特定条件的海龟的平均距离?

时间:2019-03-31 18:50:35

标签: netlogo agent-based-modeling

我想将当前乌龟移到更靠近满足特定条件的另一只乌龟的位置(例如,颜色=绿色)。

我正在努力地做这件事(因为我不知道更好),方法是尝试计算当前乌龟与其他所有满足条件的乌龟的平均距离,并从x + 1计算平均值, x-1,y + 1,y-1。然后,以最小者为准将指示移动方向。我知道这不是很优雅,并且只能将运动限制为水平和垂直,但是我无法提出更好的建议(令我震惊的唯一想法是计算所有满足条件并移动的海龟的平均x和y坐标当前的乌龟,但这对我来说似乎更荒谬)

问题是,即使我笨拙的解决方案,我也无所适从,因为我在努力计算与“绿色”海龟的平均距离。

1 个答案:

答案 0 :(得分:1)

如果要计算平均距离,则可以进行龟问mean[distance myself]

使用此设置:

to setup
  ca 
  crt 10 [
    set color green
    move-to one-of patches with [ pxcor < 0 ]
  ]
  crt 1 [
    set color red
    move-to one-of patches with [ pxcor > 10 ]
  ]
  reset-ticks
end

调用下面的函数将首先打印出红色乌龟与所有绿色乌龟之间的所有距离,然后打印出这些距离的平均值。

to calc-mean-distance
  ask turtles with [ color = red ] [
    print [ distance myself ] of turtles with [ color = green ]
    print mean [ distance myself ] of turtles with [ color = green ]
  ]
end

除此之外,我不确定100%是否正在尝试做-您是否希望将要问的乌龟移到满足某些条件的最近的乌龟上?如果是这样,这可能对您有用:

to go 
  ask turtles with [ color = red ] [
    let target min-one-of ( turtles with [ color = green ] ) [ distance myself ] 
    face target
    ifelse distance target > 1 [
      fd 1
    ] [
      move-to target
    ]
  ]
  tick
end

如果您想让龟龟向满足条件的那只龟的地理中心移动,您确实可以得到您所描述的那些龟的平均x和y坐标,然后让龟龟朝该点移动:

to go
  let central-x mean [ xcor ] of turtles with [ color = green ]
  let central-y mean [ ycor ] of turtles with [ color = green ]
  ask turtles with [ color = red ] [
    facexy central-x central-y
    ifelse distancexy central-x central-y > 1 [
      fd 1 
    ] [
      setxy central-x central-y
    ]
  ]
  tick
end

如果这些不是您要达到的目标,请随时发表评论以澄清问题!