1. 程式人生 > >正交表學習筆記

正交表學習筆記

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                 

正交表入門

作者:laomai

釋出時間: 2007/12/09

                     2011/12/11修改

第一章正交表的概念

§1-1引子

在科研和生產實踐中,人們往往要做許多次實驗來進行某項研究。實驗條件一般包括很多因素,當因素的值不同時,實驗的結果也不一樣。如果想把每個因素的每個值都要實驗一遍,總實驗數就等於各因素的值的個數的乘積,而這個數往往很大,超過了可接受的成本。

例如,假設某個實驗的結果由A,B,C,D四個因素的取值決定,每個因素都有10個不同的取值,那麼如果想把每個取值都考慮到的話,我們需要做

 10*10*10*10=10000次實驗。

為了減少實驗數目,我們必須選出那些最有代表性的例子。於是,就要用到了正交表法(Orthogonal Array Testing Strategy)

正交表是一種篩選實驗用例的方法。在介紹其具體內容前,我們先引入幾個基本概念。

因素個數Factors,以後在本文中用F代替,一個因素就對應著正交表中的一列

水平數Levels,以後簡寫為L。他的含義就是每個因素可取值的個數,注意這裡我們不關心每個具體的值是多少,關心的是其個數。

變數的具體取值我們稱做水平值,在與水平數不發生混淆的情況下,簡稱水平,用變數名+編號表示。比如,一個因素A可能有三個水平,則可記為A1,A2,A3.

強度Strength,以後簡寫為S:強度是構造正交表的一個最重要的指標,正交表的核心性質就是a:z在正交表中後S個因素的每個水平值要相互碰一次且只碰一次。b:任給兩條正交表中的記錄,它倆不存在完全相同的S列。c、正交表的記錄數等於最後S列的水平數的乘積。

強度具體取多少由實驗者決定.給定了強度S以後,最終的正交表記錄數就是最後S列的水平數的乘積。

次數(Runs):最後生成的正交表的記錄數,一條(行)記錄也就是一次實驗。

正交表的符號表示:先以字母L打頭,下標r表示記錄數,

括號中為具有相同水平數的因子數的項的連乘積。

Lr(Levelsfactors×Levelsfactors××Levelsfactors

)

給幾個具體例子,

設有3個因素A,B,C,每個因素的水平數均為3時,生成的正交表為L27(33)(取強度等於3的情況),記錄數27=3*3*3

設有5因素,每個因素的水平數分別2,2,2,3,3時,不同強度S的生成正交表分別為

s=2時,結果為L9(23×32),記錄數為最後兩個變數的水平數乘積3*3=9

s=3時,結果為L18(23×32),記錄數為最後三個變數的水平數乘積2*3*3=18。

§1-2手工構造正交表

看一個具體例子:設有4個變數A,B,C,D前三個變數的水平數為3,最後一個變數的水平數為4,那麼,根據不同的強度,可得到不同的正交表。

強度s=2時,得到的原始正交表L12(33×4)如下所示:

記錄號ABCD

1 :1111

2 :1222

3 :1333

4 :2123

5 :2214

6 :3132

7 :3321

8 :0231

9 :0312

10 :0013

11 :0024

12 :0034

可以看出C的每個水平值與D的每個水平值各碰一次且僅碰一次。而AB的每個水平出現的次數也很均勻。並且任何在相同位置的兩列組成的有序數對沒有重複值。

上面這個表的具體構造過程是:

1、首先要算出4個因素的所有水平值的笛卡爾積,也就是把所有因素的水平值都互相碰一遍,這樣一共是3*3*3*4=108條記錄。

我們用編號“1111”、“1112”、“1113”、“1114”、“1121”.....“3334”來代表這108條記錄。每一位上的數字代表該列因素所取的水平值。

2、現在從這128記錄中過濾出符合S維正交性的記錄(預先透漏。符合條件的記錄數要比12少,呵呵)。下面就是過濾的具體過程:

3、將第一條記錄“1111”寫到正交表中。

4、考察笛卡爾積中的第二條記錄“1112”,注意正交表的核心屬性之一就是:正交表的任意兩條記錄不能有S列完全相同。而1112的前兩列是"11",與第一條的記錄前兩列"11"重複,所以要把1112淘汰掉,同理,所有以"11"開頭的記錄都要被淘汰掉。

5、考慮以"12"開頭的第一條記錄"1211",這個記錄的最後兩列是"11",與第一列的最後兩列重複。也要被淘汰。

