close

在第一篇簡單的了解亂數產生器的基本概念後,在此篇將更詳細的介紹LCG的四項作法之差異。


 


線性同餘法(LCGLinear Congruential Method):


目前被廣泛使用的亂數產生方式,是發展歷史最久的。


最早是在1951年由Lehmer所提出。


在線性同餘法裡,選擇一個很大的整數m,然後依下面的遞回方程式,創造出在0m-1間之一連串整數群。




以下皆為整數:


y0 :種子值(seed)


a :固定乘數(constant multiplier)


c  :增加量(increment)


m  :模數(modulus)



 


y0是初始值,稱為種子值(seed),其它的種子數yi是利用


依序產生出來,換言之就是自己產生的結果再拿來當種子數使用。


整個亂數列所產生的週期per(Ri),將在per(Ri)<=m的條件下。


利用線性同餘法,當m=16a=5c=3y0=7之週期:


線性同餘法範例:


參考下圖表格i=1~19yisol


由表格中可以看出y17=y1=6y18=y2=1y19=y3=8


i=171819i=123相比較之下可以發現yisol有重複性。


因此可以定義i=1~16為一週期。


Full period     0<=yi<=m-1


ac選擇適當則可呈現full period


 


要使LCG有全週期(full period),以避免隨機數快速重複。


acm數值影響隨機亂數的好壞。


LCG要有全週期,須滿足三個情況:


-mc互質


-x為質數,假如x可以除盡m,則q可以除盡a-1


-假如4可以除盡m,則4可以除盡a-1


 


依據c數值的不同,LCG可分為兩種格式:


-Mixed LCG


理論架構與LCG的原型相同,只是定義其中的c!=0


-Multiplicative LCG


理論架構與LCG的原型相同,只是定義其中的c=0


 


 



Mixed LCG:


1.    理論架構與LCG的原型相同,只是定義其中的c!=0


2.    假如要使Mixed LCG擁有全週期的特性,必須注重m值的挑選。假如m能夠是2的次方數,即m=2^i,最長的週期數則為P=m=2^i


3.    ca也有限制


甲、            cm必須是互質


乙、            a=1+4k,其中k為整數


4.    m=2^i主要目的是為了迎合電腦的資料儲存與處理結構,假如i夠大,即i>=31,則m>=2^31,在一般32bit的電腦處理器上,可利用整數溢位(over flow)的技巧計算,可省下許多時間。


5.    Kobayashi(1978)曾提出在i=31時,選擇a=314,159,269c=453,806,245,為一良好的隨機亂數產生器。


 


Multiplicative LCG:


1.  理論架構與LCG的原型相同,只是定義其中的c=0


2.  使用m=2^i的形式,最長的週期是m/4=2^i-2,為了達到這個最大的週期數,種子數(seed)必須是奇數,a也有特定形式,即a=3+8k或是a=5+8kk=0123…


 


Multiplicative LCG範例:


利用Multiplicative LCG法求a=13,m=64Y0=1,2,3,4(seed)之週期。


1.種子13的週期為16種子2的週期為8種子4的週期為4


2.最大週期為P=m/4=16


3.這個週期是由奇數種子獲得,非偶數種子。


為了得到最大週期,所使用的a值一定是要滿足5+8kk=0,1,2,3...之條件。





 


Prime Moduls Multiplicative LCG(PMMLCG):


1.由於Multiplicative LCG(c=0)這個結果達不到全週期的效果,因此,又有更進一步的研究。於是在c=0之下,又有人研發出另外一套ma的關係,而這也是目前最常被使用的PMMLCG(Prime Modulus Multiplicative LCG)




以下皆為整數:


y0 :種子值(seed)


a :固定乘數(constant multiplier)


c  :增加量(increment)


m  :模數(modulus)


0 <= yi <= m-1


 


2.  m為質數,則可得到最大周期數為m-1,但a必須有限制,找一整數k使(a^k)-1可以被m整除。


3.  m的研究上,若另m=(2^31)-1=2,147,483,647本身剛好就是一個質數,因此,許多的研究就不放在m的找尋,而放在a的找尋上。


4.目前有兩個a值為目前最廣泛被使用的,即a=16807a=630,360,016。這兩個值皆為m的質數,且已經被廣泛的測試,不論是在周期、統計特性上都有相當好的表現,且可以在任何電腦上順利的使用。而這也是目前最常被使用的亂數產生方法。


 


 


隨機亂數之測試:


隨機亂數特性:


均勻性(uniformity)、獨立性(independence)


為了要確認隨機亂數符合這兩個特性,有幾個測試的方法需要介紹。測試方法可分成兩類,一類測試是均勻性,另一類測試為獨立性。


-頻率測試(Frequency test)


-趨勢測試(Runs test)


-自相關測試(Autocorrelation test)


 


頻率測試(Frequency test):


1.  測試一個亂數產生器,最基本的測試為均勻性測試。


2.  Komogorov-Smirnovchi-square均可做為均勻性測試,兩種測試都是以虛無假設為樣本的分配與理論的分配是無異為基礎。


3.  Chi-square測試為例:


卡方測試(Chi-square test)使用的統計值為:


Oi代表第i個分類的數量


Ei代表著期望的遞i個分類數量


X0^2的分配接近自由度為n-1的卡方分配


 


已均勻分配為例,期望的第i個分類數量為:


N代表著所有的觀測值,每一個分類的間隔是相等的。


 


 


趨勢測試(Runs test):


1.  獨立性測試


2.  測試數值上升或下降的趨勢


3.  利用實際的值與理想值比較,也是用chi-square來比較。楢樹值上升或下降的趨勢可以判斷出各個數值之間是否具有獨立性。


4.  舉例說明,若數值不斷上升或不斷下降,或者數值連續上升後就下降、下降後就上升都代表此隨機亂數不具獨立性。


 


自相關測試(Autocorrelation test figure):


1.  獨立性測試


2.  主要是測試序列數直間的相關性或相依性


3.  例如下列序列數值:


仔細觀察第5、第10、第15(每隔5個亂數)的數值都相當大,此代表此組亂數已不具獨立性。


 


 


 


此篇資料參考源至清華大學工業工程與工程管理系電腦整合製造研究室 copyright 2001 林則孟



 


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jk3527101 的頭像
    jk3527101

    簡單也是另一種快樂

    jk3527101 發表在 痞客邦 留言(0) 人氣()