九 打架?(2 / 2)

强化学习就是用一种叫马尔科夫链的模型,来表示机器人的运动状态和策略,并给系统一个目标函数,系统会不断实验各种策略,每种策略都会得到对应目标函数,算法会不断取最优目标函数,并更新对应策略。这样目标函数和策略会不断优化,最终得到的目标函数和策略就是最优的,而这个策略就是人们想要的。

理想情况下,只要实验次数够多,最终策略就会是全局最优的。

“自从ai火起来后,强化学习在机器人研究上用的就越来越多。但强化学习与打架结合具体有什么好处呢?”

“传统机器人强化学习方法都只是应用于特定场景,但机器人应用场景有无数种,每换一种场景就需要重新建模研究,效果并没有那么好。这里的重新建模主要指目标函数要重新编写,但打架的目标函数基本只有一个,那就是用最小的代价战胜对手。”叶蒙解释道。

“你是指因为强化学习目标函数单一,而打架的场景也有无穷多样,那么相比传统方法,不用多少人力就能让算法策略达到更优,并且覆盖范围更广?”

“没错。”

“但是打架的场景毕竟与一般机器人应用场景不同,研究这个对后者有什么用呢?”太明珠仍有疑惑。

“用处就是提高保持平衡的能力。”

“哦!”太明珠恍然,然后将自己的理解解释一遍。

人形机器人两大难点就是复杂地形移动保持平衡,以及具有处理复杂任务的智能。打架与一般机器人应用场景的区别主要是后者,但前者是类似的,因此打架机器人算法也可以用来帮助提高机器人在一般场景下保持平衡的能力。

而且打架是种极端剧烈运动,不仅在移动方面剧烈,其余肢体运动也激烈,而机器人每个关节运动都会与其余几十个关节运动耦合,能够在打架中保持平衡的机器人要在一般场景中保持平衡没什么难度,当然算法要经过适当调整。

当然要做到在打架中保持平衡很难,但打架结合强化学习的强处就在这,它只有一个目标函数,不需要费劲去反复设计。对于策略计算而言,只要有明确目标,就能通过不断迭代毕竟目标。

叶蒙点点头,和聪明人说话就是方便,一点就通。

“我还有疑问,首先是如何定义打架?”

物理建模需要有相应物理量或物理过程的明确定义,不然无法在数学上表示。

“就是肉体...额人体的碰撞,当然手持兵器也可以算作人体部位的延伸。”

打架就是用拳、脚、兵器等部位去直击、勒、拧、刺或挥砍对方,击伤方式很多,但大多都属于碰撞,虽然勒和拧这类不算,但在模拟仿真时可以排除,这样只是让打架方式少一点儿,影响不大。

而身体不同部位强度不同,按从高到低排列为:兵器、屈拢成锐角的关节、拳和脚、四肢关节之间部位、胸/腹/头等。这种划分不用很严格,毕竟这里的重点是有方法表示打架这个物理过程,而非让物理过程与现实尽量接近。

一般打架需要尽量用强度高的部位攻击对方强度低的部位,另外攻击角度和速度对攻击效果也有很大影响。

而打架收益分为两方面,敌方受到的伤害和自己受到的伤害。在算法中这种伤害用血条表示就行,理由同上。而打架目标就是尽量多击伤对方而己方少受伤,这里可以简化为让对方受伤量与己方受伤量的差值最大化,简称伤害差值最大化。

“哇,打架原本是很复杂的物理过程,结果被你这么一表示就简单多了。”

太明珠笑了笑,然后又问道,

“不过即便对于简化的打架模型,其状态空间仍然极其巨大,甚至远大于围棋。那么计算复杂度就会明显更大,而且在算法迭代期间会不断遇到陷入局部最优的情况,怎么解决这种问题呢?”

由于人体各关节是连续运动的,所以状态空间是连续状态空间,而且关节转动自由度很多,转动范围和速度范围也很大,这样打架的状态空间超过围棋是很正常的事。

一般来说状态空间大,计算量就大。而且算法目标函数是让伤害差值最大化,这样容易造成这种情况,比如a与b拼刀,某个时刻a看到b手臂无防守,就砍过去,但砍中后自己脑袋却无防守,然后被b一刀剁下来。这种追求短期效益的情况就是局部最优。

