數學建模—層次分析法
相關概念
層次分析法主要解決評價類問題,比如,選擇那種方案更好,誰更優秀
評價類問題可用打分解決,將選擇條件分成不同的指標,權值和為一

同顏色的單元格合為1,表示某一因素所占的權重
層次分析法步驟
- 1.分析系統中各因素的關系,建立層次結構

使用層次分析法一定要放上面的這個圖到論文中哦
- 2.構造判斷矩陣
目標層—準則層

準則層—方案層

其中的資料自己填即可,但不要說是怎么來的
- 3.由判斷矩陣計算被比較元素對于該準則的相對權重,并要通過一致性檢驗
建議用三種方法來計算(在文章中寫為保證結果的穩健性,使用三種方法分別求權值,再根
- 4.計算各層元素對系統目標的合成權重,并排序
具體的步驟及細節
如何確定評價類問題
-
出現確定評價指標,形成評價體系等字樣
-
解決評價類問題,首先想三點
評價的目標是什么
為了達到目標有哪幾種方案
評價的準則或指標(背景材料,常識和網上搜索):去知網找+自己想...
如何確定權值
建立矩陣
使用判斷矩陣(正互反矩陣):對角線全為一的倒數對稱矩陣,每行和每列均為指標或是方案
其中一致性矩陣最為特殊,其特點:各行(各列之間成倍數關系)
一致性檢驗
在使用判斷矩陣求權值之前一定要進行一致性檢驗

權值的計算
-
算術平均法
將判斷矩陣按列歸一化,按行求和,再求平均
-
幾何平均法
將A的元素按照行相乘得到一個新的列向量,將新的向量的每個分量開n次方,對該列向量進行歸一化即可得到權重向量
-
特征值法(使用最多)
求出最大特征值以及對應的特征向量,對其特征向量做歸一化處理
一致矩陣計算權重
隨便選擇一列,來計算所占的比值(一定要歸一化處理)
判斷矩陣算權重
所有列都像一致矩陣進行計算,再平均
層次分析法的局限性
- 評價決策太多
- 決策層的資料已知
層次分析法的拓展
若方與準則的對應不是一一對應,只需將不對應的方案的權值設為0
Matlab代碼
此代碼來自清風,感謝
%% 先對判斷矩陣進行一致性檢驗,然后再計算權重,因為只有判斷矩陣通過了一致性檢驗,其權重才是有意義的,
%% 只有非一致矩陣的判斷矩陣才需要進行一致性檢驗,
%% 輸入判斷矩陣
clear;clc
disp('請輸入判斷矩陣A: ')
% A = input('判斷矩陣A=')
A =[1 1 4 1/3 3;
1 1 4 1/3 3;
1/4 1/4 1 1/3 1/2;
3 3 3 1 3;
1/3 1/3 2 1/3 1]
% matlab矩陣有兩種寫法,可以直接寫到一行:
% [1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1]
% 也可以寫成多行:
% 兩行之間以分號結尾(最后一行的分號可加可不加),同行元素之間以空格(或者逗號)分開,
%% 方法1:算術平均法求權重
% 第一步:將判斷矩陣按照列歸一化(每一個元素除以其所在列的和)
Sum_A = sum(A)
[n,n] = size(A) % 也可以寫成n = size(A,1)
% 因為我們的判斷矩陣A是一個方陣,所以這里的r和c相同,我們可以就用同一個字母n表示
SUM_A = repmat(Sum_A,n,1) %repeat matrix的縮寫
% 另外一種替代的方法如下:
SUM_A = [];
for i = 1:n %回圈哦,這一行后面不能加冒號(和Python不同),這里表示回圈n次
SUM_A = [SUM_A; Sum_A]
end
clc;A
SUM_A
Stand_A = A ./ SUM_A
% 這里我們直接將兩個矩陣對應的元素相除即可
% 第二步:將歸一化的各列相加(按行求和)
sum(Stand_A,2)
% 第三步:將相加后得到的向量中每個元素除以n即可得到權重向量
disp('算術平均法求權重的結果為:');
disp(sum(Stand_A,2) / n)
% 首先對標準化后的矩陣按照行求和,得到一個列向量
% 然后再將這個列向量的每個元素同時除以n即可(注意這里也可以用./哦)
%% 方法2:幾何平均法求權重
% 第一步:將A的元素按照行相乘得到一個新的列向量
clc;A
Prduct_A = prod(A,2)
% prod函式和sum函式類似,一個用于乘,一個用于加 dim = 2 維度是行
% 第二步:將新的向量的每個分量開n次方
Prduct_n_A = Prduct_A .^ (1/n)
% 這里對每個元素進行乘方操作,因此要加.號哦, ^符號表示乘方哦 這里是開n次方,所以我們等價求1/n次方
% 第三步:對該列向量進行歸一化即可得到權重向量
% 將這個列向量中的每一個元素除以這一個向量的和即可
disp('幾何平均法求權重的結果為:');
disp(Prduct_n_A ./ sum(Prduct_n_A))
%% 方法3:特征值法求權重
% 第一步:求出矩陣A的最大特征值以及其對應的特征向量
clc
[V,D] = eig(A) %V是特征向量, D是由特征值構成的對角矩陣(除了對角線元素外,其余位置元素全為0)
Max_eig = max(max(D)) %也可以寫成max(D(:))哦~
% 那么怎么找到最大特征值所在的位置了? 需要用到find函式,它可以用來回傳向量或者矩陣中不為0的元素的位置索引,
% 那么問題來了,我們要得到最大特征值的位置,就需要將包含所有特征值的這個對角矩陣D中,不等于最大特征值的位置全變為0
% 這時候可以用到矩陣與常數的大小判斷運算
D == Max_eig
[r,c] = find(D == Max_eig , 1)
% 找到D中第一個與最大特征值相等的元素的位置,記錄它的行和列,
% 第二步:對求出的特征向量進行歸一化即可得到我們的權重
V(:,c)% 取出特征向量(列向量)
disp('特征值法求權重的結果為:');
disp( V(:,c) ./ sum(V(:,c)) )
% 我們先根據上面找到的最大特征值的列數c找到對應的特征向量,然后再進行標準化,
%% 計算一致性比例CR
clc
CI = (Max_eig - n) / (n-1);
RI=[0 0 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
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://www.uj5u.com/qita/549057.html
標籤:其他
上一篇:AI演算法測驗之淺談
下一篇:1、kubernetes概念
