人工智能行为决策

4
我正在运行一个物理模拟,并对一个虚拟骨架应用一组移动指令。我有多组针对骨架的指令,包括对腿、胳膊、躯干等施加力的方式,以及对它们各自骨骼施加力的持续时间。每个指令集(行为)都是通过测试其执行所需行为的有效性来开发的,然后使用其他类似行为的遗传算法修改该行为,并再次进行测试。骨架将在其设置列表中具有一系列行为。
我有适应度函数,用于测试稳定性、速度、熵最小化和关节上的力量。问题是,任何给定的行为只适用于特定的上下文环境。一个行为适用于平地,另一个行为适用于右脚前方有隆起的情况,另一个适用于左脚前方有隆起的情况,依此类推。因此,每种行为的适应度都基于上下文而异。仅根据先前的适应度水平选择行为是不可行的,因为该适应度得分不适用于此上下文环境。
我的问题是,如何编程使骨架选择最适合上下文的行为?例如,在随机崎岖的地形上选择最佳行走行为。

问题在于决定地形是什么,还是在于一旦获得信息后如何处理这些信息? - JustJeff
问题在于一旦你获得了这些信息,该如何处理它。 - DrSammyD
我的骨架可以全知模拟内范围(20米球形范围)内发生的一切。它知道那个范围内的所有物体。我需要根据这个信息挑选出正确的身体部位来移动,以便它步行时不会摔倒。 - DrSammyD
我已经调整了您问题的标签,以更好地反映其内容并帮助吸引适当的受众。 - Joel Hoff
5个回答

2
在我之前回答这个问题的不同的答案中,我认为你对于你的模型具有的“地形”信息非常粗略和粗粒度,例如“平坦”,“崎岖”,“多石”等,可能只在网格水平上。然而,如果世界模型实际上非常详细,例如来自3D激光测距仪的仿真版本,那么来自机器人学的算法和计算路径/运动规划方法可能比机器学习分类器系统更加有用。 路径/运动规划方法 有很多路径和运动规划方法,包括一些可能更适合行走/运动的方法,但是一些值得提及的通用方法包括:
  • 可见性图
  • 势场
  • 基于采样的方法
通用的解决方案方法是使用路径规划方法确定骨架应该遵循的步行轨迹以避开障碍物,然后使用基于GA的控制器来实现适当的运动。这在机器人学中非常核心:感知世界并确定实现一些目标所需的行动和电机控制。
另外,快速搜索文献发现以下论文和一本书可以作为思路和进一步调查的起点。关于足型机器人运动规划的论文可能特别有用,因为它讨论了几种运动规划策略。 阅读建议 Steven Michael LaValle (2006). Planning Algorithms, Cambridge University Press.
Kris Hauser, Timothy Bretl, Jean-Claude Latombe, Kensuke Harada, Brian Wilcox (2008). "Motion Planning for Legged Robots on Varied Terrain", The International Journal of Robotics Research, Vol. 27, No. 11-12, 1325-1349, DOI: 10.1177/0278364908098447

Guilherme N. DeSouza和Avinash C. Kak(2002年)。“移动机器人导航视觉:一项调查”,《IEEE模式分析与机器智能交易》,第24卷,第2期,2月,第237-267页。


第一次阅读建议可获得加1分。LaValle对于任何与规划相关的实际工作都是一个很好的参考,尽管它并没有明确考虑闭合运动链的稳健规划。 - Andrew Walker

1

为什么不在随机崎岖的地形上测试行为呢?只需设置GA的参数,使其有点宽容,不会因一两次失败而谴责某种行为。

你有两个问题:

  1. 没有感觉的双足运动非常困难。我见过良好的机器人在粗糙的地形上运动,但从未只用两条腿。因此,你可能找到的最好解决方案可能并不是很好。
  2. 运行GA既是艺术也是科学。你可以调整很多旋钮,很难找到允许新颖性增长而不被噪声淹没的参数。

从简单的开始(例如爬行)将有助于解决这两个问题。

编辑:
等等……你是在同一组随机地形上反复训练它吗?那么你遇到麻烦也就不足为奇了!它正在优化那个特定的岩石和凸起布局,这比泛化要容易得多。根据你的遗传算法运作方式,你可能会从将课程设计得更长中获得一些好处,但更好的解决方案是每次都随机生成地形。当它不能再利用地形的特定特征时,它将具有演化引导下的泛化能力。由于这是一个更困难的问题,所以它学习起来不会像以前那样快,而且它可能无法用其当前参数表现出非常好的表现;请准备好进行调整。


