NetLogo动态曼哈顿距离

时间:2012-12-13 22:26:53

标签: artificial-intelligence netlogo

我正在尝试在我的Net Logo游戏中实现某种形式的AI。

我计划计算从僵尸龟到人类乌龟的曼哈顿距离。

到目前为止,我已经设法计算了两者之间的曼哈顿距离并绘制了路径,并将僵尸代理沿着计算出的路径移向人类龟。

我现在面临的问题是人员代理位置将由用户控制。曼哈顿距离使用while循环,并且在它到达人类代理之前不会突破循环。我希望僵尸代理向人类代理移动一步,然后让人工移动。

到目前为止的代码Net Logo Game

1 个答案:

答案 0 :(得分:0)

我不确定您在plot-manhattan-distance程序中尝试做什么。这似乎是一个复杂的方法,应该相对简单,但也许我误解了你的目的。以下是我将如何处理整个问题:

globals [
  zombie
  human
]

to setup
  clear-all
  ask n-of 2 patches [ sprout 1 ]
  set human turtle 0
  ask human [ set shape "person" ]
  set zombie turtle 1
  ask zombie [ pen-down ]
end

to go
  ask human [ flee zombie ]
  ask zombie [ pursue human ]
end

to pursue [ target ]
  face target
  set heading first sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270]
  fd 1
end

to flee [ pursuer ]
  face pursuer
  rt 180
  fd 0.5
end

肉是pursue程序。由于僵尸无法预测人类的去向,所以它只是试图朝着大方向前进。它首先直接面对人类(使用方便的NetLogo face原语)。但由于它可能只允许在四个主要方向中的一个方向移动,因此它必须选择最理想的方向,即:与其当前(理想)方向最不同的方向。这就是sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270]表达式的作用:它通过比较它们与当前标题的绝对差异来对方向列表进行排序。这个排序列表的第一项将是差异最小的项目,因此是僵尸需要使用的项目。

在当前的实现中,人类只是试图远离僵尸,但你可以轻松地用玩家控制代码替换它。