6、類似的,所有含有字串"11XX","1X1X","X11X","XX11","X1X1","1XX1"(X代表該列的任意水平值)的記錄都要被淘汰掉,因為他們都和第一行的記錄有2列是重複的。

7、經過上面的過濾,可以得到正交表的第二條記錄是"1222",這個字串的任何兩列都與第一行的"1111"的對應兩列不完全相同。

8、同樣的,正交表的第三條記錄要和前兩條記錄的任何兩列都沒有重複值,根據這個原則,"1223"(與第二條記錄的有相同的前兩列)、"1311"(與第一條記錄有相同的後兩列)等都要被淘汰掉。

第三條記錄應該是“1333”。第4條記錄到第7條記錄的選拔過程與之類似。

9、到記錄"3321"為止,我們從4因素笛卡爾積的108記錄裡得到了7條記錄符合正交性。

10、讀者可以自行驗證:從記錄"3322"起到"3334"止,再沒有符合正交性的記錄,而題意要求得到12條記錄,那麼剩下的5條記錄是怎麼得到的呢?請繼續往下看。

11、現在考慮後三個因素構成的笛卡爾積,這個笛卡爾積有3*3*4=36條記錄,用編號

“0111”到“0334”表示(注意這裡是考慮後三列,所以第一列用0填充了),現在繼續從這36條記錄中記錄選取符合S維正交性的記錄,那麼與前面的過程4-8類似,我們可以看到“0111”到“0224”都不符合正交性,而“0231”和正交表的前7條記錄沒有重複的2列,所以把"0231"作為第8條記錄,

12、請讀者自行驗證,過濾出了“0231”,"0312"兩條記錄後,後三列的笛卡爾積中再沒有正交性的記錄了。

13、現在遍歷後兩列組成的笛卡爾積,用編號"0011"到"0034"表示,在這個笛卡爾積的3*4=12條記錄中,恰好有3條記錄“0013”“0024”“0034”與前面各行都沒有重複的兩列。

至此,原始正交表的12條記錄全部構造完畢。

為了保持取值的均勻性,我們用因素的水平值迴圈填充為0的項。要求填充之後同一因素的每個水平值的出現次數基本相等,最多相差一次。因此,填充的原則是:填充時優先選取本列中出現次數最少的水平值,如果次數一樣,則選擇編號最小的那個水平值。

得到最終的正交表為

ABCD

1 :1111

2 :1222

3 :1333

4 :2123

5 :2214

6 :3132

7 :3321

8 :2231

9 :   3      3      1      2

10 :   1      1      1      3

11 :   2      2      2      4

12 :   3      3      3      4

紅色數字就是我們用水平值迴圈填充後的結果。

類似的我們可以得到強度為3的正交表L36(33×4)

記錄數為4*3*3=36.

ABCD

1 :1111

2 :1122

3 :1133

4 :1212

5 :1221

6 :1234

7 :1313

8 :1324

9 :1331

10 :2112

11 :2121

12 :2134

13 :2211

14 :2222

15 :2233

16 :2314

17 :2323

18 :2332

19 :3113

20 :3124

21 :3131

22 :3214

23 :3223

24 :3232

25 :3311

26 :3322

27 :3333

28 :0114

29 :0123

30 :0132

31 :0213

32 :0224

33 :0231

34 :0312

35 :0321

36 :0334

讀者可自行填充其中的0項,得到最後的結果

$1-3正交表的基本數學性質

設正交表的強度為S,則正交表有以下數學性質

1、正交性:從上面的構造過程中可以看出,正交性具體體現在:

在最後S列中,每列因素的一個水平值與其他列中的每個水平值相碰一次且只碰一次。換句話說,最後S列構成的子表是滿的。因此,正交表的記錄個數=最後S列的水平數的乘積。

在從正交表中任取S列,得到一個子集,該子集中沒有完全相同的記錄(即正交表任何兩條記錄都不能有完全相同的S列)。這是構造正交表的核心原則。

(3)構造正交表時,我們要依次遍歷:所有N列構成的笛卡爾積、右邊N-1列構成的笛卡爾積、右邊N-2列構成的笛卡爾積、一直遍歷到右邊S列構成的笛卡爾積,每次都要對笛卡爾積中的每條記錄進行檢查,看看它與正交表中的某條已有記錄是否有S列完全相同,是的話就淘汰掉。所以檢查的核心演算法是:

設X為笛卡爾積中的待檢查記錄,Y為正交表中的已有記錄。設定一個記數器C=0,

將X與Y按位比較,當X與Y的某列相等時,計數器加1.

當計數器C的值大於等於強度S時,X被淘汰;如果X與Y的各位均比較完後,C<S,則將X加入正交表中。

