第101章 第二种技术
66读书 www.66dushu.com,最快更新简单设定无限世界!
“是我疏忽了,不过空对地技术几乎没有多少内容,因为没什么技术含量。百级玩家飞行加速度可超过100g,而地面玩家平均只有几g,哪怕飞行玩家绕着一个地面玩家转圈,对方的武器都追不上,这样绕两圈对方就会出现空档,然后一刀过去就能了结对方。”
...
“就这么简单?”提问的研究者一脸不可思议。
“对啊,这个用加速度公式简单算一下就可以验证了。当然空对地也有少数几点需要注意。
第一是贴地飞行速度暂时别超120米秒速,攻击地面敌人时别超70,不然可能控制不好撞到地面障碍。
第二是只选择那些身周十米内没有队友的敌人为目标,防止人多撞上去。一般来说高机动团战中平均密度也差不多就是方圆十多米一个人,而这种分布不均匀,所以会有很多局部区域人流密度满足这个要求。
第三是不要使用垂直俯冲方式攻击,因为仅靠状态机对速度控制还不够精确,可能会撞到地面,保险起见只用水平或倾斜角度攻击就行。
没了。”
“明白了谢谢。”
廖蒙等了一会儿,见没人再提问,就继续介绍后续内容。
“那么接下来就到了第二种技术——基于牛顿力学的飞行格斗技。
在场研究者们应该来自不同专业,有的可能没学过理论力学,它有两种理论框架,一个是牛顿力学,一个是分析力学,二者是等价的,只不过内容不同。
前者需要根据具体受力图分析,相对较简单,但分析复杂系统较麻烦,后者不需要借助图形,较难学,而分析复杂系统较简单。
当前我们介绍的飞行技是基于牛顿力学表示的,其实能量空战论也是基于牛顿力学研究的,毕竟无论现实还是游戏中牛顿力学都是描述宏观世界的基本物理规律,两种量化研究空战的理论都要以此为基石。
只不过大家应该已经注意到一点,能量空战论不太适合用来做为,为空战策略编程的理论依据,因为它缺乏描述空战系统的普适性公式。”
这个问题其实也是包括悠悠风在内的很多研究者所想过的问题,只是她们以为空战系统是个混沌系统,就没有深究这点。现在部分研究者已经提前在资料看过廖蒙给出的方法了,但还是忍不住再听廖蒙讲下这部分内容。
“具体来说,量化描述空战系统的一个基本步骤是,要在几乎一切状态下量化预测敌方未来飞行轨迹,虽然由于敌方选择有随机性,未来轨迹不是确定轨迹,而是轨迹云,但我们至少需要预测出一条概率较大的轨迹做参考。
要做到这点就需要微分几何。前面介绍状态机时说过,轨迹分为弯曲和扭曲曲线,后者占大多数,对应的轨迹预测也更难,我们首先要介绍的内容就是扭曲轨迹预测。”
廖蒙将投影跳转到类似前面的柱螺线部分,不过此时的投影中还带了一堆公式。
“前面介绍过,扭曲曲线是轨迹点分布于不同平面上的异面曲线,它的形状由两个参数决定,曲率和挠率。
曲率是大家都熟悉的,表示的是随着曲线延伸,对应法向量或切向量的方向变化率。而挠率可能大家比较陌生,它是用来表示曲线扭曲特性的,指随着曲线延伸,对应副法向量的方向变化率。
如果曲率和挠率固定,曲线形状就固定了,是一条柱螺线。为了让曲线方程尽量简单,所选取得坐标系一般是柱螺线对应的圆柱坐标系。曲线方程就是这几个式子。”
廖蒙将轨迹方程的几个等式标亮,又接着说,
“接下来就要将曲线方程和飞行轨迹联系起来,靠的是曲率\/挠率和弯转率\/滚转率的关系。我们将曲率\/挠率的微分函数做下变形,就得到了关系等式:
曲率=弯转率\/速率
挠率=滚转率\/速率
其中弯转率也可以用俯仰率和偏转率平方和的开方表示,而速率是关于当前加速度的积分。
然后将几个式子带入柱螺线的曲线方程,就得到了飞行轨迹函数。虽然这只是基于当前的三种转向率和速率变化率给出的函数,但已经是轨迹云中概率密度最大的轨迹,用来做参考足够了。”
“漂亮!”
一名研究者忍不住喊道,然后热情鼓掌,现场也跟随响起一片哗啦啦的掌声。
“用这么简单的方法就表示出飞行轨迹的预测函数,实在是不可思议。”
“对啊,这么简单的方式为啥当初我们就没想到呢?”
“哈哈,科学发展史上有很多这样的例子,不奇怪,总之风大师先想到了那就是他厉害。”
廖蒙以前玩空战游戏的时候就想过轨迹预测问题,但在能量空战论的资料上没有找到,然后就自己研究,结果很快就得出这个简单函数。
当时廖蒙也奇怪,这个函数这么简单怎么在能量空战论中没有,后来他想可能只是公开的能量空战论资料中没有,而军方资料中已经有了。不过这也不重要了,有了这个轨迹函数后分析空战策略就准确了很多,廖蒙也凭这个函数让自己的空战游戏技术提升了一大截,成为游戏高手。
“有了这个轨迹函数后再用一些概率论方法就能得到敌方的轨迹云,这个在资料上有介绍。然后这里要介绍的是基于牛顿力学飞行格斗技的基本框架——马尔科夫链。
事实上地面格斗机器人理论的基本框架也是马尔科夫链,这也是很多学科都用到的知识点。
简单来讲,飞行格斗系统中的基本马尔科夫过程就是,格斗者基于当前系统状态做出相应动作,然后进入下一个系统状态。这个过程随时间串起来,就构成了马尔科夫链。
本来这也是个状态机,但现在我们要考虑的无限多的状态系统,并且每次状态转换都要考虑转移概率,所以还是用马尔科夫链来研究比较合适。
这里的系统状态也不能再像状态机那样简化,需要包含几乎所有系统自由度,包括参战者整体移动和转动自由度,各肢体部位转动自由度以及武器转动自由度。
这里也仍以双人单挑系统作为主要研究对象,其中包含的状态就是敌我双方的各种自由度。
系统动作不是常规意义上的动作,而是人和武器所受力量的时间轨迹或者说时间函数,这些力量可能包括重力、法阵推力、空气作用力、人体各部位和武器之间的固体作用力,很复杂,所以要简化成各类力矢量合和力矩,具体在资料里有介绍。
基于一个状态下执行一个动作后的状态转移概率模型,主要是结合空气动力学建立的机器人动力学模型。
可以说,知道当前状态下所有状态参数、动作和动力模型后,我们就能计算下一时间段内的各时刻的状态,只要时间段足够短,计算精度就足够精确。
当然关键的是,在各种状态下执行什么动作才能对战斗最有利,这也就是在各类算法中常说的寻找最优策略。
而要量化判断一个策略的优劣,就需要有相应的目标函数。由于直观上我们希望在战斗中对方所受伤害越多越好,而我方所受伤害越少越好,因此就需要先建立描述伤害的函数。
而这方面其实我没有仔细研究过,只是大概设想过伤害的量化描述应该是一个人受伤后导致的战力下降程度,而战力是在统计上可以衡量的。
但这样仍然需要量化统计身体各部位以各种方式受伤会导致战力有多大程度的下降,这需要实验测量,工作量非常巨大,目前我只有一个简单的伤害模型。
在伤害模型中,斩首、脑部受损、躯干洞穿、躯干断裂被认为死亡,伤害值为1,其余伤害全部按0.5伤害值算。由于在马尔科夫链中状态很多,而且动作导致受伤是有概率性的,所以仅有这两个离散伤害值也能得到连续伤害结果,并且整体上不太影响模型精度。
在伤害函数给出后,下一步就是构建综合伤害函数,由两部分构成:
第一部分就是就是我方的伤害函数。由于基于牛顿力学的飞行格斗技也是保守策略技术,所以首要的做到在战斗中自保,那么第一部分的函数就要赋予较高权重。
第二部分是用我方伤害函数减去对方伤害函数,赋予较低权重,这样就可以在尽量自保基础上对对方造成伤害。
然后来构建每次状态转移对应的伤害函数。每个状态下可以执行的动作可以有无数种,那么执行单个动作的概率就无限趋近于零,所以要用概率密度表示执行各动作的几率,其关于动作范围的积分代表执行对应所有动作的概率。
每类动作可能会导致转移到不同状态,各自也有对应概率,那么每个状态——动作——状态对都有其对应概率密度,并且有对应的综合伤害函数,对二者乘积做求和就得到了单步伤害期望函数。
而每次打斗总有终止的时候,要么是不打了,要么是其中一方阵亡了,这个过程会形成——状态——动作——状态——动作...…的过程链条,只是在打斗前我们无法百分百预测接下来的打斗会以哪条链条进行,所以我们需要将所有链条的单步伤害函数求和,然后就得到了总伤害期望函数。
每个状态都有这样的对应总伤害期望函数,不过我们的目标是知道每个状态下执行各动作的优劣,以找到最优动作,所以我们还要再得到一个状态——动作对的总伤害期望函数,这样,对于一个状态,其总伤害期望函数最大的那类动作就是最优动作。
在场的研究者中可能有研究ai或者使用过ai算法的,那你们应该也看出来了,上面这个模型就是着名的强化学习模型。”