我可以让算法遍历崎岖的地形,但我正在尝试让相同的行为适用于另一个随机生成的崎岖地形。 - DrSammyD

1

我的回答涉及三个方面:(1)控制理论,(2)感知和(3)将感知与行动合并。

控制理论

你的问题的答案部分取决于你正在使用什么类型的控制方案:是前馈控制还是反馈控制?如果是后者,除了地形信息外,你有哪些模拟实时传感器?

仅仅拥有地形信息并将其纳入您的控制策略中,并不意味着您正在使用反馈控制。可能使用这样的信息来选择前馈策略,这似乎最接近您所描述的问题。

感知

无论您是使用前馈控制还是反馈控制,您都需要将地形信息和任何其他传感器数据表示为控制系统的输入空间。训练基于遗传算法的运动控制器的一部分应该是通过各种随机地形移动您的骨架,以学习特征检测器。这些特征检测器通过将输入空间分成关键区域来分类地形情景,从而决定选择什么是最佳的行动策略,即采用什么控制行为。

如何最好地表示输入空间取决于您模拟的地形信息的粒度水平。如果它只是一些网格空间中的地形类型和/或障碍物的离散空间,您可以直接将其呈现给您的遗传算法而无需转换。然而,如果数据在连续空间中,例如任意范围/方向的地形类型和障碍物,则可能需要将其转换为更容易推断空间关系的空间,例如粗编码的范围和方向,例如近、中、远和前进、左前方、左等。高斯和模糊分类器对后一种方法很有用,但离散值编码也可以起作用。

合并感知和行动

使用上述输入空间编码方法之一,您有几个选项来连接行为选择搜索空间和运动控制搜索空间:

  1. 将两个空间分开成两个学习问题,并使用单独的遗传算法来进化标准的多层感知器神经网络的参数。后者将把您的传感器数据(可能是转换后的)作为输入,您的骨架行为集合作为输出。您的GA可以使用某些适应度函数在一系列模拟试验中进化参数,而不是使用反向传播或其他ANN学习方法来学习网络权重,例如适应度=在固定时间段内朝着B点从A点出发行驶的距离。这应该会从完全随机选择行为到更协调和有用的连续几代中进化。

  2. 通过将多层感知器网络链接到现有的基于GA的控制器框架中,使用骨架行为集合作为链接,将两个搜索空间(行为选择和骨架电机控制)合并,如上所述(1)。将进化的参数空间既是神经网络权重,也是您现有的控制器参数空间。假设您正在使用多目标遗传算法,例如NSGA-II算法(因为您有多个适应度函数),则适应度函数将是稳定性、速度、熵最小化、关节力等,再加上一些针对学习行为选择策略的适应度函数,例如在固定时间段内从A点出发向B点移动的距离。这种方法与上述(1)的方法之间的区别在于,当两个问题合并而不是分开时,参数空间可能会更好地探索,因此您可能能够学习到更好的行为协调和更细粒度的电机控制。缺点是收敛到合理的参数解决方案可能需要更长的时间,并且如果保持两个学习问题分开,则可能无法学习到所有的电机控制方面。

假设您已经有了解决电机控制问题的工作进化解决方案,那么最好使用方法(1)来学习行为选择模型,并使用单独的遗传算法。此外,还有许多替代混合遗传算法-人工神经网络方案可用于学习后者的模型,包括根本不学习模型,而是像我在另一个答案中描述的那样使用路径规划算法。我之所以提供这种方法,是因为您已经熟悉基于遗传算法的机器学习。

动作选择问题是机器学习和自主机器人领域的一个强大研究领域。阅读这个主题本身可能非常值得,可以更好地了解您当前的问题,并且通过这种范式来查看您的问题,您可能能够设计出比我迄今为止提出的任何简单策略。