2、均勻性:每個因素的水平值在表中的出現的次數是基本均勻的,對最後S列中的每一列,每個水平值出現的次數相等。

            這裡寫圖片描述 你好! 這是你第一次使用 **Markdown編輯器** 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。

新的改變

我們對Markdown編輯器進行了一些功能拓展與語法支援,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫部落格:

  1. 全新的介面設計 ,將會帶來全新的寫作體驗;
  2. 在創作中心設定你喜愛的程式碼高亮樣式,Markdown 將程式碼片顯示選擇的高亮樣式 進行展示;
  3. 增加了 圖片拖拽 功能,你可以將本地的圖片直接拖拽到編輯區域直接展示;
  4. 全新的 KaTeX數學公式 語法;
  5. 增加了支援甘特圖的mermaid語法1 功能;
  6. 增加了 多螢幕編輯 Markdown文章功能;
  7. 增加了 焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設定 等功能,功能按鈕位於編輯區域與預覽區域中間;
  8. 增加了 檢查列表 功能。

功能快捷鍵

撤銷:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜體:Ctrl/Command + I 標題:Ctrl/Command + Shift + H 無序列表:Ctrl/Command + Shift + U 有序列表:Ctrl/Command + Shift + O 檢查列表:Ctrl/Command + Shift + C 插入程式碼:Ctrl/Command + Shift + K 插入連結:Ctrl/Command + Shift + L 插入圖片:Ctrl/Command + Shift + G

合理的建立標題,有助於目錄的生成

直接輸入1次#,並按下space後,將生成1級標題。 輸入2次#,並按下space後,將生成2級標題。 以此類推,我們支援6級標題。有助於使用TOC語法後生成一個完美的目錄。

如何改變文字的樣式

強調文字 強調文字

加粗文字 加粗文字

標記文字

刪除文字

引用文字

H2O is是液體。

210 運算結果是 1024.

插入連結與圖片

連結: link.

圖片: Alt

帶尺寸的圖片: Alt

當然,我們為了讓使用者更加便捷,我們增加了圖片拖拽功能。

如何插入一段漂亮的程式碼片

部落格設定頁面,選擇一款你喜歡的程式碼片高亮樣式,下面展示同樣高亮的 程式碼片.

// An highlighted block var foo = 'bar'; 

生成一個適合你的列表

  • 專案
    • 專案
      • 專案
  1. 專案1
  2. 專案2
  3. 專案3
  • 計劃任務
  • 完成任務

建立一個表格

一個簡單的表格是這麼建立的:

專案 Value
電腦 $1600
手機 $12
導管 $1

設定內容居中、居左、居右

使用:---------:居中 使用:----------居左 使用----------:居右

第一列 第二列 第三列
第一列文字居中 第二列文字居右 第三列文字居左

SmartyPants

SmartyPants將ASCII標點字元轉換為“智慧”印刷標點HTML實體。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

建立一個自定義列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何建立一個註腳

一個具有註腳的文字。2

註釋也是必不可少的

Markdown將文字轉換為 HTML

KaTeX數學公式

您可以使用渲染LaTeX數學表示式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通過尤拉積分

Γ(z)=0tz1etdt&ThinSpace;. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多關於的資訊 LaTeX 數學表示式here.

新的甘特圖功能,豐富你的文章

gantt
        dateFormat  YYYY-MM-DD
        title Adding GANTT diagram functionality to mermaid
        section 現有任務
        已完成               :done,    des1, 2014-01-06,2014-01-08
        進行中               :active,  des2, 2014-01-09, 3d
        計劃一               :         des3, after des2, 5d
        計劃二               :         des4, after des3, 5d
  • 關於 甘特圖 語法,參考 這兒,

UML 圖表

可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖::

張三李四王五你好!李四, 最近怎麼樣?你最近怎麼樣,王五?我很好,謝謝!我很好,謝謝!李四想了很長時間,文字太長了不適合放在一行.打量著王五...很好... 王五, 你怎麼樣?張三李四王五

這將產生一個流程圖。:

連結長方形圓角長方形菱形
  • 關於 Mermaid 語法,參考 這兒,

FLowchart流程圖

我們依舊會支援flowchart的流程圖:

  • 關於 Flowchart流程圖 語法,參考 這兒.

匯出與匯入

匯出

如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章匯出 ,生成一個.md檔案或者.html檔案進行本地儲存。

匯入

如果你想載入一篇你寫過的.md檔案或者.html檔案,在上方工具欄可以選擇匯入功能進行對應副檔名的檔案匯入, 繼續你的創作。