層次分析法(Analytic Hierarchy Process,簡稱AHP)主要是對於定性的決策問題進行定量化分析的方法。舉個例子,在日常生活中,我們經常需要進行感性的判斷,比如報高考志願,感覺清華北大都很好,到底要報哪個;再比如去市場買菜,到底是買青椒做青椒炒雞蛋,還是買黃瓜做黃瓜炒雞蛋;再比如想去出遊,到底是去公園A還是公園B。上面提到的這些問題,都是決策,也叫做評價類問題,最終的目的就是要評價到底哪個更好。這個方法在數學建模比賽,比如美賽等比賽中有時會用到,另外對日常的生活也有一定的指導。
那麼如何用數學的評價體系去解決這類看似非常感性的問題呢,這就誕生了我們今天要講的層次分析法。這裡我們從淺入深對於層次分析法進行一個講解。
這裡我們舉一個例子讓大家大致的了解層次分析法的基本原理。假如,小明想買一瓶飲料喝,他在糾結到底是買可樂好,還是雪碧好,還是匯源果汁,他非常的糾結,於是想建個模型來分析到底買哪種飲料好。
為了實現這個評價,首先我們要確定評價的指標,比如這裡我們設定三種指標:飲料的口味,飲料的價格和飲料健康程度,那麼最直觀的量化方法就是給各個因素一個權重,然後給各個飲料進行打分,如下表:
表格中相同顏色的區域加和需要為1,這是為了標準化。所以我們來看一下這個表格,在評價指標方面,小明很注重健康因為給了健康0.5的權重,其次是口味0.3,最後是價格0.2;具體的在口味方面,小明覺得可樂和雪碧差不多(0.35),果汁稍微差一點是0.3 以此類推,小明就只做了這張表格,為了計算每種飲料的得分,我們只需要把備選方案的權重乘對應的評價指標的權重並且加和即可,也就是:
可樂的最終得分是0.35×0.3+0.4×0.2+0.1×0.5 = 0.1005;
雪碧的最終得分是 0.35×0.3+0.4×0.2+0.2×0.5 = 0.1505;
匯源果汁的最終得分是 0.3×0.3+0.2×0.2+0.7×0.5 = 0.379;
通過比大小我們就看得出來匯源果汁的最終得分最高,所以小明應該選擇匯源果汁。
回顧一下,為了量化的評價,我們需要確定評價指標,和備選方案兩個重要的因素,接著分配權重(記得加和為1),最終通過乘法然後加和的方式得到最終的量化得分,從而做出最終的評價。
層級分析法就是簡單的編造幾個權重然後進行抉擇麼?當然不是,如何客觀合理的
設定表格中的權重才是重中之重,因此,我們這裡介紹如何構造判斷矩陣。
在現實問題中,往往存在很多個評價指標,讓小明從飲料的口味,價格,健康,瓶蓋能不能兌獎,瓶子是不是好看,自己是不是匯源果汁的代言人……等很多評價指標中給出合理的權重是一個非常困難的事情,也許小明現在給出的權重和一會兒給出的權重就完全不同,所以,為了簡化思維過程,我們首先進行評價指標的兩兩比較,再將比較結果匯總成最終的權重。為了量化兩兩比較的結果,我們要祭出一個評價體系表格。說白了,就是在A和B兩者比較中劃分了一個1到9的重要等級。
舉個例子,假如說飲料的健康性(A)和口味(B)相比,健康要明顯重要,則我們就可以說A比B的權重是5。之後我們開始構建我們的判斷矩陣。
上述的表格就是一個判斷矩陣,我們可以看到這個判斷矩陣有幾個特點,對角線都為1,而且對角線對稱的元素相乘都為1,這樣的矩陣也被稱為正互反矩陣。
為了更加數學的描述,我們設定矩陣的元素定義為a_ij代表了與j相比i的重要性,其中i表示行,j表示列, 其中a_ij>0而且a_ij×a_ji=1即對稱元素相乘為1。當i=j時,也就是元素在對角線上時,元素為1。另外理想的情況下要滿足a_ij=a_ik×a_kj 這個理想的條件我們在以後說明在構造判斷矩陣的過程中我們的元素是兩兩進行判斷的,所以是不是有可能出現問題呢?答案是有可能的,我們將表格中的元素進行一個更改,並用綠色標記出,隨後得到了如下的表格
我們看第一行,口味比價格重要(口味>價格)同時健康比口味重要(健康>口味),那麼按照正常的推理我們是不是應該得到健康比價格重要(健康>口味>價格)然而實際上表格中填寫的是價格比健康重要(價格>健康)這就出現了矛盾,也就是不一致現象。在理想情況下
所以說,在理想的情況下a_ij=a_ik×a_kj 。理想的情況下的判斷矩陣也有一些很好的性質,比如行列成比例,也就是說矩陣的秩為1,這裡不進行深入的討論。但是大部分的情況下,沒辦法達到如此的完美,那麼為了量化評價這種不一致現象的大小,就需要在運算權重之前進行一致性的檢驗。
回顧一下,為了更合理的得到層次分析法表格中的權重,我們引入了數值為1-9的標度體系,並且用兩兩比較的方法構建了一個判斷矩陣用於之後的權重計算,然而判斷矩陣存在不一致的問題,因此我們要從數值的角度評價不一致的大小,以此引出一致性的檢驗。
為了構建一個一致性的指標來驗證矩陣的一致性,學者們主要參考了線性代數中的兩個定理:
定理1:若A為一致性矩陣,則A的最大特徵值λ_max = n,其中n為矩陣A的階,A的其餘特徵值均為0。
定理2:n階正互反矩陣為一致性矩陣,若且唯若其最大特徵值λ_max = n,並且當正互反矩陣非一致時,必有λ_max > n。
從定理2的後半句中,我們可以看到,當一個正互反矩陣為非一致的矩陣的時候必有最大的特徵值大於矩陣的階,所以就想到可以使用最大特徵值和矩陣的階的差值來定義不一致性。這種想法看似複雜,其實超級樸素,比如時間不能倒流,所以出生後經過的年數就定義為你的年齡(年數-0)。
為此就定義了一致性指標CI,CI = (λ_max – n) / (n -1)。也就是說一致性指標CI越大,整個矩陣就越不一致,當CI是0的時候是完全理想的一直矩陣。
另外,為了得到計算出來的一致性指標到底是大還是小,我們又構建了平均隨機一致性指標RI,該指標的構建方法是隨機構建1000個正互反矩陣,並計算一致性指標的平均值。這裡的RI也就是說當矩陣的階數為n的時候隨機的平均一致性。這相當於一把尺子,告訴大家如果完全隨機的填寫這個判斷矩陣的結果的話,那麼你的一致性指標的期望就大概是這個RI的值。RI如何計算呢?查表就可以了。
當CI和RI的比值小於0.1的時候,我們認為這個矩陣是一致的,也就是說你矩陣的一致性指標,要比平均的瞎矇的一致性指標小一個數量級的時候,我們認為你就不是亂猜的了。這樣我們就構建了我們的一致性比例CR = CI/ RI。如果說一個正互反矩陣的一致性比例沒有小於0.1,那麼就需要調整矩陣以滿足要求。
舉個例子,我們以這個判斷矩陣為例,計算它是否滿足一致性的要求,第一步是計算其最大的特徵值,在matlab中,我們可以使用[x,y] = eig([1,3,1/5;1/3,1,1/6;5,6,1]);l_max = max(diag(y)); 計算得到,最後計算得到的最大特徵值為3.0940, 我們可以看到這個值滿足我們定理2中所說的要比矩陣的階數3大。CI = (l_max -3) / ( 3 -1 ); 計算CI值是0.0470。RI值通過查表得到是0.52,最後我們的RI值就是CI/RI = 0.0904 < 0.1 所以這個矩陣滿足一致性的要求。
回顧一下,這裡主要講如何驗證矩陣的一致性,為了驗證一致性構造了一致性比例CR,滿足CR小於0.1的就認為該判斷矩陣合理,不滿足的就要對判斷矩陣進行調整,得到合理的判斷矩陣,得到合理的判斷矩陣之後,就可以進行最初的,層次分析法的計算了。
得到了合理的判斷矩陣我們這裡就要計算每個影響因素所佔的權重,這裡主要有三種方法,算數平均法,幾何平均法,和特徵值法求權重
1.算數平均法求權重:(列歸一化,行平均值)
對每列進行歸一化處理,並且按照行求平均值就得到了我們最終的權重,這是最簡單的計算方法,具體的方法如下:step1:列歸一化,
最左上角的元素歸一化就是1/(1+1/3+5)=0.18;
第一行第二個元素的計算方法就是3/(3+1+6)=0.30以此類推;
Step2:行平均值:
口味:(0.18+0.30+0.17)/3 = 0.22;
價格:(0.06+0.10+0.14)/3 = 0.10;
健康:(0.88+0.60+0.83)/3 = 0.77;
正常權重的加和是1,這裡因為四捨五入的原因有一定的偏差。得到了權重之後,我們就可以寫入最開始的表格了
2.幾何平均法求權重:(行相乘開n次方,列歸一化)
這裡的計算方法就是將行的元素都相乘,然後再開對應的n次方,並對得到的n個數字進行歸一化即可。
3.特徵值法求權重:(最大特徵值的特徵向量歸一化)
特徵值法其實是應用最多的一個方法,就是求最大特徵值所對應的特徵向量並進行歸一化處理,matlab的計算方法如下:[x,y] = eig([1,3,1/5;1/3,1,1/6;5,6,1]);vec_max = x(:,1);得到的vec_max就是最大特徵值對應的特徵向量了。在本例中是0.26,0.12,0.96在對其進行歸一化的處理,得到0.19,0.09,0.72 這樣我們就用另一種方法求得了權重。
回顧一下這裡介紹了三種不同的方法對判斷矩陣的權重進行計算。除了這三個影響因素的判斷矩陣以外,具體的表格中可樂,雪碧和匯源果汁的判斷矩陣構造方法也是一樣的。只需要列出以下的表格,檢驗一致性並最終計算即可。
以上就是層次分析法的全部過程,有幾個小的問題需要進一步的講解,當判斷矩陣不滿足一致性的時候我們調整的方法就是重新梳理整個矩陣的各個元素,可以利用理想狀態下,行和列的元素成比例的性質進行微調。另外,層次分析法考慮的因素不能過多,不論是候選的種類,還是評價的指標都不能太多。除此之外,層次分析法主要是在主觀的評價體系中進行決策,或者滿意度的評價,當在一個問題中,已經有很多已知的數據的時候,這種方法就顯得不太好了。