❶ 模擬退火法<sup>[1,]</sup>
模擬退火演算法最早在1953年由 Metropolis等人提出。在地球物理中的最早應用是Rothman在1983年利用模擬退火演算法處理地震資料的剩餘靜校正。模擬退火法也是類似於蒙特卡洛法的隨機搜索方法。但是在產生模型的過程中引入一些規則,能有效地加快搜索速度,有時又稱這類方法為啟發式蒙特卡洛法。
模擬退火法概念源於統計物理學,是模擬固體熔化狀態逐漸緩慢冷卻最終達到能量最小的結晶狀態的物理過程。對於一個熔化的金屬,當處於某個溫度的熱平衡狀態時,它的每一個分子都有它可能所處的狀態,有些分子可能能量高一些,有些分子可能能量低一些,分子處於何種狀態的概率由分子所具有的能量決定。設分子所有可能的能級總數為n(微觀粒子的能量都是量子化的,不連續的),則分子處於某種狀態的概率滿足玻爾茲曼概率分布:
地球物理反演教程
其中:Ei為第i個分子的能量;K為玻爾茲曼常數;T為絕對溫度;n為分子所有可能的能級總數,分母稱為配分因子;pi為第i個分子處於能量Ei的概率。
如果把地球物理反演的模型向量看作分子,把目標函數看作分子的能量,把目標函數的極小值看成分子冷卻結晶的最小能量,反演問題(最優化問題)可以模擬式(8.11)金屬退火的過程,通過緩慢地減小溫度進行反演,使目標函數(能量)逐漸達到極小值,這時所對應的模型(分子狀態)就是反演結果。
為了改善於蒙特卡洛法的隨機搜索方法,1953年 Metropolis等人在產生模型的過程中引入Metropolis接受准則,模型產生並不是完全隨機,而是以前一個模型為基礎隨機產生。對能量減小的模型完全接受,對能量增加的模型按一定的概率接受,這樣能有效地加快搜索速度,同時又有可能跳出局部極小值。具體如下:
設原來模型向量為mi,新的模型為mi+1(在mi基礎上隨機修改產生),各自的能量(目標函數)為E(mi)和E(mi+1)。如果E(mi+1)<E(mi),則目標函數在減小,新模型可以接受。如果E(mi+1)>E(mi),則目標函數在增加,按照一定概率來確定是否接受新的模型。具體規則見式(8.12):
E(mi+1)<E(mi) 完全接受mi+1為新模型
地球物理反演教程
式(8.12)就是Metropolis接受准則。它使得反演過程可以接受使目標函數增加的模型,因此也就使得模擬退火法有可能跳出局部極小,收斂於全局極小值點。由於玻爾茲曼常數K只是起到尺度因子的作用,在實際計算中K可取為1來簡化公式。從式(8.12)可以看出,當溫度較低時,pi+1/pi較小,因此接受使能量增加的新模型的可能性較小。而一般溫度較低時,目標函數較小,模型比較靠近真實模型,這時基本上只接受使目標函數減小的模型,使模型盡快收斂於極小值點。
在模擬退火反演中,要求溫度T隨著迭代次數的增加而緩慢降溫。常用的溫度函數有兩種。
(1)指數下降型:
Tk=T0·exp(-ck1/N) (8.13)
式中:k為迭代次數;c為衰減因子;N為模型參數的個數;T0為初始溫度。上式也可以改寫為
地球物理反演教程
通常選擇0.7≤α≤1。在實際應用中可採用0.5或1代替式(8.14)的1/N。圖8.4(a)為指數降溫曲線。採用參數為:T0=200℃,α=0.99,1/N=0.9。
(2)雙曲線下降型:
T=T0αk (8.15)
式中:T0為初始溫度;k為迭代次數;α為衰減因子,通常取0.99。初始溫度T0不能取得太高,否則增加計算時間浪費機時;T0也不能太低,否則模型選取不能遍及整個模型空間,只是在初始模型附近選取,不能進行全局尋優。所以T0的確定只有通過實驗計算得到。圖8.4(b)為雙曲線降溫曲線。採用參數為:T0=200℃,α=0.99。從圖8.4可以看出通過對不同溫度曲線和相關參數進行選擇,可以控制溫度下降的方式和速度。
圖8.4 模擬退火法降溫曲線
模擬退火法主要有三種:
(1)MSA演算法(Metropolis Simulated Annealing);
(2)HBSA演算法(Heat Bath Simulated Annealing);
(3)VFSA演算法(Very Fast Simulated Annealing)。
圖8.5 模擬退火MSA演算法程序流程圖
前面介紹的利用 Metropolis接受准則的演算法就是經典的模擬退火法。圖8.5為模擬退火 MSA演算法的程序流程圖。從中可以看出 MSA演算法有一套模型修改准則,依次改變模型參數,每次改變都是在原來模型基礎上改變一個參數,因此容易保持已有搜索成果,持續不斷地向目標函數最小值點接近,因此搜索效率比蒙特卡洛法高。此外,MSA演算法允許接受使目標函數增加的模型,這樣又易於跳出局部極小,達到全局極小。但 MSA演算法在任何溫度下和蒙特卡洛法一樣都是在模型全空間進行搜索,不能根據當前溫度和模型減小搜索空間,此外由於模型的修改全憑運氣,所以不可能像前面介紹的最小二乘法那樣目標函數基本上持續減小,而是呈不規則振盪在宏觀上逐漸減小,因此效率較低。
HBSA演算法與 MSA演算法的不同之處是在模型的修改上。也是首先隨機選擇一個初始M維模型向量m0(它具有M個參數);然後限制各個模型參數可能的取值范圍,對取值離散化。假設每個模型參數都有N個可能的值,首先固定模型第2個參數m0(2)直到第M個參數m0(M)保持不變,只修改第1個參數m0(1);計算m0(1)的所有取值時的目標函數,然後按式(8.16)計算「概率」,它就是式(8.11)配分因子取1的公式。即
地球物理反演教程
選擇「概率」最大的為模型第1個參數的修改值。照此依次對所有模型參數進行修改完成依次迭代計算。在每次迭代計算中保持溫度不變。隨著迭代次數增加,溫度降低,最終達到穩定狀態,獲得最小能量解。這種方法的計算由於要計算某個參數的所有可能值,所以計算量也是很大的。
1989年Ingber提出了VFSA演算法,由於速度較快,最為常用。它使得模擬退火法從理論走向了實際應用。VFSA演算法在流程上與傳統的模擬退火法相同,但是在模型修改、接受概率以及降溫曲線上有所改進。
(1)模型修改:常規模擬退火法採用高斯隨機分布修改模型,在任何溫度下都是在模型全空間進行搜索。而Ingber提出採用依賴於溫度的似cauchy分布產生新的模型。即
地球物理反演教程
yi=Tsgn(u-0.5)[(1+1/T|2u-1|-1](8.18)
其中:mi為當前模型第i個參數,m'i為修改後的模型參數;u為[0,1]的隨機數;[Ai,Bi]為mi和m'i的取值范圍;sgn( )為符號函數。
採用以上方式能在高溫下進行大范圍的搜索,低溫時在當前模型附近搜索,而且由於似cauchy分布具有平坦的「尾巴」,使其易於迅速跳出局部極值。這一改進大大加快了模擬退火法的收斂速度。
(2)接收概率:當E(mi+1)>E(mi)時,VFSA演算法採用如下概率接受公式:
地球物理反演教程
上式當h→1時變為式(8.12)。h通過實驗獲得。
(3)降溫曲線(退火計劃):Ingber在1989年採用式(8.13)得出指數降溫曲線。從圖8.4可知,溫度下降較快。
總之,VFSA演算法在模型修改、接受概率以及降溫曲線上的改進使得模擬退火演算法收斂速度大大加快。後人在此基礎上還有很多的改進,讀者可以參考相關文獻。
模擬退火法的優點:由於不需要計算偏導數矩陣,不需要解線性方程組(當然正演計算的除外),結構簡單,易於編程;此外,由於它搜索范圍大,能接受較差模型,因此易於達到全局極小。缺點:隨機搜索,計算量巨大,往往要計算成百上千次正演,這與前面的最小二乘法十幾次的正演計算相比反演時間太長,因此一般應用在一維反演之中,在二維、三維等高維反演中應用較少。
❷ 軟體設計中,N-S圖、PAD圖、程序流程圖、E-R圖,這四種圖分別表示什麼意思,有什麼區別
N-S圖:也叫盒圖,這種流程圖將全部演算法寫在一個矩形框內,而且在框內還可以包含其它的從屬於它的框。
PAD圖:也叫問題分析圖,用二維樹形結構的圖表示程序的控制流。
程序流程圖:也叫程序框圖,用統一規定的標准符號描述程序運行具體步驟的圖形表示。
E-R圖:也叫實體-聯系圖,用實體類型、屬性和聯系等方法,描述現實世界的概念模型。
1、表示方式的不同:
N-S圖:用矩形框,將全部演算法寫入;PAD圖:用二維樹形結構表示;
程序流程圖:用統一規定的標准符號表示;E-R圖:用實體類型、屬性和聯系等方法表示。
2、優點不同:
N-S圖:功能域明確,一眼就可以看出來;PAD圖:程序結構十分清晰;
程序流程圖:對控制流程的描繪很直觀;E-R圖:表達能力強,易於理解。
3、缺點不同:
N-S圖:不能任意轉移控制;PAD圖:不如流程圖易於執行;
程序流程圖:不易表示數據結構;E-R圖:數據和應用分離,ER僅分析數據及其聯系。
(2)sa演算法流程圖中英文擴展閱讀
N-S圖特點:
1)NS圖形象直觀,功能域明確,具有良好的可見度;
2)很容易確定局部和全局數據的作用域;
3)不可能任意轉移控制;
4)很容易表示嵌套關系及模塊的層次關系;
5)復雜度接近代碼本身,修改需要重畫整個圖;
6)它強制設計人員按SP方法進行思考並描述他的設計方案,因為除了表示幾種標准結構的符號之處,它不再提供其他描述手段,這就有效地保證了設計的質量,從而也保證了程序的質量。
❸ 1973年美國學者提出了一種新型流程圖:N-S流程圖。怎麼看啊
2.4.4 用N-S流程圖表示演算法
1973年美國學者提出了一種新型流程圖:N-S流程圖。
順序結構:
選擇結構:
循環結構:
2.4.5 用偽代碼表示演算法
偽代碼使用介於自然語言和計算機語言之間的文字和符號來描述演算法。
2.4.6 用計算機語言表示演算法
l 我們的任務是用計算機解題,就是用計算機實現演算法;
l 用計算機語言表示演算法必須嚴格遵循所用語言的語法規則。
【例2.20】求1×2×3×4×5用C語言表示。
main()
{int i,t;<br><br>t=1;<br><br>i=2;<br><br>while(i<=5)<br><br>{t=t*i;<br><br>i=i+1;<br><br>}
printf(「%d」,t);
}
【例2.21】求級數的值。
main()
{
int sigh=1;
floatdeno=2.0,sum=1.0,term;
while(deno<=100)
{ sigh= -sigh;
term= sigh/ deno;
sum=sum+term;
deno=deno+1;
}
printf(「%f」,sum);
}
❹ 演算法流程圖怎麼畫
演算法流程圖的畫法:
品牌型號:華碩。
系統版本:UX30K723A。
軟體版本:win7,億圖圖示1.221.2,網路瀏覽器1.2.222.1。
1、第一步:搜索使用「億圖圖示」,開始作圖。
❺ 移動的SA是什麼意思
智能天線(SA)作為一種可以抑制信號干擾、自動跟蹤以及數字波束調節等智能功能,被認為是未來移動通信的關鍵技術。
所謂「智能夭線」就是利用數字信號處理(DSP)技術,在空間產生指向性波束,使陣列主瓣對准用戶信號到達方向,旁瓣或零陷對准干擾信號到達方向,從而可以高效地利用移動用戶信號的空域信息最大化接收期望信號並刪除或抑制干擾信號的目的。智能天線的「天線」不僅是指將傳統的電磁波轉化為無線頻率信號,或反之將無線信號轉化為電磁波的器件,這在智能天線中稱為感測器件.此外,還包括合成模式網——由若干個線性時變濾波器組成.智能天線的「智能"體現在系統中的一個自適應處理器上,它能夠根據得到的信號對天線輸出進行加權處理,使整個鏈路性能達到最優化.由下圖所示的智能天線組成可看出,當系統處於接收狀態時,由各個天線單元接收到的信號,首先經過射頻單元進行放大和下變頻等處理後,再進行A/D變換,送入自適應信號處理器中與一組權值進行加權處理,合成後一路得到輸出信號;另一路生成誤差信號,並用它在某個選定的准則下按照一定的演算法控制自適應信號處理器進行權值的更新、完成自適應信號處理。
❻ 流程圖英語
流程圖英語如下:
[詞典] tree; flow chart; flow-process diagram; flowsheet。
流程圖(Flowchart):使用圖形表示演算法的思路是一種極好的方法,因為千言萬語不如一張圖。流程圖在匯編語言和早期的BASIC語言環境中得到應用。相關的還有一種PAD圖,對PASCAL或C語言都極適用。
功能
以特定的圖形符號加上說明,表示演算法的圖,稱為流程圖或框圖。
流程圖是流經一個系統的信息流、觀點流或部件流的圖形代表。在企業中,流程圖主要用來說明某一過程。這種過程既可以是生產線上的工藝流程,也可以是完成一項任務必需的管理過程。
例如,一張流程圖能夠成為解釋某個零件的製造工序,甚至組織決策制定程序的方式之一。這些過程的各個階段均用圖形塊表示,不同圖形塊之間以箭頭相連,代表它們在系統內的流動方向。
下一步何去何從,要取決於上一步的結果,典型做法是用「是」或「否」的邏輯分支加以判斷。
流程圖是揭示和掌握封閉系統運動狀況的有效方式。作為診斷工具,它能夠輔助決策制定,讓管理者清楚地知道,問題可能出在什麼地方,從而確定出可供選擇的行動方案。
流程圖有時也稱作輸入-輸出圖。該圖直觀地描述一個工作過程的具體步驟。流程圖對准確了解事情是如何進行的,以及決定應如何改進過程極有幫助。這一方法可以用於整個企業,以便直觀地跟蹤和圖解企業的運作方式。
流程圖使用一些標准符號代表某些類型的動作,如決策用菱形框表示,具體活動用方框表示。但比這些符號規定更重要的,是必須清楚地描述工作過程的順序。流程圖也可用於設計改進工作過程,具體做法是先畫出事情應該怎麼做,再將其與實際情況進行比較。
❼ 對稱加密演算法的工作原理、作用及其流程圖
對稱加密的核心——通信雙方共享一個密鑰
通信過程:
A有明文m,使用加密演算法E,密鑰key,生成密文c=E(key,m);
B收到密文c,使用解密演算法D,密鑰key,得到明文m=D(key,c);
比喻:
對稱加密是最直觀,也是歷史最久遠的加密手段,類似於加鎖和解鎖,只不過鑰匙的個數非常多(~~2^100),一個人窮其一生也試不完所有可能的鑰匙。
❽ 簡述純aloha演算法和時隙aloha演算法的基本原理和它們之間的區別
做過筆記,不過只能記起一些,而且可能有錯,我只能說說我的記憶,我的筆記字草你看不懂,僅供參考。
純ALOHA(PA),時隙ALOHA(SA)。
SA我的理解是PA的升級版。
PA:就是一堆設備發送自己的數據包,路經閱讀器的磁場區域,然後需要發送信息給閱讀器,若兩個設備同時發消息給閱讀器,說明產生了碰撞(沖突,我統一寫碰撞),碰撞後怎麼辦,見他們停止並延時發送。若一個數據包完全發送則稱為發送成功,若有多個,則稱為碰撞,碰撞分兩種,部分碰撞(兩個碰撞數據包發送和結束時間不同)和完全碰撞(兩個碰撞數據包發送和結束時間相同)。
其吞吐率是S=GP,S是吞吐率,G是載荷,P是成功發送率,PA的P取值為e的-2G次方。
SA:和PA差不多,但是多了一個時隙,可以理解為時鍾周期,白話就是多長時間一個周期,5us一個周期,10us一個周期之類的,在這個周期的開始才能發送數據包,若兩個設備同時發送,同樣的停止並延時,這里要說一下這個多久一周期(同步時鍾)是閱讀器統一控制的。這樣的情況若發生碰撞,必定是完全碰撞,沒有部分碰撞,否則就是成功發送。
SA的吞吐率S=GP,這里SA的P取值e的-G次方,這里兩個P不同記得別搞混了。
SA也有缺點,就是雖然吞吐率隨數據包量漲的很高,但是跌得賊快。
https://m..com/sf_bk/item/%E6%97%B6%E9%9A%99ALOHA/9189645?fr=aladdin&ms=1&rid=10597168802908481753
網路的這個已經說得很詳細了,不過不親民,不過圖片是非常好理解的,建議看圖片,對比我說的
❾ 游戲攻擊判定的三種模式
轉自:http://www.gameres.com/677620.html
攻擊判定流程幾乎是所有包含戰斗玩法的游戲都無法繞過的一塊內容,常見的攻擊判定流程有瀑布演算法、圓桌演算法以及混合演算法三種。本文簡述了這三種判定流程的特徵,以實例對比分析了瀑布演算法與圓桌演算法各自的優點,以期為後續其他戰斗數值設計內容的論述提供一定的基礎。
攻擊判定流程概述
自此開始正文內容的敘述——讓我們直接代入一個實例:
在一款游戲中,攻擊方有命中率和暴擊率兩個攻擊屬性,而防守方有閃避率、招架率和格擋率三個防禦屬性。於是相應的,一次攻擊有可能產生6種判定結果:未命中、普通命中、閃避、招架、格擋和暴擊。當採用不同的判定流程進行攻擊結算時,6種判定結果出現的頻率會截然不同。
1. 瀑布演算法
顧名思義,在瀑布演算法中,各事件的判定順序如同瀑布一般自上而下。如果「水流」在某個位置被截斷,則後面的流程都將不再繼續進行。據我所知,瀑布演算法是大多數游戲所採用的攻擊判定演算法。
上述實例若採用瀑布演算法,則會以如下方式進行判定:
先判定攻方是否命中
再判定是否被守方閃避
再判定是否被守方招架
再判斷是否被守方格擋
最後判定該次攻擊是否為暴擊
瀑布演算法流程圖
由此我們可以得出:
瀑布演算法特徵1:多次擲骰,一次擲骰只判定單個事件的發生與否
瀑布演算法特徵2:後置判定依賴於前置判定的通過
註:有的游戲會將命中和閃避合並在一次擲骰中判定,這意味著將攻方命中率與守方閃避率合並計算出實際擊中概率後再進行擲骰判定,仍是瀑布演算法
我們再代入一些具體的數值,設攻守雙方角色的面板屬性如下:
攻方命中率=90%
攻方暴擊率=25%
守方閃避率=20%
守方招架率=15%
守方格擋率=30%
按照上述的流程判定,6種判定結果將會按如下的概率分布:
實際未命中概率=1-命中率=1-90%=10%
實際閃避概率=命中率*閃避率=90%*20%=18%
實際招架概率=命中率*(1-閃避率)*招架率=90%*(1-20%)*15%=10.8%
實際格擋概率=命中率*(1-閃避率)*(1-招架率)*格擋率=90%*(1-20%)*(1-15%)*30%=18.36%
實際暴擊概率=命中率*(1-閃避率)*(1-招架率)*(1-格擋率)*暴擊率=90%*(1-20%)*(1-15%)*(1-30%)*25%=10.71%
實際普通命中概率=命中率*(1-閃避率)*(1-招架率)*(1-格擋率)*(1-暴擊率)=90%*(1-20%)*(1-15%)*(1-30%)*(1-25%)=32.13%
瀑布演算法的判定結果分布
由此我們可以得出:
l 瀑布演算法特徵3:各事件出現的概率符合經典的概率計算方法
l 瀑布演算法特徵4:擲骰輪次越偏後的屬性衰減程度越大,但不會出現無效的屬性
2.圓桌演算法
將所有可能出現的事件集合抽象成一個圓桌桌面,便是圓桌演算法這一稱呼的由來。圓桌演算法的實質,是將所有可能發生的事件狀態按優先順序依次放上桌面,直至所有事件被放完或桌面被填滿。圓桌演算法正是史詩級巨作魔獸世界中所採用的演算法。據筆者了解,使用該演算法的游戲並不多見,但即便僅魔獸世界這一款,已足以使這種演算法成為永恆的經典~
上述實例若採用圓桌演算法,則會用一次擲骰判定該次攻擊的結果。
圓桌演算法流程圖
圓桌演算法的操作步驟可以歸納為:
(1)攻方角色的命中率決定圓桌桌面的大小
(2)將各個事件狀態按優先順序依次放上桌面,直至所有的事件均放置完或桌面被填滿
(3)若桌面還未填滿,則用普通命中填滿空桌面
將先前設定的數值代入,6種判定結果將會按如下的概率分布:
實際未命中概率=10%
實際閃避概率=20%
實際招架概率=15%
實際格擋概率=30%
實際暴擊概率=25%
實際普通命中概率=90%-實際閃避概率-實際招架概率-實際格擋概率-實際暴擊概率=90%-20%-15%-30%-25%=0%
註:在上述計算中,優先順序按如下排序:閃避>招架>格擋>暴擊>普通命中
圓桌演算法的判定結果分布
可以看出,由於普通命中的優先順序最低,所以它被完全擠出了桌面。這意味著,若攻守雙方以此數值模型進行對決,則攻擊方的攻擊結果中將不存在普通命中。
由此我們可以得出:
圓桌演算法特徵1:一次擲骰即得出該次攻擊的判定結果
圓桌演算法特徵2:事件有優先順序,圓桌放滿後優先順序低的事件將被擠出桌面。這意味著那部分溢出的屬性將不再生效
圓桌演算法特徵3:圓桌內的各事件出現概率不會衰減,只要優先順序低的屬性沒有被擠出圓桌,各種事件的實際發生概率就與面板屬性數值吻合
3. 混合演算法
這是一種先判定攻方事件,再判定守方事件的判定流程。筆者曾在一篇帖子中看到過這樣判定流程,不確定是否有實際的游戲應用,故僅在此做一些簡單的理論分析。
混合演算法在單方事件的判定中採用圓桌演算法,即:
攻方判定結果:普通命中OR未命中OR暴擊
守方判定結果:閃避OR招架OR格擋OR被命中
混合演算法流程圖
註:上面這個圖僅作示意之用,從流程圖的角度來看可能不太嚴謹
將先前設定的數值代入,6種判定結果將會按如下的概率分布:
實際未命中概率=10%
實際閃避概率=攻方命中率*閃避率=90%*20%=18%
實際招架概率=攻方命中率*招架率=90%*15%=13.5%
實際格擋概率=攻方命中率*格擋率=90%*30%=27%
實際暴擊概率=攻方暴擊率*敵方被命中概率=25%*(1-20%-15%-30%)=8.75%
實際普通命中概率=攻方普通命中概率*敵方被命中概率=(90%-25%)*(1-20%-15%-30%)=22.75%
混合演算法的判定結果分布
由此我們可以得出:
混合演算法特徵1:先判定攻方事件,再判定守方事件,共進行兩次擲骰
混合演算法特徵2:先在單方事件的判定中採用圓桌演算法,再用瀑布演算法串聯攻守雙方事件
混合演算法特徵3:會產生並發動作,例如暴擊被閃避等
註:這也正是實際暴擊率較低原因所在
瀑布演算法與圓桌演算法的特性對比
在上一塊內容的鋪墊之下,我們不妨繼續以魔獸世界中的攻擊判定流程設計實例作為切入點,對比分析一下圓桌演算法與瀑布演算法各自的特性。
(1)面板屬性傳遞信息的直觀性
瀑布:由於各屬性在判定流程上的生效時間有先後之分,所以各屬性的實際效用與面板顯示的不符。
圓桌:由於屬性的判定沒有先後之分,只要沒有屬性被擠出圓桌,則所有屬性的實際效用與面板顯示的相當。
這里可以看出圓桌演算法的優點:
屬性的實際效用與面板顯示相符顯然更易於普通玩家的理解,便於玩家掌握自身的戰力情況。
(2)屬性的價值
瀑布:擲骰輪次越偏後的屬性衰減程度越大,但所有的屬性均會生效。
圓桌:只要沒有屬性被擠出圓桌,則不存在屬性效用的衰減。
這里可以看出圓桌演算法的優點:
由於不存在判定流程上的先後,所以各屬性的實際價值會比較接近,一般不會出現玩家堆了某個判定流程靠後的屬性結果很廢的情況。
同樣也可以看出其缺點:
一旦有屬性溢出,則該部分屬性的效用為0,完全沒有價值。
(3)相同面板數值下的生存能力
圓桌:在面板數值相同的情況下,魔獸世界用圓桌演算法大大提高了坦克角色的生存能力,使得他們可以應對來自首領怪的超高攻擊,匹配大型團隊副本的玩法設計。
瀑布演算法下,免傷概率=18%+10.8%+18.36%=47.16%
圓桌演算法下,免傷概率=20%+15%+30%=65%
傳統的概率為相乘關系,圓桌為相加關系,後者的概率總和要大的多
並且,當防禦職業將三維堆至一個閾值(70%)後,配合技能可達100%的免傷覆蓋,將命中和暴擊全部擠出桌面,從而衍生出特定的玩法(70級年代伊利丹的剪切技能)。
瀑布:相同的面板數值在瀑布演算法的框架下,免傷概率相較於圓桌演算法要低得多。換言之,角色達到相同的有效生命值,所需的免傷屬性要高得多。
這里可以看出:
在圓桌演算法的框架之下,屬性投放若是脫離了控制超過了閾值,將對平衡性產生較大的沖擊(70級的盜賊單刷格魯爾——當然在暴雪光環的作用下,玩家會認為這是精妙的設計~)。
在國產游戲收入導向的大環境下,設計者是否能頂住收入壓力,嚴守屬性投放的極值不越界,是值得慎思的問題。採用瀑布演算法,能有更大的數值空間用於能力投放,更為適合現階段的市場環境。
(4)運算量
瀑布:多次擲骰
圓桌:單次擲骰
顯而易見:
擲骰次數越多,運算量越大。圓桌相較於瀑布,有著相對較小的運算量。簡單即是美。
註:除魔獸世界外,《冒險與挖礦》的技能施放也採用了圓桌演算法,大大簡化了技能施放的判定流程。可以想像一下,一次攻擊至多發動一個技能。而每一次攻擊,一個隊伍中有幾十個角色的技能施放需要判定,如果採用瀑布演算法,將產生多大的運算量。
思考與總結
對戰斗數值的研究,應該基於理論推導而歸於實踐應用。畢竟游戲數值設計不是做數學研究,其本質應是一種體驗設計。最後希望交流的是筆者個人對於這兩種演算法的一些理解。
(1)不同的攻擊判定流程會向玩家傳達不同的戰斗感受
究其本質,不同的攻擊判定流程,影響著一場戰斗中的各種攻擊判定結果將以何種概率分布出現。
假設在一款游戲中,閃避率的投放上限是30%,暴擊率的投放上限是40%,命中率的投放上限是100%。瀑布演算法下,出現閃避、暴擊和普通命中的概率是30%、28%和42%;圓桌演算法下,則為30%、40%和30%。這兩種不同的概率分布,必然會帶給玩家不同的戰斗體驗,但在缺少其他條件的情況下,並不能判斷孰優孰劣。
使戰斗體驗匹配游戲的核心玩法,使屬性投放的極限值能滿足游戲的商業化需要,是設計攻擊判定流程時首先要考慮的。
註:甚至於部分競技游戲強調公平性,將暴擊做成了偽隨機。
使用瀑布演算法,則不應該設計種類繁多的事件狀態
若是仿照魔獸世界的做法設計一連串的事件狀態(未命中、閃避、招架、格擋、暴擊、普通命中、偏斜、碾壓),非但運算繁雜,而且後置判定的屬性衰減幅度較大,效果極不明顯。這種隱晦的設計將不易傳達,同時還會影響玩家的游戲感受(某個判定流程靠後的屬性堆得很高結果卻沒用)。
使用圓桌演算法,則應該嚴守屬性投放的上限,防止平衡崩壞的情況發生
需要澄清的是,並不是說使用瀑布演算法就可以無限投放數值,而是說,相較於瀑布演算法,圓桌演算法的屬性投放上限會低很多(免傷概率的相加與相乘)
(2)不同的攻擊判定流程將影響有效生命EHP和有效攻擊EDPS的表達式
幾乎每個數值策劃都會將角色的屬性轉化為EHP和EDPS以衡量其的戰斗能力,但曾見過不少人對所有的游戲都用統一的EHP、EDPS表達式進行分析模擬。這種偏差較大的模擬方式必然會影響體驗設計的精準性。在不同的攻擊判定流程之下,EHP與EDPS有著截然不同的表達式,舉例說明如下。
瀑布演算法下:
若命中閃避分兩次判定:
EHP=HP/(1-免傷率)/(1-閃避率)/(1-招架率)
EDPS=DPS*命中率*[1+暴擊率*(暴擊傷害倍率-1)]
若命中閃避合並判定:
EHP=HP/(1-免傷率)/(命中率-閃避率)/(1-招架率)
EDPS=DPS*(1+暴擊率*(暴擊傷害倍率-1))
圓桌演算法下:
EHP=HP/(1-免傷率)/(1-閃避率-招架率)
EDPS=DPS*[命中率-敵方閃避率-敵方招架率+暴擊率*(暴擊傷害倍率-1)]
註:閃避、招架>暴擊>普通命中,且各狀態發生概率之和未超過圓桌大小
混合演算法下:
EHP=HP/(1-免傷率)/(1-閃避率-招架率)
EDPS=DPS*[命中率+暴擊率*(暴擊傷害倍率-1)]
可能有人會覺得:模擬得這么准又有什麼卵用,數值平衡最後還不是靠調?誠然,在數值設計領域,確實有名言曰:數值平衡是調出來的。但在筆者看來,調節應該建立在正確的理論推導的基礎之上。依靠調節來掩蓋數值模型的錯誤設計,是本末倒置的行為。即便達到了所謂的平衡,也不過是扭曲的平衡,會為後續版本的迭代埋下隱患。
寫在最後
市面上的大多數游戲,都不會設計復雜繁多的攻擊事件,且基本採用瀑布演算法。如此看來,攻擊判定流程的設計十分簡單。那麼為什麼要大費周章地將簡單問題復雜化呢?
愛因斯坦曾說過:Everythingmust be made as simple as possible, but not one bit simpler——凡事應該力求簡單,但不能過於簡單。從了解一種數值設計方法到理解如此設計的目的,從模仿成功游戲的數值設計到理解其設計的內在意義,這是每個數值策劃成長的必經之路。
從全盤照搬一種數值體繫到能夠融會貫通並根據實際情況靈活運用,這是一條並不好走的路。知其然,也應知其所以然——這是一個入行一年有餘的新人的一點感悟。
免責申明:
1.筆者無法保證本文所用詞彙的普適性,能力所限,請多包涵~
2.不保證文中魔獸世界實例中的設定均與原作完全相符。但即便不相符,也不會影響圓桌理論的推