我要处理任意范围。每个对象可以有不同的位置、角度,甚至速度(方向和角速度),它们没有映射到网格或枚举。我能将输入空间集成到行为空间中吗?我该如何连接这两个搜索空间? - DrSammyD
@DrSammyD - 如果您最近在对此回答(https://dev59.com/107Sa4cB1Zd3GeqP4Ytw#3090297“title”)的评论中描述的世界模型如此详细,则可能有一个完全不同的方法需要考虑:机器人路径规划。我已经发布了一个[单独的答案](https://dev59.com/107Sa4cB1Zd3GeqP4Ytw#3107448 "title")来探索这种方法,因为它与上述方法本质上是不同的。 - Joel Hoff
@DrSammyD - 我已经回答了你关于如何连接两个搜索空间的问题,并在我的上面的答案中添加了一些讨论。 - Joel Hoff

0

你正在使用遗传算法来修改行为,这意味着你已经为每种因素组合设计了适应度函数。这是你的问题吗?

如果是的话,答案取决于您用于定义最佳步行行为的指标:

  1. 最大化稳定性
  2. 最大化速度
  3. 最小化关节受力
  4. 最小化能量或熵产生

还是您只是尝试一堆参数,记录值,然后让遗传算法带您走向最佳解决方案?

如果每种行为在一个情境中表现良好而在另一个情境中则不然,我建议您尝试量化如何感知和插值情境,并混合策略,看看是否有所帮助。


我有适用于最大化稳定性、速度,最小化关节力和能量消耗的适应性函数。我的问题是每种行为只适用于特定情况。例如,一种行为适用于平地行走,另一种行为适用于当右脚前方有一个隆起需要踩上去时行走,还有一种行为适用于当隆起更高、倾斜或在左脚前方时行走。对于不同的情况,适用于一种情况的行为并不适用于其他情况。我应该修改问题陈述。 - DrSammyD

0

听起来你现在只是有一个分类问题。你想将你当前所走的地形的一些知识映射到一组类别中的一个。知道地形的类别允许你调用适当的子程序。这正确吗?

如果是这样,那么有很多分类引擎可以使用,包括神经网络、贝叶斯网络、决策树、最近邻等。为了选择最合适的引擎,我们需要更多关于你的问题的信息。

首先,你有哪些输入或感官数据可用来帮助你识别应该调用的行为类别?其次,你能描述一下在训练这个分类器时的情况以及在部署它时运行时的情况吗?例如,计算资源的限制或对噪声鲁棒性的要求等。

编辑:由于您有固定数量的类,并且您有一些参数化模型来生成所有可能的地形,我建议使用k-means clustering。其原理如下。您将一堆地形聚类成k个不同的类别,其中每个聚类与一个专门为该聚类地形表现最佳的子程序相关联。然后,当出现新的地形时,它可能会接近这些聚类中的一个。然后,您调用相应的专门子程序来导航该地形。

离线执行此操作:生成足够多的随机地形以充分采样参数空间,将这些地形映射到您的感知空间(但记住哪些感知空间中的点对应哪些地形),然后在此感知空间语料库上运行k-means聚类,其中k是您要学习的类别数。您在类别代表C和感知空间中的点P之间的距离函数将简单地是让算法C导航生成P的地形的适应度函数。然后,您将获得感知空间的k个聚类的划分,每个聚类映射到您拥有的最佳子程序。每个聚类都将在感知空间中具有代表性点。

现在在运行时:您将在感知空间中获得一些未标记的点。使用不同的距离函数来查找最接近的代表点以确定新进入点所属的类别。

请注意,此方法的成功取决于地形生成参数空间到感知空间的映射质量,从感知空间到您的适应性函数,以及您用于比较感知空间中点的最终距离函数。

还要注意,如果您有足够的内存,而不仅仅是使用k个代表性感知点告诉您未标记的感知点属于哪个类别,您可以浏览您的训练集并标记所有学习类别的点。然后在运行时,选择最近的邻居,并得出您在感知空间中未标记的点与该邻居属于同一类别的结论。


我正在使用PhysX引擎模拟世界。我的感官数据是来自碰撞体周围区域的所有碰撞形状(包括盒子、圆形、胶囊和三角网格),我收集它们的大小、方向、速度(方向和角速度)。我还没有实现这个功能,但我认为我应该让GA收集这些变量,让它在某个变量处于特定范围时随机选择何时分支出另一个行为,然后在该变量上创建另一个行为。我不知道如何在多次测试中剪枝掉不适合的行为。 - DrSammyD
我也可以模拟视觉,并获取角色前方的碰撞对象。此外,由于角色由与其发生碰撞的相同部件构成,因此角色知道每个身体部位的位置。至于计算限制,我正在尝试让它在当前或接近未来的消费级计算机硬件上模拟。 - DrSammyD
最终目标是让这两个角色具备一定的武术能力并相互对战。但首先我需要让它们行走。我不确定这是否太过雄心勃勃,因为我很快就感觉到目前的硬件可能无法支持。尽管如此,我仍想尝试。现在学到的越多,以后就越有可能实现。 - DrSammyD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接