
人工智能和行为
|
271
9.6
目标选择问题
问题
我们想从多个目标中选择一个目标进行追逐。
解决方案
选择最优目标的一般算法步骤如下:
1.
将
bestScoreSoFar
设置为最恶劣的情况(要么
0
要么无限大,取决于你要搜寻
的目标是什么)。
2.
将
bestTargetSoFar
设为空。
3.
遍历每个可能的目标:
a.
计算每个目标的得分情况。
b.
如果该目标得分大于
bestScoreSoFar
:
i.
将该目标保存到
bestTargetSoFar
。
ii.
将该目标得分保存到
bestScoreSoFar
。
遍历结束,
bestTargetSoFar
保存的要么是搜索得到的最佳目标,要么为空。
上述步骤用代码实现后如下所示。
bestScoreSoFar
变量用
nearestNodeDistance
代
替;用它来保存搜索到的距离最近的目标,初始值为最大可能距离(即无限大)。
然后对所有可能的目标对象进行遍历,每当找到一个距离比它小的目标对象,就把
新目标的距离赋给它:
var nearestNodeDistance = CGFloat.infinity
var nearestNode : Critter? = nil
//
搜索最近的目标
scene?.enumerateChildNodes(withName: "Critter") { (node, stop) -> Void in
if let otherCritter = node as? Critter {
if otherCritter == ...