第101章 第二种技术(2 / 2)
“用这么简单的方法就表示出飞行轨迹的预测函数,实在是不可思议。”
“对啊,这么简单的方式为啥当初我们就没想到呢?”
“哈哈,科学发展史上有很多这样的例子,不奇怪,总之风大师先想到了那就是他厉害。”
廖蒙以前玩空战游戏的时候就想过轨迹预测问题,但在能量空战论的资料上没有找到,然后就自己研究,结果很快就得出这个简单函数。
当时廖蒙也奇怪,这个函数这么简单怎么在能量空战论中没有,后来他想可能只是公开的能量空战论资料中没有,而军方资料中已经有了。不过这也不重要了,有了这个轨迹函数后分析空战策略就准确了很多,廖蒙也凭这个函数让自己的空战游戏技术提升了一大截,成为游戏高手。
“有了这个轨迹函数后再用一些概率论方法就能得到敌方的轨迹云,这个在资料上有介绍。然后这里要介绍的是基于牛顿力学飞行格斗技的基本框架——马尔科夫链。
事实上地面格斗机器人理论的基本框架也是马尔科夫链,这也是很多学科都用到的知识点。
简单来讲,飞行格斗系统中的基本马尔科夫过程就是,格斗者基于当前系统状态做出相应动作,然后进入下一个系统状态。这个过程随时间串起来,就构成了马尔科夫链。
本来这也是个状态机,但现在我们要考虑的无限多的状态系统,并且每次状态转换都要考虑转移概率,所以还是用马尔科夫链来研究比较合适。
这里的系统状态也不能再像状态机那样简化,需要包含几乎所有系统自由度,包括参战者整体移动和转动自由度,各肢体部位转动自由度以及武器转动自由度。
这里也仍以双人单挑系统作为主要研究对象,其中包含的状态就是敌我双方的各种自由度。
系统动作不是常规意义上的动作,而是人和武器所受力量的时间轨迹或者说时间函数,这些力量可能包括重力、法阵推力、空气作用力、人体各部位和武器之间的固体作用力,很复杂,所以要简化成各类力矢量合和力矩,具体在资料里有介绍。
基于一个状态下执行一个动作后的状态转移概率模型,主要是结合空气动力学建立的机器人动力学模型。
可以说,知道当前状态下所有状态参数、动作和动力模型后,我们就能计算下一时间段内的各时刻的状态,只要时间段足够短,计算精度就足够精确。
当然关键的是,在各种状态下执行什么动作才能对战斗最有利,这也就是在各类算法中常说的寻找最优策略。
而要量化判断一个策略的优劣,就需要有相应的目标函数。由于直观上我们希望在战斗中对方所受伤害越多越好,而我方所受伤害越少越好,因此就需要先建立描述伤害的函数。
而这方面其实我没有仔细研究过,只是大概设想过伤害的量化描述应该是一个人受伤后导致的战力下降程度,而战力是在统计上可以衡量的。
但这样仍然需要量化统计身体各部位以各种方式受伤会导致战力有多大程度的下降,这需要实验测量,工作量非常巨大,目前我只有一个简单的伤害模型。
在伤害模型中,斩首、脑部受损、躯干洞穿、躯干断裂被认为死亡,伤害值为1,其余伤害全部按0.5伤害值算。由于在马尔科夫链中状态很多,而且动作导致受伤是有概率性的,所以仅有这两个离散伤害值也能得到连续伤害结果,并且整体上不太影响模型精度。
在伤害函数给出后,下一步就是构建综合伤害函数,由两部分构成:
第一部分就是就是我方的伤害函数。由于基于牛顿力学的飞行格斗技也是保守策略技术,所以首要的做到在战斗中自保,那么第一部分的函数就要赋予较高权重。
第二部分是用我方伤害函数减去对方伤害函数,赋予较低权重,这样就可以在尽量自保基础上对对方造成伤害。
然后来构建每次状态转移对应的伤害函数。每个状态下可以执行的动作可以有无数种,那么执行单个动作的概率就无限趋近于零,所以要用概率密度表示执行各动作的几率,其关于动作范围的积分代表执行对应所有动作的概率。
每类动作可能会导致转移到不同状态,各自也有对应概率,那么每个状态——动作——状态对都有其对应概率密度,并且有对应的综合伤害函数,对二者乘积做求和就得到了单步伤害期望函数。
而每次打斗总有终止的时候,要么是不打了,要么是其中一方阵亡了,这个过程会形成——状态——动作——状态——动作...…的过程链条,只是在打斗前我们无法百分百预测接下来的打斗会以哪条链条进行,所以我们需要将所有链条的单步伤害函数求和,然后就得到了总伤害期望函数。
每个状态都有这样的对应总伤害期望函数,不过我们的目标是知道每个状态下执行各动作的优劣,以找到最优动作,所以我们还要再得到一个状态——动作对的总伤害期望函数,这样,对于一个状态,其总伤害期望函数最大的那类动作就是最优动作。
在场的研究者中可能有研究ai或者使用过ai算法的,那你们应该也看出来了,上面这个模型就是着名的强化学习模型。”