叶蒙答道,“两问题其实没那么严重。状态空间的确巨大,但仅仅是让格斗者打起来并且打得有模有样,并不难实现。比如你挥拳打我,挥拳方式有无数种,但你并不需要在这无数种方式中抉择,只要简单让右手打过来就行。”

当然在算法上,达到挥拳打到对方的程度也需要进行一定迭代,但这种目标明确、探索路径也不长的过程不需要多少计算量。

这表明打架过程中很多状态和策略是自然而然就表示和求解出来的,没那么费劲。

“至于局部最有问题,虽然算法目标函数是伤害差值最大化,但我们的研究目标不是,只要能达到打得有模有样就行。达到这种程度时,格斗者或机器人基本就能做到在复杂地形移动不摔倒了。”

不然跑一步就摔倒还算什么有模有样?

太明珠想了想,怀疑道,“仅仅要做到打得有模有样,也不是那么容易吧?”

“的确,如果一开始就以这个为目标,那算法可能会做很多无用计算,所以可以先从简化模型开始模拟。”

“简化到什么程度?”

“降维。”

“嗯?哪方面降维?”

凡是自由度都能说是维度,而自由度不只有运动自由度,算法上相当多独立变量都算是维度,太明珠不知道叶蒙说的降维是针对哪种维度的。

“就是运动自由度的降维。”叶蒙说道。

“你指通过减少关节来简化人体模型么?可人体这种结构就算简化,能简化的程度也很有限吧?”

叶蒙摇摇头,“降低运动自由度不代表只能减少关节啊,直接减少空间维度就行了。”

“这也行?”太明珠感觉对方脑洞总是从意想不到的地方冒出来。

“对啊。先做两个二维人体模型,再配上重力场就行。不管几维打架,都是人体碰撞,本质上一样的。”

“不是,你等等,我想下。”太明珠扶了扶额头。她过去很少感觉脑子不够用,但在一连串陌生的知识结构中思考的确是件不容易的事。

她想了一会儿,问道,“这样问题的确更简单,但二维打架和三维打架动作完全不一样吧,算法能套用到三维空间里么?”

“可以的,”叶蒙点点头,“动作不一样只是视觉上的差异。不管几维,打架动作都只有近身缠斗和非近身动作两大类,近身缠斗只有攻击、格挡和闪躲三类,而非近身动作只考虑逃跑和追击就行,所以本质上都一样。”

“而且你说的关节简化应该和一些机器人研究或动画上的简化人体一样吧,就是不要手指脚趾,脊椎关节也省去?”

太明珠点点头。

“其实还可以进一步简化,比如手臂的大小臂合为一根,大小腿合为一根,也不要拳头和脚了。”

“这种结构有人试过,站不稳的,毕竟腿上关节减少会让保持平衡手段减少。”太明珠邹眉道。

“那是对机器人这种精度较低、工程难度又大的单位而言,在游戏中的虚拟单位运动精度可以高几个量级。哦,忘记说了一点,机器人需要的是实时计算运动策略,但进行虚拟模拟不需要。可以降低时间流速或者用很长时间计算一个动作。”

“回到简化模型的问题,可以从二维和少关节人体模型开始模拟,然后逐渐升级到三维和多关节模型,这样虽然整个过程也要花不少时间,但这种循序渐进的方式可以减少避免很多无用试错。”

叶蒙解释了一大堆,然后总结道,

“说了这么多都是解决计算量问题,其实只要目标函数唯一确定,计算量问题就不是什么大问题。而且当模型扩展到完整机器人模型后,算法就能靠自我迭代不断演进了。除了提高研发速率,还能将算法控制水平上限提高若干层级。”

“上限不就是达到人体的运动水平么?当然机器人还能做一些空翻之类杂技动作,甚至比顶尖运动员做的还好,但也没有明显超过人类水平吧。”太明珠问道。

叶蒙摇摇头,“这只是基于现在这种硬件水平的机器人,而在游戏中没有硬件限制,完全可以让格斗者具有超强力量,达到武侠甚至玄幻格斗效果都是可以的。在这样的格斗中训练出来的控制算法会有更高水平。”

返回