听起来此时您只有一个分类问题。您想将一些关于您当前正在行走的知识映射到一组类中的一个。了解地形的类别后,您就可以调用适当的子程序。这个对吗?
如果是这样,那么您可以使用多种分类引擎,包括神经网络、贝叶斯网络、决策树、最近邻等。为了选择最合适的,我们将需要有关您的问题的更多信息。
首先,你有什么样的输入或感官数据来帮助你识别你应该调用的行为类?其次,你能描述一下你将在什么情况下训练这个分类器,以及部署它时运行时的情况,例如对计算资源的限制或对噪声鲁棒性的要求?
编辑:由于您有固定数量的类,并且您有一些用于生成所有可能地形的参数化模型,我会考虑使用k-means clustering。原理如下。您将一大堆地形聚类到 k 个不同的类中,其中每个聚类与您的一个专门的子例程相关联,该子例程对该地形聚类表现最佳。然后当一个新的地形进入时,它可能会落在这些集群之一附近。然后调用相应的专用子例程来导航该地形。
离线执行此操作:生成足够多的随机地形以对参数空间进行充分采样,将这些地形映射到您的感觉空间(但要记住感觉空间中的哪些点对应于哪些地形),然后在这个感觉空间语料库上运行 k-means 聚类,其中 k是您想学习的课程数量。您的类代表 C 和感觉空间中的点 P 之间的距离函数只是让算法 C 导航生成 P 的地形的适应度函数。然后您将把感觉空间划分为 k 个集群,每个集群映射到你拥有的最好的子程序。每个集群在感官空间中都有一个代表点。
现在在运行时:您将在感觉空间中获得一些未标记的点。使用不同的距离函数来找到离这个新输入点最近的代表点。这告诉你地形是什么等级。
请注意,此方法的成功取决于从地形生成的参数空间到感觉空间的映射质量,从感觉空间到您的适应度函数,以及您用来比较感觉空间中的点的最终距离函数。
另请注意,如果您有足够的记忆力,而不是仅使用 k 个代表性感觉点来告诉您未标记的感觉点属于哪个类,您可能会遍历您的训练集并用学习的类标记所有点。然后在运行时选择最近的邻居,并得出结论,感觉空间中未标记的点与该邻居属于同一类。