數學建模學習筆記之評價問題層次分析法

數學建模學習筆記之評價問題層次分析法

  1. 我們評價的目標是什麼?

  2. 我們爲了達到目標有哪幾種可選的方案

  3. 評價的準則或者指標是什麼?(我們根據什麼來評價好壞)

層次分析法(AHP)

模型建立

層次分析法比較簡單,是一個入門級的評價算法模型,模型的建立過程如下。

  1. 建立層次結構模型

    層次一般分爲三種:

    最高層,準則層和方案層

    一般而言層次結構模型用軟件億圖圖示畫出(強烈建議使用9.0版本,因爲9.2,9.4版本破解存在bug,這軟件安裝還用了我挺久)

    層次結構模型

  2. 構造出判斷矩陣

    通俗點講,判斷矩陣是在準則層之間進行兩兩比較建立的比較矩陣。

    需要了解以下概念:

    成對比較矩陣:比較n個因子對於某因素的影響,每次取兩個因子進行比較,全部比較結果用矩陣表示。

    標度:一般而言比較結果分爲1~9個層次,也可成爲標度,用來度量兩個比較因子的關係。

    標度 含義
    1 相同重要/滿意度
    3 稍重要
    5 明顯重要
    7 強烈重要
    9 極端重要
    2、4、6、8 上述的中間部分

    其實就是一個量化過程,同理有1/2、1/3表示稍微不重要、不明顯重要等。

    那麼比較旅遊地下面五個影響因子我們可以得到成對比較矩陣(一般來說自己有根據的判斷,此處只爲示例):

    選擇旅遊地135461/314671/51/411/531/41/65171/61/41/31/71 \begin{array}{cc} \begin{array}{c|cccc} \text{選擇旅遊地}&景色&費用&居住&飲食&旅途\\ \hline 景色&1&3&5&4&6\\ 費用&1/3&1&4&6&7\\ 居住&1/5&1/4&1&1/5&3\\ 飲食&1/4&1/6&5&1&7\\ 旅遊&1/6&1/4&1/3&1/7&1\\ \end{array} \end {array}

    這是不是表示了五個因子之間的重要關係?像不像權重?

    那麼也應該有下面的矩陣來進行往下一層的判斷:

    景色費用 \begin{array}{cc} \begin{array}{c|cccc} \text{景色}&武漢&南京&上海\\ \hline 武漢\\ 南京\\ 上海\\ \end{array} & \begin{array}{c|cccc} \text{費用}&武漢&南京&上海\\ \hline 武漢\\ 南京\\ 上海\\ \end{array} \end {array}

    現在應該大致可以判斷出:構造判斷矩陣本質上來講就是在一層一層對因子進行加權的操作

  3. 對判斷矩陣進行一致性檢驗

    概念理解

    正互反矩陣:我們構造的矩陣比較矩陣都是,特點是斜對稱相應的值互爲倒數

    一致矩陣:必爲正互反矩陣、任意兩行成比例、秩爲1、只有最大特徵值等於矩陣的階、因此只有一個相應的特徵向量

    定理n 階正互反矩陣 A 爲一致矩陣當且僅當其最大特徵根λ max = n ,且當正

    互反矩陣 A 非一致時,必有λ max > n

    當正互反矩陣的非一致性越大時,所得到的特徵向量就越不能反應真實情況,也就是可信度較低。因此我們要對於建立的比較矩陣進行一致性檢驗,檢驗步驟如下:

    1. 計算一致性指標CI
      CI=λmaxnn1 CI=\frac{\lambda_{max}-n}{n-1}

    2. 查找相應的平均隨機一致性指標 RI,RI相當於官方給的標準一致性數值

    3. 計算移植性比例CR
      CR=CICR CR=\frac{CI}{CR}
      當CR<0.10是被認爲可以接受,不然就回去修改比較矩陣吧,儘量往一致性矩陣靠攏

  4. 計算權值得出判斷結果

    我們已經有了判斷矩陣和它的特徵值,理論上來講就可以一步步相乘來計算出最底層相對於最高層的權值了,事實上也正是如此。一般而言是建立一個層次總排序來表示比較好:
    準則 \begin{array}{cc|ccccc|c} \hline \text{準則}&amp;&amp;景色&amp;費用&amp;居住&amp;飲食&amp;旅途&amp;總排序\\ \hline 準則層權值&amp;&amp;**&amp;**&amp;**&amp;**&amp;**&amp;\\ \hline 方|&amp;武漢&amp;**&amp;**&amp;**&amp;**&amp;**&amp;武漢最終權值\\ 案|&amp;南京&amp;**&amp;**&amp;**&amp;**&amp;**&amp;南京最終權值\\ 層|&amp;上海&amp;**&amp;**&amp;**&amp;**&amp;**&amp;上海最終權值\\ \hline \end{array}

    通過最終權值的比較就可以得出最終評價結果。

    代碼實現

    disp('請輸入判斷矩陣A')
    A=input('A=');
    [n,n] = size(A)
    %歸一化,按行相加再除階數
    Sum_A = sum(A);
    SUM_A = repmat(Sum_A,n,1);
    Arm_A = A ./ SUM_A;%到此按列歸一化結束
    disp('算術平均法求權重的結果爲:');
    disp(sum(Arm_A,2)./n)
    
    %行相乘、再開方、最後歸一化
    Prduct_A = prod(A,2);
    Prduct_n_A = Prduct_A .^ (1/n);
    disp('幾何平均法求權重的結果爲:');
    disp(Prduct_n_A ./ sum(Prduct_n_A))
    
    %計算最大特徵值對應特徵向量
    [V,D] = eig(A);
    Max_eig = max(max(D));
    [r,c]=find(D == Max_eig , 1);
    disp('特徵值法求權重的結果爲:');
    disp( V(:,c) ./ sum(V(:,c)) )
    
    %選取特徵值法來做一致性檢驗
    CI = (Max_eig - n) / (n-1);
    RI=[0 0.0001 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];  %注意哦,這裏的RI最多支持 n = 15
    % 這裏n=2時,一定是一致矩陣,所以CI = 0,我們爲了避免分母爲0,將這裏的第二個元素改爲了很接近0的正數
    CR=CI/RI(n);
    disp('一致性指標CI=');disp(CI);
    disp('一致性比例CR=');disp(CR);
    if CR<0.10
        disp('因爲CR<0.10,所以該判斷矩陣A的一致性可以接受!');
    else
        disp('注意:CR >= 0.10,因此該判斷矩陣A需要進行修改!');
    end
    
    
    

    總結

    層次分析法屬於比較簡單的評價算法,所需步驟不多,而且由於很多判斷都是自己主觀臆斷。並不推薦在比賽中使用,最多使用該算法對建模中的一小問回答。計算時,最好把三種方法計算結果都列寫出來,再加一句考慮了模型適用性等。

    整理了一點資料:https://download.csdn.net/download/yuanjiteng/11516969

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章