“是我疏忽了,不過空對地技術幾乎沒有多少內容,因為沒什麽技術含量。百級玩家飛行加速度可超過100g,而地面玩家平均只有幾g,哪怕飛行玩家繞著一個地面玩家轉圈,對方的武器都追不上,這樣繞兩圈對方就會出現空檔,然後一刀過去就能了結對方。”
...
“就這麽簡單?”提問的研究者一臉不可思議。
“對啊,這個用加速度公式簡單算一下就可以驗證了。當然空對地也有少數幾點需要注意。
第一是貼地飛行速度暫時別超120米秒速,攻擊地面敵人時別超70,不然可能控制不好撞到地面障礙。
第二是隻選擇那些身周十米內沒有隊友的敵人為目標,防止人多撞上去。一般來說高機動團戰中平均密度也差不多就是方圓十多米一個人,而這種分布不均勻,所以會有很多局部區域人流密度滿足這個要求。
第三是不要使用垂直俯衝方式攻擊,因為僅靠狀態機對速度控制還不夠精確,可能會撞到地面,保險起見隻用水平或傾斜角度攻擊就行。
沒了。”
“明白了謝謝。”
廖蒙等了一會兒,見沒人再提問,就繼續介紹後續內容。
“那麽接下來就到了第二種技術——基於牛頓力學的飛行格鬥技。
在場研究者們應該來自不同專業,有的可能沒學過理論力學,它有兩種理論框架,一個是牛頓力學,一個是分析力學,二者是等價的,只不過內容不同。
前者需要根據具體受力圖分析,相對較簡單,但分析複雜系統較麻煩,後者不需要借助圖形,較難學,而分析複雜系統較簡單。
當前我們介紹的飛行技是基於牛頓力學表示的,其實能量空戰論也是基於牛頓力學研究的,畢竟無論現實還是遊戲中牛頓力學都是描述宏觀世界的基本物理規律,兩種量化研究空戰的理論都要以此為基石。
只不過大家應該已經注意到一點,能量空戰論不太適合用來做為,為空戰策略編程的理論依據,因為它缺乏描述空戰系統的普適性公式。”
這個問題其實也是包括悠悠風在內的很多研究者所想過的問題,只是她們以為空戰系統是個混沌系統,就沒有深究這點。現在部分研究者已經提前在資料看過廖蒙給出的方法了,但還是忍不住再聽廖蒙講下這部分內容。
“具體來說,量化描述空戰系統的一個基本步驟是,要在幾乎一切狀態下量化預測敵方未來飛行軌跡,雖然由於敵方選擇有隨機性,未來軌跡不是確定軌跡,而是軌跡雲,但我們至少需要預測出一條概率較大的軌跡做參考。
要做到這點就需要微分幾何。前面介紹狀態機時說過,軌跡分為彎曲和扭曲曲線,後者佔大多數,對應的軌跡預測也更難,我們首先要介紹的內容就是扭曲軌跡預測。”
廖蒙將投影跳轉到類似前面的柱螺線部分,不過此時的投影中還帶了一堆公式。
“前面介紹過,扭曲曲線是軌跡點分布於不同平面上的異面曲線,它的形狀由兩個參數決定,曲率和撓率。
曲率是大家都熟悉的,表示的是隨著曲線延伸,對應法向量或切向量的方向變化率。而撓率可能大家比較陌生,它是用來表示曲線扭曲特性的,指隨著曲線延伸,對應副法向量的方向變化率。
如果曲率和撓率固定,曲線形狀就固定了,是一條柱螺線。為了讓曲線方程盡量簡單,所選取得坐標系一般是柱螺線對應的圓柱坐標系。曲線方程就是這幾個式子。”
廖蒙將軌跡方程的幾個等式標亮,又接著說,
“接下來就要將曲線方程和飛行軌跡聯系起來,靠的是曲率/撓率和彎轉率/滾轉率的關系。我們將曲率/撓率的微分函數做下變形,就得到了關系等式:
曲率=彎轉率/速率
撓率=滾轉率/速率
其中彎轉率也可以用俯仰率和偏轉率平方和的開方表示,而速率是關於當前加速度的積分。
然後將幾個式子帶入柱螺線的曲線方程,就得到了飛行軌跡函數。雖然這只是基於當前的三種轉向率和速率變化率給出的函數,但已經是軌跡雲中概率密度最大的軌跡,用來做參考足夠了。”
“漂亮!”
一名研究者忍不住喊道,然後熱情鼓掌,現場也跟隨響起一片嘩啦啦的掌聲。
“用這麽簡單的方法就表示出飛行軌跡的預測函數,實在是不可思議。”
“對啊,這麽簡單的方式為啥當初我們就沒想到呢?”
“哈哈,科學發展史上有很多這樣的例子,不奇怪,總之風大師先想到了那就是他厲害。”
廖蒙以前玩空戰遊戲的時候就想過軌跡預測問題,但在能量空戰論的資料上沒有找到,然後就自己研究,結果很快就得出這個簡單函數。
當時廖蒙也奇怪,這個函數這麽簡單怎麽在能量空戰論中沒有,後來他想可能只是公開的能量空戰論資料中沒有,而軍方資料中已經有了。不過這也不重要了,有了這個軌跡函數後分析空戰策略就準確了很多,廖蒙也憑這個函數讓自己的空戰遊戲技術提升了一大截,成為遊戲高手。
“有了這個軌跡函數後再用一些概率論方法就能得到敵方的軌跡雲,這個在資料上有介紹。然後這裡要介紹的是基於牛頓力學飛行格鬥技的基本框架——馬爾科夫鏈。
事實上地面格鬥機器人理論的基本框架也是馬爾科夫鏈,這也是很多學科都用到的知識點。
簡單來講,飛行格鬥系統中的基本馬爾科夫過程就是,格鬥者基於當前系統狀態做出相應動作,然後進入下一個系統狀態。這個過程隨時間串起來,就構成了馬爾科夫鏈。
本來這也是個狀態機,但現在我們要考慮的無限多的狀態系統,並且每次狀態轉換都要考慮轉移概率,所以還是用馬爾科夫鏈來研究比較合適。
這裡的系統狀態也不能再像狀態機那樣簡化,需要包含幾乎所有系統自由度,包括參戰者整體移動和轉動自由度,各肢體部位轉動自由度以及武器轉動自由度。
這裡也仍以雙人單挑系統作為主要研究對象,其中包含的狀態就是敵我雙方的各種自由度。
系統動作不是常規意義上的動作,而是人和武器所受力量的時間軌跡或者說時間函數,這些力量可能包括重力、法陣推力、空氣作用力、人體各部位和武器之間的固體作用力,很複雜,所以要簡化成各類力矢量合和力矩,具體在資料裡有介紹。
基於一個狀態下執行一個動作後的狀態轉移概率模型,主要是結合空氣動力學建立的機器人動力學模型。
可以說,知道當前狀態下所有狀態參數、動作和動力模型後,我們就能計算下一時間段內的各時刻的狀態,只要時間段足夠短,計算精度就足夠精確。
當然關鍵的是,在各種狀態下執行什麽動作才能對戰鬥最有利,這也就是在各類算法中常說的尋找最優策略。
而要量化判斷一個策略的優劣,就需要有相應的目標函數。由於直觀上我們希望在戰鬥中對方所受傷害越多越好,而我方所受傷害越少越好,因此就需要先建立描述傷害的函數。
而這方面其實我沒有仔細研究過,只是大概設想過傷害的量化描述應該是一個人受傷後導致的戰力下降程度,而戰力是在統計上可以衡量的。
但這樣仍然需要量化統計身體各部位以各種方式受傷會導致戰力有多大程度的下降,這需要實驗測量,工作量非常巨大,目前我只有一個簡單的傷害模型。
在傷害模型中,斬首、腦部受損、軀乾洞穿、軀乾斷裂被認為死亡,傷害值為1,其余傷害全部按0.5傷害值算。由於在馬爾科夫鏈中狀態很多,而且動作導致受傷是有概率性的,所以僅有這兩個離散傷害值也能得到連續傷害結果,並且整體上不太影響模型精度。
在傷害函數給出後,下一步就是構建綜合傷害函數,由兩部分構成:
第一部分就是就是我方的傷害函數。由於基於牛頓力學的飛行格鬥技也是保守策略技術, 所以首要的做到在戰鬥中自保,那麽第一部分的函數就要賦予較高權重。
第二部分是用我方傷害函數減去對方傷害函數,賦予較低權重,這樣就可以在盡量自保基礎上對對方造成傷害。
然後來構建每次狀態轉移對應的傷害函數。每個狀態下可以執行的動作可以有無數種,那麽執行單個動作的概率就無限趨近於零,所以要用概率密度表示執行各動作的幾率,其關於動作范圍的積分代表執行對應所有動作的概率。
每類動作可能會導致轉移到不同狀態,各自也有對應概率,那麽每個狀態——動作——狀態對都有其對應概率密度,並且有對應的綜合傷害函數,對二者乘積做求和就得到了單步傷害期望函數。
而每次打鬥總有終止的時候,要麽是不打了,要麽是其中一方陣亡了,這個過程會形成——狀態——動作——狀態——動作...…的過程鏈條,只是在打鬥前我們無法百分百預測接下來的打鬥會以哪條鏈條進行,所以我們需要將所有鏈條的單步傷害函數求和,然後就得到了總傷害期望函數。
每個狀態都有這樣的對應總傷害期望函數,不過我們的目標是知道每個狀態下執行各動作的優劣,以找到最優動作,所以我們還要再得到一個狀態——動作對的總傷害期望函數,這樣,對於一個狀態,其總傷害期望函數最大的那類動作就是最優動作。
在場的研究者中可能有研究ai或者使用過ai算法的,那你們應該也看出來了,上面這個模型就是著名的強化學習模型。”