正交表学习笔记

 

正交表入门

作者:laomai

发布时间: 2007/12/09

                     2011/12/11修改

地址:http://blog.csdn.net/laomai

第一章         正交表的概念

§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)如下所示:

记录号  A    B    C   D

1 :    1      1      1      1

2 :    1      2      2      2

3 :    1      3      3      3

4 :    2      1      2      3

5 :    2      2      1      4

6 :    3      1      3      2

7 :    3      3      2      1

8 :    0      2      3      1

9 :    0      3      1      2

10 :   0      0      1      3

11 :   0      0      2      4

12 :   0      0      3      4

可以看出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的项。要求填充之后同一因素的每个水平值的出现次数基本相等,最多相差一次。因此,填充的原则是:填充时优先选取本列中出现次数最少的水平值,如果次数一样,则选择编号最小的那个水平值。

得到最终的正交表为

      A      B     C     D

 1 :    1      1      1      1

2 :    1      2      2      2

3 :    1      3      3      3

4 :    2      1      2      3

5 :    2      2      1      4

6 :    3      1      3      2

7 :    3      3      2      1

8 :    2      2      3      1

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.

     A     B     C    D

1 :    1      1      1      1

2 :    1      1      2      2

3 :    1      1      3      3

4 :    1      2      1      2

5 :    1      2      2      1

6 :    1      2      3      4

7 :    1      3      1      3

8 :    1      3      2      4

9 :    1      3      3      1

10 :   2      1      1      2

11 :   2      1      2      1

12 :   2      1      3      4

13 :   2      2      1      1

14 :   2      2      2      2

15 :   2      2      3      3

16 :   2      3      1      4

17 :   2      3      2      3

18 :   2      3      3      2

19 :   3      1      1      3

20 :   3      1      2      4

21 :   3      1      3      1

22 :   3      2      1      4

23 :   3      2      2      3

24 :   3      2      3      2

25 :   3      3      1      1

26 :   3      3      2      2

27 :   3      3      3      3

28 :   0      1      1      4

29 :   0      1      2      3

30 :   0      1      3      2

31 :   0      2      1      3

32 :   0      2      2      4

33 :   0      2      3      1

34 :   0      3      1      2

35 :   0      3      2      1

36 :   0      3      3      4

读者可自行填充其中的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列中的每一列,每个水平值出现的次数相等。

你可能感兴趣的:(c,算法,testing,orthogonal)